Receiving Parameter values from jsp page

studentform.jsp


<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Student Personal Information</title>
</head>
<body>
<form name="StudentForm" action="DisplayStudentController" method="post">
First Name: <input type="text" name="firstName">
<br><br>
Last Name: <input type="text" name="lastName">
<br><br>
Age <input type="number" name="age" min="1" max="200">
<br><br>
Gender:
        Male<input type="radio" name="gender" value="Male">
        Female<input type="radio" name="gender" value="Female">
<br><br>
Date of Birth: <input type="date" name="dob">
<br><br>
State:
<select name="state">
    <option>"Chennai"</option>
    <option>"Delhi"</option>
    <option>"Mimbai"</option>
    <option>"Andrapradesh"</option>
     
</select>
<input type="submit" value="Submit">
<input type="reset" value="Reset">
</form>
</body>
</html>

PageAccessServlet.java


package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * Servlet implementation class DisplayStudentController
 */
@WebServlet("/DisplayStudentController")
public class DisplayStudentController extends HttpServlet {
    private static final long serialVersionUID = 1L;
     
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter out = response.getWriter();
        response.setContentType("text/html");
        out.println("Recieved Details are:");
         
        out.println("<br>Your Name is:"+ request.getParameter("firstName") +" "+request.getParameter("lastName"));
     
        out.println("<br>Your Age is:"+ request.getParameter("age"));
     
        out.println("<br>Your Gender is:"+ request.getParameter("gender"));
     
        //Converting Date format to dd-mm-yyy
        String tempDob= request.getParameter("dob");
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
        SimpleDateFormat sdf2 = new SimpleDateFormat("dd-MM-YYYY");
        String dob;
         
        try {
            dob = sdf2.format(sdf1.parse(tempDob));
            out.println("<br>Your Date of Birth is:"+ dob);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
             
        out.println("<br>Your Living State is:"+ request.getParameter("state"));
     
    }
}

Login Count by Listener Interface

web.xml


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>LoginCountListenerDemo</display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
   
   
 <servlet>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>com.spin.controller.LoginServlet</servlet-class>
  </servlet>
 <servlet-mapping>
    <servlet-name>LoginServlet</servlet-name>
    <url-pattern>/login</url-pattern>
 </servlet-mapping>
  
 <servlet>
    <servlet-name>LogoutServlet</servlet-name>
    <servlet-class>com.spin.controller.LogoutServlet</servlet-class>
  </servlet>
 <servlet-mapping>
    <servlet-name>LogoutServlet</servlet-name>
    <url-pattern>/logout</url-pattern>
 </servlet-mapping>
  
 <listener>
 <listener-class>com.spin.listeners.MyServletSessionListener</listener-class>
  
 </listener>
</web-app>

index.jsp


<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html >
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Login Count Demo</title>
</head>
<body>
<form action="login" method="get">
 
<br>User ID:  <input type="text" name="userName">
<br><br>Password: <input type="password" name="password">
<br></br><input type="submit" value="Login">
</form>
 
</body>
</html>

LoginServlet.java


package com.spin.controller;
 
import java.io.IOException;
import java.io.PrintWriter;
 
import javax.servlet.ServletContext;
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;
 
 
//@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
        
    
    public void init() throws ServletException
    {
        System.out.println("Init method is called"+ this.getClass().getName());
         
    }
         
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
         
        String userName = request.getParameter("userName");
        out.println("Hi "+userName);;
         
        HttpSession session = request.getSession();
        session.setAttribute("userName", userName);
         
        ServletContext context = getServletContext();
        int totalUsers = (Integer) context.getAttribute("totalUsers");
        int currentUsers = (Integer) context.getAttribute("currentUsers");
         
        out.print("Total No.of Users are: "+totalUsers);
        out.print("Current Users are: "+currentUsers);
        out.println("<br><a href='logout'>Logout</a>");
         
    }
    public void destroy()
    {
        System.out.println("Inside destroy");
         
    }
}

