Рубрики
Без рубрики

Пример подключения к базе данных сервлета JDBC

Пример сервлета JDBC, Подключение к базе данных, Сервлет MySQL, Log4j, Форма регистрации JSP, Страница входа в систему JSP, Исключение, Обработчик ошибок, Фильтр, Проект загрузки.

Автор оригинала: Pankaj Kumar.

Подключение к базе данных JDBC сервлета и интеграция Log4j-это тема этого урока. Мы предоставили множество учебных пособий по сервлетам на java, этот учебник направлен на использование всей этой информации для создания полноценного веб-приложения с подключением к базе данных и интеграцией log4j для ведения журнала.

Я настоятельно рекомендую ознакомиться со следующими учебными пособиями, если вы не знакомы ни с одним из них. Все они содержат примеры проектов, которые вы можете скачать и запустить для понимания основных концепций API сервлетов.

  1. Обзор веб-приложения J2EE
  2. Учебник по сервлетам для начинающих
  3. Управление сеансами в сервлетах
  4. Фильтр Сервлетов
  5. Прослушиватель Сервлетов
  6. Обработка исключений Сервлета
  7. Пример файла Cookie Сервлета

Пример JDBC сервлета

Разработайте веб-приложение, которое должно обладать следующими функциями.

  1. Пользователь может зарегистрироваться, а затем войти в приложение.
  2. Информация о пользователях должна храниться в базе данных.
  3. Используйте стандартную структуру ведения журнала log4j.
  4. Приложение должно поддерживать управление сеансами, никакие JSP не должны быть видны без сеанса. Пользователи могут выйти из приложения в любое время.
  5. Мы не должны показывать сведения о приложении и сервере пользователю в случае каких-либо исключений в приложении или других распространенных ошибок, таких как 404.

Как только мы подготовим наше базовое приложение, мы сможем перейти к добавлению других функций.

Проектные Решения

  1. Поскольку страница входа в систему является точкой входа в приложение, у нас будет простая login.html где пользователь может ввести свои учетные данные; адрес электронной почты и пароль. Мы не можем полагаться на проверки javascript, поэтому мы проведем проверку на стороне сервера, и в случае отсутствия информации мы перенаправим пользователя на страницу входа с информацией об ошибке.
  2. У нас будет register.html форма, в которой пользователь может зарегистрироваться в нашем приложении, мы предоставим его ссылку на странице входа для нового пользователя. Пользователь должен указать адрес электронной почты, пароль, имя и данные страны для регистрации.

    Если какая-либо информация отсутствует, пользователь останется на той же странице с сообщением об ошибке. Если регистрация пройдет успешно, пользователь будет перенаправлен на страницу входа с информацией об успешной регистрации, и он сможет использовать электронную почту и пароль для входа.

  3. Мы будем использовать базу данных MySQL для сохранения информации о пользователе. Мы создадим новую базу данных, таблицу пользователей и пользователей для нашего приложения. Поскольку наше приложение полностью зависит от подключения к базе данных, мы создадим servletcontextlistener для инициализации подключения к базе данных и установим его в качестве атрибута контекста для других сервлетов.

    Мы будем настраивать детали конфигурации БД с помощью дескриптора развертывания. Мы также добавим MySQL Java Connector jar в библиотеки приложений.

  4. Поскольку мы хотим использовать log4j и правильно настроить его перед использованием, мы будем использовать servletcontextlistener для настройки log4j и сохранения расположения XML-файла конфигурации log4j в web.xml параметры инициализации. Мы запишем журналы наших приложений в отдельный файл журнала db example.log для облегчения отладки.
  5. В случае каких-либо исключений, таких как “Ошибка подключения к базе данных” или 404 ошибки, мы хотим представить пользователю полезную страницу. Мы будем использовать обработку исключений сервлета, напишем ваш собственный сервлет обработчика исключений и настроим его в дескрипторе развертывания.
  6. Как только пользователь успешно войдет в систему, мы создадим сеанс для пользователя и перешлем его в home.jsp, где мы покажем основную информацию о пользователе. У нас будет пользователь класса модели, который будет хранить пользовательские данные в сеансе. На домашней странице пользователя также предусмотрена кнопка выхода, которая сделает сеанс недействительным и перенаправит их на страницу входа.
  7. Нам нужно убедиться, что все JSP и другие ресурсы доступны только тогда, когда у пользователя есть действительный сеанс, вместо того, чтобы сохранять логин для проверки сеанса во всех ресурсах, мы создадим фильтр сервлетов для проверки сеанса и настроим его в дескрипторе развертывания.
  8. Мы будем использовать функции Servlet 3.0 для настройки сервлетов, прослушивателей и фильтров, а не хранить все это в дескрипторе развертывания. Мы будем использовать Eclipse для разработки и Tomcat 7 для развертывания.

