March 24th, 2023
Invoke SQL script during servlet initialization



Here MyContextListener is a listener which implements ServletContextListener

				
					--- web.xml ---

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app id="WebApp_ID">
	<display-name>proj2</display-name>
	
	<context-param>
		<param-name>createTables</param-name>
		<param-value>yes</param-value>
	</context-param>
	<listener>
		<listener-class>com.brains.MyContextListener</listener-class>
	</listener>
	<listener>
		<listener-class>com.brains.MySessionListener</listener-class>
	</listener>
	
	<servlet>
		<servlet-name>FirstServlet</servlet-name>
		<display-name>FirstServlet</display-name>
		<description></description>
		<servlet-class>brains.FirstServlet</servlet-class>
	</servlet>
	<servlet>
		<servlet-name>Login</servlet-name>
		<display-name>Login</display-name>
		<description></description>
		<servlet-class>brains.Login</servlet-class>
	</servlet>
	<servlet>
		<servlet-name>MyConfigDemo</servlet-name>
		<display-name>MyConfigDemo</display-name>
		<description></description>
		<servlet-class>brains.MyConfigDemo</servlet-class>
		<init-param>
			<param-name>driver</param-name>
			<param-value>com.mysql.jdbc.Driver</param-value>
			<description></description>
		</init-param>
	</servlet>
	<servlet-mapping>
		<servlet-name>FirstServlet</servlet-name>
		<url-pattern>/FirstServlet</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>Login</servlet-name>
		<url-pattern>/login</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>MyConfigDemo</servlet-name>
		<url-pattern>/MyConfigDemo</url-pattern>
	</servlet-mapping>
	<welcome-file-list>
		<welcome-file>login.html</welcome-file>
	</welcome-file-list>
</web-app>

				
			
				
					package com.brains;

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

import brains.DBInitializer;

public class MyContextListener implements ServletContextListener {
    public MyContextListener() {
    	System.out.println("MyContextListener constructor");
    }
    public void contextDestroyed(ServletContextEvent sce)  { 
    	System.out.println("Context destroyed");
    }
    public void contextInitialized(ServletContextEvent sce)  { 
    	System.out.println("Context initialized");
    	ServletContext servletContext = sce.getServletContext();
    	String param = servletContext.getInitParameter("createTables");
    	if(param.equals("yes")) {
    		String table = servletContext.getRealPath("WEB-INF/table/table.sql");
    		System.out.println("img: "+ table);
    		
    		DBInitializer db = new DBInitializer();
    		db.createTables(table);
    	}
    }
}

				
			
				
					package brains;

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

public class DatabaseConnection {

	public static Connection initialize() throws SQLException, ClassNotFoundException {
		String dbDriver = "com.mysql.cj.jdbc.Driver";
		String dbUrl = "jdbc:mysql://localhost:3307/";
		
		String dbName = "servlet-demo";
		String dbUsername = "root";
		String dbPassword = "root";
		
		Class.forName(dbDriver);
		Connection con = DriverManager.getConnection(dbUrl+dbName,dbUsername, dbPassword);
		return con;
	}
}

				
			
				
					package brains;

import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.Statement;
import java.util.StringTokenizer;

public class DBInitializer {

	public void createTables(String path) {
		try {
			FileInputStream in = new FileInputStream(path);
			byte data[] = new byte[in.available()];
			in.read(data);
			in.close();
			StringTokenizer str = new StringTokenizer(new String(data), "/");
			Connection con = DatabaseConnection.initialize();
			Statement stmt = con.createStatement();
			System.out.println("Creating tables...");
			while(str.hasMoreElements()) {
				String qr = str.nextToken();
				System.out.println(qr);
				if(qr.trim().equals("stop")) {
					break;
				}
				stmt.execute(qr);
			}
			System.out.println("tables successfully created.");
		}catch(Exception e) {
			System.out.println(e);
		}
	}
	
}

				
			
				
					package brains;

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

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class FirstServlet
 */
public class FirstServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public FirstServlet() {
        super();
        // TODO Auto-generated constructor stub
        System.out.println("constructor");
    }

//	@Override
//	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//		// TODO Auto-generated method stub
//		resp.getWriter().print("Servlet by http");
//	}