LogoutServlet.java


 package com.spin.controller;
 
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;
import javax.servlet.http.HttpSession;
 
 
//@WebServlet("/LogoutServlet")
public class LogoutServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
 
     
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
         
        HttpSession session = request.getSession(false);
        session.invalidate();
         
        out.println("You have sucessfully logout");
         
    }
}

MyServletSessionListener.java


package com.spin.listeners;
 
 
import javax.servlet.ServletContext;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
 
/**
 * Application Lifecycle Listener implementation class MyServletSessionListener
 *
 */
@WebListener
public class MyServletSessionListener implements HttpSessionListener {
 
    ServletContext context = null;
    static int totalUsers =0, currentUsers=0;
     
    public void sessionCreated(HttpSessionEvent arg0)  {
         
        System.out.println("sessionCreated method called in "+ this.getClass().getName());
         
        totalUsers++;
        currentUsers++;
         
        context = arg0.getSession().getServletContext();
        context.setAttribute("totalUsers", totalUsers);
        context.setAttribute("currentUsers",currentUsers);
        System.out.println(totalUsers);
        System.out.println(currentUsers);
         
    }
 
     
    public void sessionDestroyed(HttpSessionEvent arg0)  {
        System.out.println("sessionDetroyed method has been called in "+ this.getClass().getName());
        currentUsers--;
        context.setAttribute("currentUsers",currentUsers);
          
    }
     
}

Multi Chain Filter – Example

web.xml


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>MultiChainFilter</display-name>
  <welcome-file-list>
    <welcome-file>login.jsp</welcome-file>
  </welcome-file-list>
  <!-- Servlet Mapping -->
  <servlet>
    <servlet-name>LoginController</servlet-name>
    <servlet-class>com.spin.controller.LoginController</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>LoginController</servlet-name>
    <url-pattern>/LoginController</url-pattern>
  </servlet-mapping>
   
  <!-- Login Filter Mapping -->
  <filter>
    <filter-name>LoginFilter</filter-name>
    <filter-class>com.spin.filter.LoginFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>/LoginController</url-pattern>
  </filter-mapping>
  <!-- Authentication Filter Mapping -->
  <filter>
    <filter-name>AuthenticateFilter</filter-name>
    <filter-class>com.spin.filter.AuthenticateFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>AuthenticateFilter</filter-name>
    <url-pattern>/LoginController</url-pattern>
  </filter-mapping>
</web-app>

login.jsp


<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Servlet Filter</title>
</head>
<body>
    <form action="LoginController" method="post">
        <br>User Id :  <input type="text" name="userId">
        <br><input type="submit" value="Submit">
    </form>
</body>
</html>

LoginFilter.java


package com.spin.filter;
 
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;
 
 
//@WebFilter("/LoginFilter")
public class LoginFilter implements Filter {
    
    public void destroy() {
        System.out.println("LoginFilter is destroyed");
    }
 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
         
        //HttpServletRequest req= (HttpServletRequest)request;
        //HttpServletResponse res=(HttpServletResponse)response;
         
        String userId=request.getParameter("userId");
        System.out.println("LoginFilter doFilter - Request ");
        System.out.println("User id"+userId);
        if ( userId != null && !"".equals(userId.trim() ) )
        {
            chain.doFilter(request, response);
            System.out.println("LoginFilter doFilter - Response ");
        }
        else
        {
            System.out.println("User id is Empty");
            response.getWriter().print("<html<head><title></title></head>"
                    + "<body>User Id is Empty <br> <a href="+"http://localhost:8080/MultiChainFilter>Click here to go back</a>"
                    + "</body></html>");
        }
    }
 
    public void init(FilterConfig fConfig) throws ServletException {
        System.out.println("LoginFilter is Initialized");
    }
}

AuthenticateFilter.java


package com.spin.filter;
 
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpSession;
 
import com.spin.dto.User;
import com.spin.service.LoginService;
 