Основываясь на вышеуказанных требованиях и дизайнерских решениях, мы создадим наш динамический веб-проект, структура проекта которого будет выглядеть так, как показано на рисунке ниже.

Давайте разберемся в каждом из компонентов и разберемся в их реализации.

Пример сервлета JDBC – Настройка базы данных

Мы будем использовать приведенный ниже скрипт MySQL для настройки новой базы данных, пользователей и таблиц, которые будут использоваться в нашем приложении.

-- login with root to create user, DB and table and provide grants
 
create user 'pankaj'@'localhost' identified by 'pankaj123';

grant all on *.* to 'pankaj'@'localhost' identified by 'pankaj123';

create database UserDB;

use UserDB;

CREATE TABLE `Users` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL DEFAULT '',
  `email` varchar(20) NOT NULL DEFAULT '',
  `country` varchar(20) DEFAULT 'USA',
  `password` varchar(20) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

HTML-страницы для входа и регистрации

HTML-страницы входа и регистрации-это простые страницы с формой для отправки информации о пользователе, их код выглядит следующим образом.

login.html код:






Login Page


Login with email and password

User Email:
Password:

If you are new user, please register.

register.html код:






Register Page


Provide all the fields for registration.

Email ID:
Password:
Name:
Country:

If you are registered user, please login.

Дескриптор развертывания и конфигурация log4j

У нас будет файл конфигурации log4j в папке WEB-INF, и он будет упакован вместе с файлом войны приложений.

log4j.xml код:





	
		
		
		
		
		
		
			
		
	
	
	
		
		
	
	
	
		
		
	
	