//	@Override
//	public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
//		// TODO Auto-generated method stub
//		res.getWriter().print("Servlet by original service");
//	}
	
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse resp) throws ServletException, IOException {
		resp.getWriter().print("Servlet by doGet");
		
		ServletConfig config = this.getServletConfig();
		ServletContext context = this.getServletContext();
		
		ServletContext servletContext = config.getServletContext();
		System.out.println(config);
		System.out.println(context);
		System.out.println(servletContext);
		
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		PrintWriter writer = resp.getWriter();
		
		String name = req.getParameter("name");
		String email = req.getParameter("email");
		String mobile = req.getParameter("mobile");
		String password = req.getParameter("password");
		
		Connection con = null;
		try {
			con = DatabaseConnection.initialize();
			PreparedStatement psc = con.prepareStatement("insert into employee values(?,?,?,?)");
			psc.setString(1, name);
			psc.setString(2, email);
			psc.setString(3, mobile);
			psc.setString(4, password);
			
			int i = psc.executeUpdate();
			if(i > 0) {
				resp.sendRedirect("welcome.html");
			}else {
				writer.println("problem");
			}
			
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

				
			
				
					package brains;

import java.io.IOException;
import java.util.Enumeration;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyConfigDemo extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		String dir = System.getProperty("user.dir");
		System.out.println("Dir: "+ dir);
		
//		String table = System.getProperty("user.dir")+"/table.sql";
		
		
		response.getWriter().println(this.getServletConfig());
		String name = (String) getServletContext().getAttribute("name");
		String password = (String) getServletContext().getAttribute("password");
		System.out.println("get: "+ name +":" + password);
		response.getWriter().println(name +" : "+password);
		
		
		ServletConfig config = this.getServletConfig();
		System.out.println(config);
		String driver = config.getInitParameter("driver");
		System.out.println("driver: "+ driver);
		
		ServletContext context = this.getServletContext();
		
		ServletContext servletContext = config.getServletContext();
		System.out.println(context);
		System.out.println(servletContext);
		
		String abcd = context.getInitParameter("abcd");
		System.out.println("abcd: "+ abcd);
		
		Enumeration<String> params = context.getInitParameterNames();
		while(params.hasMoreElements()) {
			String element = params.nextElement();
			System.out.println("element: "+ element +":"+context.getInitParameter(element));
		}
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		resp.getWriter().println(this.getServletConfig());
		
		String name = req.getParameter("name");
		String password = req.getParameter("password");
		System.out.println("post: "+ name +":" + password);
		resp.getWriter().println(name +" : "+password);
		
		
	}

}

				
			
				
					package brains;

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

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

/**
 * Servlet implementation class Login
 */
public class Login extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		response.setContentType("text/html");
		String name = request.getParameter("name");
		String password = request.getParameter("password");
		
		ServletContext servletContext = this.getServletContext();
		servletContext.setAttribute("name", name);
		servletContext.setAttribute("password", password);
		
		try {
			Connection conn = DatabaseConnection.initialize();
			PreparedStatement ps = conn.prepareStatement("select * from employee where name = ? and password = ?");
			ps.setString(1, name);
			ps.setString(2, password);
			
			ResultSet rs = ps.executeQuery();
			if(rs.next()) {
				
				HttpSession session = request.getSession();
				response.sendRedirect("MyConfigDemo");
			}else {
				response.getWriter().println("<span style='color:red'>404 error</span>");
				RequestDispatcher rd = request.getRequestDispatcher("login.html");
				rd.include(request, response);
			}
			
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

}

				
			
				
					CREATE TABLE employee (
    name varchar(255),
    email varchar(255),
    mobile varchar(255),
    password varchar(255)
)
/
CREATE TABLE persons (
    lastName varchar(255),
    firstName varchar(255),
    address varchar(255),
    city varchar(255)
)
				
			
				
					<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body bgcolor="yellow">
<h2>Login here </h2>
<form action="login" method="post">
	<input type="text" placeholder="First name" name="name"/></br>
	<input type="text" placeholder="Password" name="password"/></br>
	<input type="submit" value="Login"/>
</form></br>
<a href="register.html">Register here</a>
</body>
</html>
				
			
				
					<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body bgcolor="yellow">
It works
<form action="FirstServlet" method="post">
	<input type="text" placeholder="First name" name="name"></br>
	<input type="text" placeholder="Email" name="email"></br>
	<input type="text" placeholder="Mobile" name="mobile"></br>
	<input type="text" placeholder="Password" name="password"></br>
	<input type="submit">
</form></br>
<a href="login.html">Login here</a>
</body>
</html>
				
			
				
					<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>Welcome</h2>
</body>
</html>
				
			

Leave a Reply

Your email address will not be published. Required fields are marked *