//@WebFilter("/AuthenticateFilter")
public class AuthenticateFilter implements Filter {
 
     
    public AuthenticateFilter() {
        // TODO Auto-generated constructor stub
    }
 
     
    public void destroy() {
        System.out.println("AuthenticateFilter is destroyed");
    }
 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
         
        HttpServletRequest req=(HttpServletRequest)request;
        HttpServletResponse res=(HttpServletResponse)response;
        String userId=request.getParameter("userId");
        System.out.println("inside AuthenticateFilter");
                 
        LoginService loginService = new LoginService();
         
        User user = new User();
        user = loginService.getUserDetail(userId);
        if(user.getUserName()!=null)
        {
            HttpSession session = req.getSession();
            session.setAttribute("userName", user.getUserName());
            chain.doFilter(request, response);
            session.removeAttribute("userName");
        }
        else
        {
            RequestDispatcher dispatcher = req.getRequestDispatcher("failure.jsp");
            dispatcher.forward(req, res);
        }
    }
 
    public void init(FilterConfig fConfig) throws ServletException {
        System.out.println("AuthenticateFilter is Initialized");
    }
 
}

LoginController.java


package com.spin.controller;
 
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;
import javax.servlet.http.HttpSession;
 
//@WebServlet("/LoginController")
public class LoginController extends HttpServlet {
    private static final long serialVersionUID = 1L;
        
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         
 
        PrintWriter out = response.getWriter();
        response.setContentType("text/html");
         
        System.out.println("inside LoginController");
                 
        HttpSession session = request.getSession();
        String userName=(String)session.getAttribute("userName");
        out.println("Hi "+userName +"! You are an Authurised user");
         
         
    }
 
}

User.java


 package com.spin.dto;
 
public class User {
    private String userId;
    private String userName;
     
    public User(){
         
    }
     
    public String getUserId() {
        return userId;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
}

LoginService.java


package com.spin.service;
 
import java.util.HashMap;
 
import com.spin.dto.User;
 
public class LoginService {
     
    HashMap<String,String> users = new HashMap<String,String>();
     
    public LoginService() {
        users.put("Emp101","Sridhar");
        users.put("Emp102","Vimal");
        users.put("Emp103","Kumar");
        users.put("Emp104","Raja");
    }
         
    public User getUserDetail(String userId){
         
        User user = new User();
        user.setUserId(users.get(userId));
        user.setUserName(users.get(userId));
        return user;
    }
}

failure.jsp


 <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Login Failed</title>
</head>
<body>
<h3>Authentication Failed Due to Incorrect User Id</h3>
    <form action="http://localhost:8080/MultiChainFilter/">
        <br>
        <input type="submit" value="Retry">
    </form>
 
</body>
</html>

Output


Single Chain Filter

web.xml


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>FilterApp</display-name>
  <welcome-file-list>
    <welcome-file>login.jsp</welcome-file>
  </welcome-file-list>
  <!-- Servlet Mapping -->
  <servlet>
        <servlet-name>LoginController</servlet-name>
        <servlet-class>com.spin.controller.LoginController</servlet-class>
  </servlet>
  <servlet-mapping>
        <servlet-name>LoginController</servlet-name>
        <url-pattern>/LoginController</url-pattern>
  </servlet-mapping>
   
  <!-- Filter Mapping -->
  <filter>
        <filter-name>LoginFilter</filter-name>
        <filter-class>com.spin.filter.LoginFilter</filter-class>
  </filter>
   
  <filter-mapping>
        <filter-name>LoginFilter</filter-name>
        <url-pattern>/LoginController</url-pattern>
  </filter-mapping>
 
</web-app>

login.jsp


<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html >
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Servlet Filter</title>
</head>
<body>
    <form action="LoginController" method="post">
        <br>User Id :  <input type="text" name="userId">
        <br><input type="submit" value="Submit">
    </form>
</body>
</html>

LoginFilter.java


LoginController.java


package com.spin.filter;
 
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;
 
/**
 * Servlet Filter implementation class LoginFilter
 */
//@WebFilter("/LoginController")
public class LoginFilter implements Filter {
 