Наш дескриптор развертывания (web.xml) выглядит так, как показано ниже.



  ServletDBLog4jExample
  
    login.html
  
  
    dbUser
    pankaj
  
  
    dbPassword
    pankaj123
  
  
    dbURL
    jdbc:mysql://localhost:3306/UserDB
  
  
    log4j-config
    WEB-INF/log4j.xml
  
  
  
    404
    /AppErrorHandler
  
  
    java.lang.Throwable
    /AppErrorHandler
  
  
  
    AuthenticationFilter
    com.journaldev.servlet.filters.AuthenticationFilter
  
  
    AuthenticationFilter
    /*
  
  

Обратите внимание на следующие моменты в web.xml конфигурация.

  1. login.html предоставляется файл приветствия в списке файлов приветствия.
  2. Параметры подключения к базе данных настраиваются и сохраняются в качестве параметров инициализации контекста сервлета.
  3. расположение файла конфигурации log4j также настраивается, и относительное расположение предоставляется в качестве параметра инициализации контекста.
  4. Наш пользовательский обработчик исключений сервлет App ErrorHandler настроен для обработки всех исключений, создаваемых нашим кодом приложения, и 404 ошибок.
  5. Фильтр аутентификации настроен для фильтрации всех входящих запросов к приложению, это место, где у нас будет логика проверки сеанса.

Классы моделей и Класс Диспетчера подключений к базе данных

User.java это простой javabean, который будет содержать информацию о пользователе в качестве атрибута сеанса.

package com.journaldev.util;

import java.io.Serializable;

public class User implements Serializable{
	
	private static final long serialVersionUID = 6297385302078200511L;
	
	private String name;
	private String email;
	private int id;
	private String country;
	
	public User(String nm, String em, String country, int i){
		this.name=nm;
		this.id=i;
		this.country=country;
		this.email=em;
	}

	public void setName(String name) {
		this.name = name;
	}


	public void setEmail(String email) {
		this.email = email;
	}


	public void setId(int id) {
		this.id = id;
	}


	public void setCountry(String country) {
		this.country = country;
	}


	public String getName() {
		return name;
	}

	public String getEmail() {
		return email;
	}

	public int getId() {
		return id;
	}

	public String getCountry() {
		return country;
	}
	
	@Override
	public String toString(){
		return "Name="+this.name+", Email="+this.email+", Country="+this.country;
	}
}

DBConnectionManager.java является служебным классом для подключения к базе данных MySQL и имеет метод, возвращающий объект подключения. Мы будем использовать этот класс для подключения к базе данных, а затем установим объекту подключения атрибут контекста сервлета, который могут использовать другие сервлеты.

package com.journaldev.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DBConnectionManager {

	private Connection connection;
	
	public DBConnectionManager(String dbURL, String user, String pwd) throws ClassNotFoundException, SQLException{
		Class.forName("com.mysql.jdbc.Driver");
		this.connection = DriverManager.getConnection(dbURL, user, pwd);
	}
	
	public Connection getConnection(){
		return this.connection;
	}
}

Пример сервлета JDBC – Прослушиватель контекста

AppContextListener.java является реализацией servletcontextlistener, которая инициализирует подключение к базе данных при инициализации контекста приложения, а также настраивает log4j, используя его конфигурационный xml-файл. Обратите внимание на использование параметров инициализации контекста для подключения к БД и конфигурации log4j.

Когда контекст будет уничтожен, мы закрываем соединение с базой данных методом contextDestroyed ().

Поскольку мы используем сервлет 3, нам не нужно настраивать его в web.xml и нам просто нужно аннотировать его аннотацией @WebListener.

package com.journaldev.servlet.listeners;

import java.io.File;
import java.sql.Connection;
import java.sql.SQLException;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.xml.DOMConfigurator;

import com.journaldev.util.DBConnectionManager;

@WebListener
public class AppContextListener implements ServletContextListener {

    public void contextInitialized(ServletContextEvent servletContextEvent) {
    	ServletContext ctx = servletContextEvent.getServletContext();
    	
    	//initialize DB Connection
    	String dbURL = ctx.getInitParameter("dbURL");
    	String user = ctx.getInitParameter("dbUser");
    	String pwd = ctx.getInitParameter("dbPassword");
    	
    	try {
			DBConnectionManager connectionManager = new DBConnectionManager(dbURL, user, pwd);
			ctx.setAttribute("DBConnection", connectionManager.getConnection());
			System.out.println("DB Connection initialized successfully.");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
    	
    	//initialize log4j
    	String log4jConfig = ctx.getInitParameter("log4j-config");
    	if(log4jConfig == null){
    		System.err.println("No log4j-config init param, initializing log4j with BasicConfigurator");
			BasicConfigurator.configure();
    	}else {
			String webAppPath = ctx.getRealPath("/");
			String log4jProp = webAppPath + log4jConfig;
			File log4jConfigFile = new File(log4jProp);
			if (log4jConfigFile.exists()) {
				System.out.println("Initializing log4j with: " + log4jProp);
				DOMConfigurator.configure(log4jProp);
			} else {
				System.err.println(log4jProp + " file not found, initializing log4j with BasicConfigurator");
				BasicConfigurator.configure();
			}
		}
    	System.out.println("log4j configured properly");
    }

    public void contextDestroyed(ServletContextEvent servletContextEvent) {
    	Connection con = (Connection) servletContextEvent.getServletContext().getAttribute("DBConnection");
    	try {
			con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
    }
	
}

Обработчик исключений и ошибок

AppErrorHandler.java является ли наш сервлет обработчика исключений приложений, настроенный в дескрипторе развертывания, он предоставляет полезную информацию пользователю в случае 404 ошибок или исключений уровня приложения и предоставляет им гиперссылку для перехода на страницу входа в приложение.

package com.journaldev.servlet.errorhandler;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/AppErrorHandler")
public class AppErrorHandler extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		processError(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		processError(request, response);
	}
	
	private void processError(HttpServletRequest request,
			HttpServletResponse response) throws IOException {
		// Analyze the servlet exception
		Throwable throwable = (Throwable) request
				.getAttribute("javax.servlet.error.exception");
		Integer statusCode = (Integer) request
				.getAttribute("javax.servlet.error.status_code");
		String servletName = (String) request
				.getAttribute("javax.servlet.error.servlet_name");
		if (servletName == null) {
			servletName = "Unknown";
		}
		String requestUri = (String) request
				.getAttribute("javax.servlet.error.request_uri");
		if (requestUri == null) {
			requestUri = "Unknown";
		}
		
		// Set response content type
	      response.setContentType("text/html");
	 
	      PrintWriter out = response.getWriter();
	      out.write("Exception/Error Details");
	      if(statusCode != 500){
	    	  out.write("

Error Details

"); out.write("Status Code:"+statusCode+"
"); out.write("Requested URI:"+requestUri); }else{ out.write("

Exception Details

"); out.write("
  • Servlet Name:"+servletName+"
  • "); out.write("
  • Exception Name:"+throwable.getClass().getName()+"
  • "); out.write("
  • Requested URI:"+requestUri+"
  • "); out.write("
  • Exception Message:"+throwable.getMessage()+"
  • "); out.write("
"); } out.write("

"); out.write("Login Page"); out.write(""); } }

Фильтр Сервлетов

AuthenticationFilter.java это наша реализация фильтра, и мы проверяем сеанс пользователя здесь.

package com.journaldev.servlet.filters;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;

@WebFilter("/AuthenticationFilter")
public class AuthenticationFilter implements Filter {

	private Logger logger = Logger.getLogger(AuthenticationFilter.class);
	
	public void init(FilterConfig fConfig) throws ServletException {
		logger.info("AuthenticationFilter initialized");
	}
	
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

		HttpServletRequest req = (HttpServletRequest) request;
		HttpServletResponse res = (HttpServletResponse) response;
		
		String uri = req.getRequestURI();
		logger.info("Requested Resource::"+uri);
		
		HttpSession session = req.getSession(false);
		
		if(session == null && !(uri.endsWith("html") || uri.endsWith("Login") || uri.endsWith("Register"))){
			logger.error("Unauthorized access request");
			res.sendRedirect("login.html");
		}else{
			// pass the request along the filter chain
			chain.doFilter(request, response);
		}	
	}

	public void destroy() {
		//close any resources here
	}
}

Обратите внимание на использование аннотации @WebFilter, мы также можем предоставить шаблоны URL-адресов для фильтрации здесь, но иногда полезно иметь в web.xml чтобы легко отключить фильтры.

Классы Сервлетов

Ресурс LoginServlet используется для проверки ввода пользователем данных для входа в систему и пересылки их на домашнюю страницу или, в случае отсутствия данных, предоставления полезной информации пользователю.

package com.journaldev.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;

import com.journaldev.util.User;

@WebServlet(name = "Login", urlPatterns = { "/Login" })
public class LoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	static Logger logger = Logger.getLogger(LoginServlet.class);
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String email = request.getParameter("email");
		String password = request.getParameter("password");
		String errorMsg = null;
		if(email == null || email.equals("")){
			errorMsg ="User Email can't be null or empty";
		}
		if(password == null || password.equals("")){
			errorMsg = "Password can't be null or empty";
		}
		
		if(errorMsg != null){
			RequestDispatcher rd = getServletContext().getRequestDispatcher("/login.html");
			PrintWriter out= response.getWriter();
			out.println(""+errorMsg+"");
			rd.include(request, response);
		}else{
		
		Connection con = (Connection) getServletContext().getAttribute("DBConnection");
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			ps = con.prepareStatement("select id, name, email,country from Users where email=? and password=? limit 1");
			ps.setString(1, email);
			ps.setString(2, password);
			rs = ps.executeQuery();
			
			if(rs != null && rs.next()){
				
				User user = new User(rs.getString("name"), rs.getString("email"), rs.getString("country"), rs.getInt("id"));
				logger.info("User found with details="+user);
				HttpSession session = request.getSession();
				session.setAttribute("User", user);
				response.sendRedirect("home.jsp");;
			}else{
				RequestDispatcher rd = getServletContext().getRequestDispatcher("/login.html");
				PrintWriter out= response.getWriter();
				logger.error("User not found with email="+email);
				out.println("No user found with given email id, please register first.");
				rd.include(request, response);
			}
		} catch (SQLException e) {
			e.printStackTrace();
			logger.error("Database connection problem");
			throw new ServletException("DB Connection problem.");
		}finally{
			try {
				rs.close();
				ps.close();
			} catch (SQLException e) {
				logger.error("SQLException in closing PreparedStatement or ResultSet");;
			}
			
		}
		}
	}

}

LogoutServlet прост и делает недействительным сеанс пользователя и перенаправляет его на страницу входа в систему.

package com.journaldev.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;

@WebServlet(name = "Logout", urlPatterns = { "/Logout" })
public class LogoutServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	static Logger logger = Logger.getLogger(LogoutServlet.class);
       
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	response.setContentType("text/html");
    	Cookie[] cookies = request.getCookies();
    	if(cookies != null){
    	for(Cookie cookie : cookies){
    		if(cookie.getName().equals("JSESSIONID")){
    			logger.info("JSESSIONID="+cookie.getValue());
    			break;
    		}
    	}
    	}
    	//invalidate the session if exists
    	HttpSession session = request.getSession(false);
    	logger.info("User="+session.getAttribute("User"));
    	if(session != null){
    		session.invalidate();
    	}
    	response.sendRedirect("login.html");
    }

}

RegisterServlet используется пользователями для регистрации в приложении, а затем пересылает их на страницу входа с сообщением об успешной регистрации.

package com.journaldev.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;

@WebServlet(name = "Register", urlPatterns = { "/Register" })
public class RegisterServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	static Logger logger = Logger.getLogger(RegisterServlet.class);
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String email = request.getParameter("email");
		String password = request.getParameter("password");
		String name = request.getParameter("name");
		String country = request.getParameter("country");
		String errorMsg = null;
		if(email == null || email.equals("")){
			errorMsg = "Email ID can't be null or empty.";
		}
		if(password == null || password.equals("")){
			errorMsg = "Password can't be null or empty.";
		}
		if(name == null || name.equals("")){
			errorMsg = "Name can't be null or empty.";
		}
		if(country == null || country.equals("")){
			errorMsg = "Country can't be null or empty.";
		}
		
		if(errorMsg != null){
			RequestDispatcher rd = getServletContext().getRequestDispatcher("/register.html");
			PrintWriter out= response.getWriter();
			out.println(""+errorMsg+"");
			rd.include(request, response);
		}else{
		
		Connection con = (Connection) getServletContext().getAttribute("DBConnection");
		PreparedStatement ps = null;
		try {
			ps = con.prepareStatement("insert into Users(name,email,country, password) values (?,?,?,?)");
			ps.setString(1, name);
			ps.setString(2, email);
			ps.setString(3, country);
			ps.setString(4, password);
			
			ps.execute();
			
			logger.info("User registered with email="+email);
			
			//forward to login page to login
			RequestDispatcher rd = getServletContext().getRequestDispatcher("/login.html");
			PrintWriter out= response.getWriter();
			out.println("Registration successful, please login below.");
			rd.include(request, response);
		} catch (SQLException e) {
			e.printStackTrace();
			logger.error("Database connection problem");
			throw new ServletException("DB Connection problem.");
		}finally{
			try {
				ps.close();
			} catch (SQLException e) {
				logger.error("SQLException in closing PreparedStatement");
			}
		}
		}
		
	}

}

Главная страница JSP

home.jsp-это домашняя страница пользователя после успешного входа в систему, мы просто показываем здесь некоторую информацию о пользователе и предоставляем им возможность выйти из системы.

главная страница.код jsp:

<%@page import="com.journaldev.util.User"%>
<%@ page language="java" contentType="text/html; charset=US-ASCII"
    pageEncoding="US-ASCII"%>





Home Page


<%User user = (User) session.getAttribute("User"); %>

Hi <%=user.getName() %>

Your Email: <%=user.getEmail() %>
Your Country: <%=user.getCountry() %>

Страница JSP по-прежнему содержит много кода java, потому что мы не используем теги JSP, мы рассмотрим это в учебных пособиях по JSP. С этого момента, пожалуйста, смиритесь с этим.

Запустите пример приложения Servlet JDBC

Наше приложение готово к выполнению, я бы предложил экспортировать его в файл WAR и затем развернуть в tomcat, а не развертывать его непосредственно на сервере Tomcat из Eclipse, чтобы вы могли легко просмотреть файл журнала log4j для отладки.

Некоторые примеры страниц выполнения показаны на изображениях ниже.

Страница регистрации пользователя :

Страница Успешной регистрации :

Страница входа в систему :

Домашняя страница пользователя :

Страница с ошибкой 404 :

Страница Ошибки проверки ввода :

Файл журнала log4j :

пример базы данных.журнал:

0    [localhost-startStop-1] INFO  com.journaldev.servlet.filters.AuthenticationFilter  - AuthenticationFilter initialized
1    [localhost-startStop-1] INFO  com.journaldev.servlet.filters.AuthenticationFilter  - AuthenticationFilter initialized
37689 [http-bio-8080-exec-3] INFO  com.journaldev.servlet.filters.AuthenticationFilter  - Requested Resource::/ServletDBLog4jExample/
37689 [http-bio-8080-exec-3] ERROR com.journaldev.servlet.filters.AuthenticationFilter  - Unauthorized access request
37693 [http-bio-8080-exec-4] INFO  com.journaldev.servlet.filters.AuthenticationFilter  - Requested Resource::/ServletDBLog4jExample/login.html
51844 [http-bio-8080-exec-5] INFO  com.journaldev.servlet.filters.AuthenticationFilter  - Requested Resource::/ServletDBLog4jExample/register.html
77818 [http-bio-8080-exec-7] INFO  com.journaldev.servlet.filters.AuthenticationFilter  - Requested Resource::/ServletDBLog4jExample/Login
77835 [http-bio-8080-exec-7] INFO  com.journaldev.servlet.LoginServlet  - User found with details=Name=Pankaj Kumar, Email=pankaj@apple.com, Country=India
77840 [http-bio-8080-exec-8] INFO  com.journaldev.servlet.filters.AuthenticationFilter  - Requested Resource::/ServletDBLog4jExample/home.jsp
98251 [http-bio-8080-exec-9] INFO  com.journaldev.servlet.filters.AuthenticationFilter  - Requested Resource::/ServletDBLog4jExample/Logout
98251 [http-bio-8080-exec-9] INFO  com.journaldev.servlet.LogoutServlet  - JSESSIONID=367DE255789AC02F7C0E0298B825877C
98251 [http-bio-8080-exec-9] INFO  com.journaldev.servlet.LogoutServlet  - User=Name=Pankaj Kumar, Email=pankaj@apple.com, Country=India
98254 [http-bio-8080-exec-10] INFO  com.journaldev.servlet.filters.AuthenticationFilter  - Requested Resource::/ServletDBLog4jExample/login.html
109516 [http-bio-8080-exec-10] INFO  com.journaldev.servlet.filters.AuthenticationFilter  - Requested Resource::/ServletDBLog4jExample/Register
109517 [http-bio-8080-exec-10] INFO  com.journaldev.servlet.RegisterServlet  - User registered with email=abc@abc.com
127848 [http-bio-8080-exec-10] INFO  com.journaldev.servlet.filters.AuthenticationFilter  - Requested Resource::/ServletDBLog4jExample/Login
223055 [http-bio-8080-exec-2] INFO  com.journaldev.servlet.filters.AuthenticationFilter  - Requested Resource::/ServletDBLog4jExample/Login
223056 [http-bio-8080-exec-2] INFO  com.journaldev.servlet.LoginServlet  - User found with details=Name=Pankaj Kumar, Email=pankaj@apple.com, Country=India
223059 [http-bio-8080-exec-2] INFO  com.journaldev.servlet.filters.AuthenticationFilter  - Requested Resource::/ServletDBLog4jExample/home.jsp
231931 [http-bio-8080-exec-2] INFO  com.journaldev.servlet.filters.AuthenticationFilter  - Requested Resource::/ServletDBLog4jExample/invalidurl.jsp

Загрузка Ресурсов

  1. MySQL Java Connector Jar
  2. Банка Log4j

Я надеюсь, что вам понравилась статья и вы понимаете основные концепции интеграции Servlet JDBC и Log4j, пожалуйста, поделитесь и дайте мне знать ваше мнение в комментариях.