     public LoginFilter() {
        }
 
     
    public void destroy() {
        System.out.println("Filter is destroyed");
    }
 
    /**
     * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
     */
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
         
        //HttpServletRequest req= (HttpServletRequest)request;
        //HttpServletResponse res=(HttpServletResponse)response;
         
        String userId=request.getParameter("userId");
        System.out.println("doFilter - Request ");
        System.out.println("User id"+userId);
        if ( userId != null && !"".equals(userId.trim() ) )
        {
            chain.doFilter(request, response);
            System.out.println("doFilter - Response ");
        }
        else
        {
            System.out.println("User id is Empty");
            response.getWriter().print("<html<head><title></title></head>"
                    + "<body>User Id is Empty <br> <a href="+"http://localhost:8080/FilterApp>Click here to go back</a>"
                    + "</body></html>");
        }
    }
 
    public void init(FilterConfig fConfig) throws ServletException {
        System.out.println("Filter is Initialized");
    }
 
}

LoginService.java


package com.spin.controller;
 
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;
 
import com.spin.dto.User;
import com.spin.service.LoginService;
 
//@WebServlet("/LoginController")
public class LoginController extends HttpServlet {
    private static final long serialVersionUID = 1L;
        
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         
        PrintWriter out = response.getWriter();
        response.setContentType("text/html");
        String userId=request.getParameter("userId");
        System.out.println("inside doPost User id:"+userId);
                 
        LoginService loginService = new LoginService();
         
        User user = new User();
        user = loginService.getUserDetail(userId);
        out.println("Hi "+user.getUserName());
         
         
    }
 
}

User.java


 package com.spin.dto;
 
public class User {
 
    private String userId;
    private String userName;
     
    public User(){
    }
     
    public String getUserId() {
        return userId;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }  
}

Output


 

Servlet Filter

A filter is an object that can transform a request or modify a response. Filters are not servlets; they don’t actually create a response. They are preprocessors of the request before it reaches a servlet, and/or post processors of the response leaving a servlet, There are are various types of filters suggested by the specifications:

    • authentication filters
    • logging and auditing filters
    • image conversion filters
    • data compression filters
    • encryption filters
    • tokenizing filters
    • filters that trigger resource access events
    • XSL/T filters that transform XML content
    • MIME-type chain filters

Filters are important for a number of reasons. First, they provide the ability to encapsulate recurring tasks in reusable units. Organized developers are constantly on the lookout for ways to modularize their code. Modular code is more manageable and documentable, is easier to debug, and if done well, can be reused in another setting.

Second, filters can be used to transform the response from a servlet or a JSP page. A common task for the web application is to format data sent back to the client. Increasingly the clients require formats (for example, WML) other than just HTML.

Note that filters are not servlets. They do not implement and override HttpServlet methods such as doGet() or doPost(). Rather, a filter implements the methods of thejavax.servlet.Filter interface. The methods are:

    • init(javax.servlet.FilterConfig cfg). This method is called by the container once, when the servlet filter is placed into service. The FilterConfig passed to this method contains the init-parameters of the servlet filter. Specify the init-parameters for a servlet filter during configuration using the assembly tool.


    • destroy. This method is called by the container when the servlet filter is taken out of a service.
    • doFilter(ServletRequest req, ServletResponse res, FilterChain chain). This method is called by the container for every servlet request that maps to this filter before invoking the servlet. The doFilter() has been  separated into two sections: filtering the request and filtering the response. The two sections are separated by a call from the javax.servlet.FilterChain object to the next object in the chain, which could be the Servlet or another filter.

AttributeListener

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
 
@WebListener
public final class AttributeListener implements ServletContextListener,
        HttpSessionAttributeListener {
 
    private ServletContext context = null;
 
    public void attributeAdded(HttpSessionBindingEvent se) {
        HttpSession session = se.getSession();
        String id = session.getId();
        String name = se.getName();
        String value = (String) se.getValue();
        String message = new StringBuffer("New attribute has been added to session: \n").append("Attribute Name: ").append(name).append("\n").append("Attribute Value:").append(value).toString();
        log(message);
    }
 
    public void attributeRemoved(HttpSessionBindingEvent se) {
        HttpSession session = se.getSession();
        String id = session.getId();
        String name = se.getName();
        if (name == null) {
            name = "Unknown";
        }
        String value = se.getValue().toString();
        String message = new StringBuffer("Attribute has been removed: \n").append("Attribute Name: ").append(name).append("\n").append("Attribute Value: ").append(value).toString();
        log(message);
    }
 
    public void attributeReplaced(HttpSessionBindingEvent se) {
        String name = se.getName();
        if (name == null) {
            name = "Unknown";
        }
        String value = (String) se.getValue();
        String message = new StringBuffer("Attribute has been replaced: \n ").append(name).toString();
        log(message);
    }
 
    private void log(String message) {
        if (context != null) {
            context.log("SessionListener: " + message);
        } else {
            System.out.println("SessionListener: " + message);
        }
    }
 
    @Override
    public void contextInitialized(ServletContextEvent event) {
        this.context = event.getServletContext();
        log("contextInitialized()");
    }
 
    @Override
    public void contextDestroyed(ServletContextEvent event) {
// Do something
    }
}

ServletContextListener

import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletContextEvent;
import javax.servlet.annotation.WebListener;
 
@WebListener
public class StartupShutdownListener implements ServletContextListener {
 
    public void contextInitialized(ServletContextEvent event) {
        System.out.println("Servlet startup...");
        System.out.println(event.getServletContext().getServerInfo());
        System.out.println(System.currentTimeMillis());
        // See error in server.log if mail is unsuccessful
        sendEmail("Servlet context has initialized");
    }
 
    public void contextDestroyed(ServletContextEvent event) {
        System.out.println("Servlet shutdown...");
        System.out.println(event.getServletContext().getServerInfo());
        System.out.println(System.currentTimeMillis());
        // See error in server.log if mail is unsuccessful
        sendEmail("Servlet context has been destroyed...");
    }
 
    /**
     * This implementation uses the GMail smtp server
     * @param message
     * @return
     */
    private boolean sendEmail(String message) {
       boolean result = false;
       String smtpHost = "smtp.someserver.com";
       String smtpUsername = "username";
       String smtpPassword = "password";
       String from = "fromaddress";
       String to = "toaddress";
       int smtpPort = 587;
       System.out.println("sending email...");
        try {
            // Send email here
             
            //Set the host smtp address
            Properties props = new Properties();
            props.put("mail.smtp.host", smtpHost);
            props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable", "true");
 
            // create some properties and get the default Session
            Session session = Session.getInstance(props);
 
            // create a message
            Message msg = new MimeMessage(session);
 
            // set the from and to address
            InternetAddress addressFrom = new InternetAddress(from);
            msg.setFrom(addressFrom);
            InternetAddress[] address = new InternetAddress[1];
            address[0] = new InternetAddress(to);
            msg.setRecipients(Message.RecipientType.TO, address);
            msg.setSubject("Servlet container shutting down");
            // Append Footer
            msg.setContent(message, "text/plain");
            Transport transport = session.getTransport("smtp");
//            transport.connect(smtpHost, smtpPort, smtpUsername, smtpPassword);
             
  //          Transport.send(msg);
 
            result = true;
        } catch (javax.mail.MessagingException ex) {
            ex.printStackTrace();
            result = false;
        }
        return result;
    }
}

SessionListener

import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
 
 
@WebListener
public class SessionListener implements HttpSessionListener {
 
    private int numberOfSessions;
 
    public SessionListener() {
        numberOfSessions = 0;
    }
 
    public int getNumberOfSessions() {
        return numberOfSessions;
    }
 
    @Override
    public void sessionCreated(HttpSessionEvent arg) {
        HttpSession session = arg.getSession();
        session.setMaxInactiveInterval(60);
        session.setAttribute("testAttr", "testVal");
        synchronized (this) {
            numberOfSessions++;
        }
        System.out.println("Session created, current count: " + numberOfSessions);
    }
 
    @Override
    public void sessionDestroyed(HttpSessionEvent arg) {
        HttpSession session = arg.getSession();
        synchronized (this) {
            numberOfSessions--;
        }
        System.out.println("Session destroyed, current count: " + numberOfSessions);
        System.out.println("The attribute value: " + session.getAttribute(("testAttr")));
    }
}

Servlet Listeners

An Event are basically occurrence of something. Changing the state of an object is known as an event.

A listener receives the notifications about changes in the Servlet and perform some action.

We can perform some important task at the occurrence of these events,  such as:

  • Counting total and current logged users.
  • Creating tables of the database at the time of deploying the  project.
  • Creating database connection object, and etc..

Various Listener Interfaces are:

 1.     Servlet RequestAtrributeListener

This will give a notification about the changes to the attributes of ServletRequest in an application.

Methods:

             void attributeadded(servletrequestattributeevent e)

     void attributeremoved(servletrequestattributeevent e)

      void attributereplaced(servletrequestattributeevent e)

2.     HttpSessionAttributeListener

This will give a notification the changes (added, removed, and replaced) on the attributes in any session on the server.

Methods:

             void attributeAdded(HttpSessionBindingEvent event)

      void attributeRemoved(HttpSessionBindingEvent event)

      void attributeReplaced(HttpSessionBindingEvent event)

3.     ServletContextAtributeListener

This will give a notification, whenever the web application context has been added, removed or replaced.

Methods:

              void attributeAdded(ServletContextAttributeEvent e)

      void attributeRemoved(ServletContextAttributeEvent e)

      void attributeReplaced(ServletContextAttributeEvent e)

 

4.     Servlet RequestListener

This will give a notification about life cycle events for a ServletRequest

Methods:      

            void requestDestroyed(ServletRequestEvent e)

     void requestInitialized(ServletRequestEvent e)

5.     HttpSessionListener

This will give a notification for changes to sessions within a web application. HttpSessionListener is used to perform some important tasks when a session is created or destroyed. For example: counting the number of active sessions.

Methods:

      void sessionCreated(HttpSessionEvent e)

      void sessionDestroyed(HttpSessioEvent e)

6.     ServletContextListener

This will give a notification about the changes to the servlet context of a web application.

Methods:

            void contextDestroyed(ServletContextEvent e)

            void contextInitialized(ServletContextEvent e)

 7.     HTTPSessionBindingListener

This interface will notify an object when it is bound to or unbound from a session.

Methods:

       void valueBound(HttpSessionBindingEvent event).

void valueUnBound(HttpSessionBindingEvent event).

8.     HTTPSessionActivationListener

The HttpSessionActivationListener is used for responding to events when a session object migrates from one virtual machine to another. When a session is activated, notification that the session has just been activated will be received by theSessionDidActivate method and when the session is about to be destroyed, thesessionWillPassivate method is invoked.

Methods:

            public void sessionDidActivate(HttpSessionEvent se)
public void sessionWillPassivate(HttpSessionEvent se)

Asynchronous Servlet

import java.io.IOException;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import javax.servlet.AsyncContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
@WebServlet(name = "AsyncServlet", urlPatterns = {"/AsyncServlet"}, asyncSupported = true)
@WebFilter(urlPatterns="/*", asyncSupported=true)
public class AsyncServlet extends HttpServlet {
 
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        try {
            System.out.println("Starting doGet");
            AsyncContext ac = request.startAsync();
            ac.addListener(new MyListener());
            System.out.println("Do some stuff in doGet ...");
// Start another service
            ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(10);
            executor.execute(new ServletService(ac));
            System.out.println("Some more stuff in doGet ...");
        } finally {
        }
    }
}