Tugas Kuliah "Membuat Java Servlet Filter Dan Listener"

  1. Java Servlet Filter


    • Buat program “web application”  baru dengan nama filterLogin. Di bawah ini adalah struktur aplikasinya :
    • Ubah script di index.html
    • Buat JSP dengan nama "LoginSuccess.jsp", edit coding seperti di bawah :
    • kemudian buat JSP dengan nama "CheckoutPage.jsp" :
    • Tambah lagi Servlet dengan nama "LogoutServlet.java" :
      import java.io.IOException;
      import java.io.PrintWriter;
      import javax.servlet.ServletException;
      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;

      /**
       *
       * @author User
       */
      public class LogoutServlet extends HttpServlet {

          private static final long serialVersionUID = 1L;
          /**
           * Processes requests for both HTTP
           * <code>GET</code> and
           * <code>POST</code> methods.
           *
           * @param request servlet request
           * @param response servlet response
           * @throws ServletException if a servlet-specific error occurs
           * @throws IOException if an I/O error occurs
           */
          protected void processRequest(HttpServletRequest request, HttpServletResponse response)
                  throws ServletException, IOException {
              response.setContentType("text/html;charset=UTF-8");
              PrintWriter out = response.getWriter();
              try {
                  /* TODO output your page here. You may use following sample code. */
                  out.println("<!DOCTYPE html>");
                  out.println("<html>");
                  out.println("<head>");
                  out.println("<title>Servlet LogoutServlet</title>");            
                  out.println("</head>");
                  out.println("<body>");
                  out.println("<h1>Servlet LogoutServlet at " + request.getContextPath() + "</h1>");
                  out.println("</body>");
                  out.println("</html>");
              } finally {            
                  out.close();
              }
          }

          // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
          /**
           * Handles the HTTP
           * <code>GET</code> method.
           *
           * @param request servlet request
           * @param response servlet response
           * @throws ServletException if a servlet-specific error occurs
           * @throws IOException if an I/O error occurs
           */
          @Override
          protected void doGet(HttpServletRequest request, HttpServletResponse response)
                  throws ServletException, IOException {
              //processRequest(request, response);
          }

          /**
           * Handles the HTTP
           * <code>POST</code> method.
           *
           * @param request servlet request
           * @param response servlet response
           * @throws ServletException if a servlet-specific error occurs
           * @throws IOException if an I/O error occurs
           */
          @Override
          protected void doPost(HttpServletRequest request, HttpServletResponse response)
                  throws ServletException, IOException {
              //processRequest(request, response);
              
              response.setContentType("text/html");
              Cookie[] cookies = request.getCookies();
              if(cookies != null){
                  for(Cookie cookie : cookies){
                      if(cookie.getName().equals("JSESSIONID")){
                          System.out.println("JSESSIONID="+cookie.getValue());
                          break;
                      }
                  }
              }
              
              HttpSession session = request.getSession(false);
              System.out.println("User="+session.getAttribute("user"));
              if(session != null){
                  session.invalidate();
              }
              response.sendRedirect("index.jsp");
              
          }

          /**
           * Returns a short description of the servlet.
           *
           * @return a String containing servlet description
           */
          @Override
          public String getServletInfo() {
              return "Short description";
          }// </editor-fold>
      }
    • Masih ada lg nih "RequestLoggingFilter.java" :
      import java.io.IOException;
      import java.io.PrintStream;
      import java.io.PrintWriter;
      import java.io.StringWriter;
      import java.util.Enumeration;
      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.http.Cookie;
      import javax.servlet.http.HttpServlet;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      /**
      *
      * @author User
      */
      public class RequestLoggingFilter implements Filter {
      private static final boolean debug = true;
      private FilterConfig filterConfig = null;
      /**
      * Processes requests for both HTTP
      * <code>GET</code> and
      * <code>POST</code> methods.
      *
      * @param request servlet request
      * @param response servlet response
      * @throws ServletException if a servlet-specific error occurs
      * @throws IOException if an I/O error occurs
      */
      public RequestLoggingFilter() {
      }
      private void doBeforeProcessing(ServletRequest request, ServletResponse response)
      throws ServletException, IOException {
      if (debug) {
      log("RequestLoggingFilteroBeforeProcessing");
      }
      HttpServletRequest req = (HttpServletRequest) request;
      Enumeration<String> params = req.getParameterNames();
      while (params.hasMoreElements()) {
      String name = params.nextElement();
      String value = request.getParameter(name);
      log(req.getRemoteAddr() + "::Request Params::{" + name + "=" + value + "}");
      }
      Cookie[] cookies = req.getCookies();
      if (cookies != null) {
      for (Cookie cookie : cookies) {
      log(req.getRemoteAddr() + "::Cookie::{" + cookie.getName() + "," + cookie.getValue() + "}");
      }
      }
      }
      private void doAfterProcessing(ServletRequest request, ServletResponse response)
      throws ServletException, IOException {
      if (debug) {
      log("RequestLoggingFilteroAfterProcessing");
      }
      }
      public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
      throws IOException, ServletException {
      if (debug) {
      log("RequestLogginFilter:doFilter()");
      }
      doBeforeProcessing(request, response);
      Throwable problem = null;
      try {
      chain.doFilter(request, response);
      } catch (Throwable t) {
      problem = t;
      t.printStackTrace();
      }
      doAfterProcessing(request, response);
      if (problem != null) {
      if (problem instanceof ServletException) {
      throw (ServletException) problem;
      }
      if (problem instanceof ServletException) {
      throw (IOException) problem;
      }
      sendProcessingError(problem, response);
      }
      }
      public FilterConfig getFilterConfig() {
      return (this.filterConfig);
      }
      public void setFilterConfig(FilterConfig filterConfig) {
      this.filterConfig = filterConfig;
      }
      public void destroy() {
      }

      public void init(FilterConfig filterConfig) {
      this.filterConfig = filterConfig;
      if (filterConfig != null) {
      if (debug) {
      log("RequestLoggingFilter:Initializing filter");
      }
      }
      }
      @Override
      public String toString() {
      if (filterConfig == null) {
      return ("RequestLoggingFilter()");
      }
      StringBuffer sb = new StringBuffer("RequestLoggingFilter()");
      sb.append(filterConfig);
      sb.append(")");
      return (sb.toString());
      }

      public void sendProcessingError(Throwable t, ServletResponse response){
      String stackTrace = getStackTrace(t);

      if(stackTrace != null && !stackTrace.equals("")){
      try{

      response.setContentType("text/html");
      PrintStream ps = new PrintStream(response.getOutputStream());
      PrintWriter pw = new PrintWriter(ps);
      pw.print("<html>\n<head>\n<title>Error</title>\n</head>\n<body>\n");
      pw.print("<h1>The resource did not process correctly</h1>\n<pre>\n");
      pw.print(stackTrace);
      pw.print("</pre></body>\n</html>");
      pw.close();
      ps.close();
      response.getOutputStream().close();

      }catch(Exception ex){

      }
      }else{
      try{
      PrintStream ps = new PrintStream(response.getOutputStream());
      t.printStackTrace(ps);
      ps.close();
      response.getOutputStream().close();
      }catch(Exception ex){

      }
      }
      }

      public static String getStackTrace(Throwable t){
      String stackTrace = null;
      try{
      StringWriter sw = new StringWriter();
      PrintWriter pw = new PrintWriter(sw);
      t.printStackTrace(pw);
      pw.close();
      sw.close();
      stackTrace = sw.getBuffer().toString();
      }catch(Exception ex){

      }
      return stackTrace;
      }

      public void log(String msg){
      filterConfig.getServletContext().log(msg);
      }
      }
    • ini yang terakhir, "AuthenticationFilter.java" :
      import java.io.IOException;
      import java.io.PrintStream;
      import java.io.PrintWriter;
      import java.io.StringWriter;
      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.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      import javax.servlet.http.HttpSession;

      public class AuthenticationFilter implements Filter {
          private static final boolean DEBUG = true;
          private FilterConfig filterConfig = null;
           
          public AuthenticationFilter(){}
           
          private void doBeforeProcessing(ServletRequest request, ServletResponse response)
                  throws IOException, ServletException
          {
              if (DEBUG) {

                  log("AuthenticationFilter:doBeforeProcessing");
              }
          }
           
          private void doAfterProcessing(ServletRequest request, ServletResponse response)
                  throws IOException, ServletException {
              if (DEBUG) {
                  log("AuthenticationFilter:doAfterProcessing");
              }
          }
           
          public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                  throws IOException, ServletException {
              if (DEBUG) {
                  log("AuthenticationFilter:doFilter");
              }
               
              doBeforeProcessing(request, response);
               
              Throwable problem = null;
              try {
                  HttpServletRequest req = (HttpServletRequest) request;
                  HttpServletResponse res = (HttpServletResponse) response;
                   
                  String uri = req.getRequestURI();
                  log("Requested Resource::" + uri);
                   
                  HttpSession session = req.getSession(false);
                   
                  if (session == null && !(uri.endsWith("html") || uri.endsWith("LoginServlet"))) {
                      log("Unauthorized access request");
                      res.sendRedirect("index.html");
                  } else {
                      chain.doFilter(request, response);
                  }
                   
              } catch (Throwable t){
                  problem = t;
                  t.printStackTrace();
              }
               
              doAfterProcessing(request, response);
               
              if (problem != null) {
                  if (problem instanceof ServletException) {
                      throw (ServletException) problem;
                  }
                  if (problem instanceof IOException) {
                      throw (IOException) problem;
                  }
                  sendProcessingError(problem, response);
              }
          }
           
          public FilterConfig getFilterConfig(){
              return (this.filterConfig);
          }
           
          public void setFilterConfig(FilterConfig filterConfig){
              this.filterConfig = filterConfig;
          }
           
          public void destroy(){
               
          }
           
          public void init(FilterConfig filterConfig){
              this.filterConfig = filterConfig;
              if (filterConfig != null) {
                  if (DEBUG) {
                      log("AuthenticationFilter:Initializing filter");
                  }
              }
          }
           
          public String toString()
          {
              if (filterConfig == null) {
                  return ("AuthenticationFilter()");
              }
              StringBuffer sb = new StringBuffer("AuthenticationFilter(");
              sb.append(filterConfig);
              sb.append(")");
              return (sb.toString());
          }
           
          private void sendProcessingError(Throwable t, ServletResponse response){
              String stackTrace = getStackTrace(t);
               
              if (stackTrace != null && !stackTrace.equals("")) {
                  try {
                      response.setContentType("text/html");
                      PrintStream ps = new PrintStream(response.getOutputStream());
                      PrintWriter pw = new PrintWriter(ps);
                      pw.print("\n\n<title>Error</title>\n\n\n");
                      pw.print("<h1>");
                      pw.print(stackTrace);
                      pw.print("</pre>\n<\\html>"); // N0I18N
                      pw.close();
                      ps.close();
                      response.getOutputStream().close();
                  } catch (Exception ex){}
              } else {
                  try {
                      PrintStream ps = new PrintStream(response.getOutputStream());
                      t.printStackTrace(ps);
                      ps.close();
                      response.getOutputStream().close();
                  } catch(Exception ex){}
              }
          }
           
          public static String getStackTrace(Throwable t){
            &LoginSuccess.jspnbsp; String stackTrace = null;
              try {
                  StringWriter sw = new StringWriter();
                  PrintWriter pw = new PrintWriter(sw);
                  t.printStackTrace(pw);
                  pw.close();
                  sw.close();
                  stackTrace = sw.getBuffer().toString();
              } catch (Exception ex){}
               
              return stackTrace;
          }
           
          public void log(String msg){
              filterConfig.getServletContext().log(msg);
          }
      }
ServletContext adalah suatu interface yang digunakan untuk berkomunikasi dengan servlet containerDalam sebuah aplikasi web hanya terdapat satu ServletContext saja, dan seluruhkomponen aplikasi web dapat saling menggunakannya.

langsung ke pembuatan yaa :

  1. buat servlet baru dengan nama ServletContextClass dan copykan file di bawah ini :
    import com.sun.jmx.snmp.Enumerated;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Enumeration;
    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;
    /**
    *
    * @author User
    */
    public class ServletContextClass extends HttpServlet {
    /**
    * Processes requests for both HTTP
    * <code>GET</code> and
    * <code>POST</code> methods.
    *
    * @param request servlet request
    * @param response servlet response
    * @throws ServletException if a servlet-specific error occurs
    * @throws IOException if an I/O error occurs
    */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    try {
    /* TODO output your page here. You may use following sample code. */
    out.println("<!DOCTYPE html>");
    out.println("<html>");
    out.println("<head>");
    out.println("<title>Servlet ServletContextClass</title>"); 
    out.println("</head>");
    out.println("<body>");
    out.println("<h1>Servlet ServletContextClass at " + request.getContextPath() + "</h1>");
    out.println("</body>");
    out.println("</html>");
    } finally { 
    out.close();
    }
    }
    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
    * Handles the HTTP
    * <code>GET</code> method.
    *
    * @param request servlet request
    * @param response servlet response
    * @throws ServletException if a servlet-specific error occurs
    * @throws IOException if an I/O error occurs
    */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    //processRequest(request, response);

    response.setContentType("text/html; charset=UTF-8");
    PrintWriter out = response.getWriter();

    ServletContext ctx = getServletContext();
    ctx.setAttribute("name", "Eresha Wikrama");
    out.print(ctx.getAttribute("name"));

    Enumeration temp = ctx.getAttributeNames();
    while(temp.hasMoreElements()){
    String attrName = (String) temp.nextElement();
    out.print("<br>Attribut " + attrName +", nilainya = "+ ctx.getAttribute(attrName));
    }

    out.print("<br><br>getServletContextName() : "+ctx.getServletContextName());

    out.print("<br>" + ctx.getInitParameter("bhs1"));
    Enumeration temp2 = ctx.getInitParameterNames();
    while(temp2.hasMoreElements()){
    String paramName = (String) temp2.nextElement();
    out.print("<br>Attribut " +paramName+", nilainya = "+ ctx.getInitParameter(paramName));

    }

    out.print("<br>getServerInfo() : "+ ctx.getServerInfo());
    out.print("<br>getRealPath() : "+ ctx.getRealPath(""));
    ctx.log("Hello Word");

    ctx.setAttribute("name", "Eresha Wikrama Bogor, Teknik Informatika");
    ctx.setAttribute("name", null);

    request.setAttribute("word", "never say give up in this world");
    request.setAttribute("word", "do your best and let god do the rest");
    request.setAttribute("word", null);

    HttpSession session = request.getSession();
    session.setAttribute("userSession", "EreshaWikramaSession");
    session.setAttribute("userSession", "Mari belajar JAVA");
    session.setAttribute("userSession", null);

    }
    /**
    * Handles the HTTP
    * <code>POST</code> method.
    *
    * @param request servlet request
    * @param response servlet response
    * @throws ServletException if a servlet-specific error occurs
    * @throws IOException if an I/O error occurs
    */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    processRequest(request, response);
    }
    /**
    * Returns a short description of the servlet.
    *
    * @return a String containing servlet description
    */
    @Override
    public String getServletInfo() {
    return "Short description";
    }// </editor-fold>
    }
  2. Lalu buat file dengan nama ServletContextListenerClass.java, kemudian rubah menjadi :
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    import javax.servlet.annotation.WebListener;
    import javax.servlet.ServletContext;
    /**
     * Web application lifecycle listener.
     * @author user
     */
    @WebListener()
    public class ServletContextListenerClass implements ServletContextListener {
        @Override
        public void contextInitialized(ServletContextEvent sce) {
             ServletContext ctx = sce.getServletContext();
        if (ctx != null) {
            ctx.log("Context : " + ctx.getServletContextName() + " sudah diinisialisasi");
        }
        }
        @Override
        public void contextDestroyed(ServletContextEvent sce) {
       ServletContext ctx = sce.getServletContext();
        if (ctx != null) {
            ctx.log("Context : " + ctx.getServletContextName() + " sudah dihancurkan");
        }
        }
    }
  3. Kemudian buat lagi file dengan nama ServletContextAttributeListenerClass.java, rubah menjadi :
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    import javax.servlet.ServletContextAttributeEvent;
    import javax.servlet.annotation.WebListener;
    import javax.servlet.ServletContext;
    /**
     * Web application lifecycle listener.
     * @author user
     */
    @WebListener()
    public class ServletContextAttributeListenerClass implements javax.servlet.ServletContextAttributeListener {
        @Override
        public void attributeAdded(ServletContextAttributeEvent event) {
            ServletContext ctx=event.getServletContext();
            if (ctx != null) {
            ctx.log("Context " + ctx.getServletContextName() + ", "
                    + "attribute " + event.getName() + " dengan nilai : " + event.getValue()
                    + " sudah ditambahkan");
        }
        }
        @Override
        public void attributeRemoved(ServletContextAttributeEvent event) {
    ServletContext ctx=event.getServletContext();
            if (ctx != null) {
            ctx.log("Context " + ctx.getServletContextName() + ", "
                    + "attribute " + event.getName() + " dengan nilai : " + event.getValue()
                    + " sudah dihapus");
        }
        }
        @Override
        public void attributeReplaced(ServletContextAttributeEvent event) {
    ServletContext ctx=event.getServletContext();
             if (ctx != null) {
            ctx.log("Context " + ctx.getServletContextName() + ", "
                    + "attribute " + event.getName() + " dengan nilai : " + event.getValue()
                    + " sudah diubah");
            }
        }
    }
  4. buat lagi file dengan nama ServletRequestListenerClass.java, lalu rubah menjadi :
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    import javax.servlet.ServletRequestEvent;
    import javax.servlet.annotation.WebListener;
    import javax.servlet.ServletContext;
    /**
     * Web application lifecycle listener.
     * @author user
     */
    @WebListener()
    public class ServletRequestListenerClass implements javax.servlet.ServletRequestListener {
        @Override
        public void requestDestroyed(ServletRequestEvent sre) {
    ServletContext ctx=sre.getServletContext();
            if (ctx != null) {
            ctx.log("Context " + ctx.getServletContextName() + ", "
                     + "request " + sre.getServletRequest() + " sudah dihancurkan");
            }
        }
        @Override
        public void requestInitialized(ServletRequestEvent sre) {
        ServletContext ctx=sre.getServletContext();
            if (ctx != null) {
            ctx.log("Context " + ctx.getServletContextName() + ", "
                     + "request " + sre.getServletRequest() + " sudah diinisialisasi");
            }
        }
    }
  5. buat lagi file dengan nama ServletRequestAttributeListenerClass.java, rubah menjadi :
    import javax.servlet.ServletRequestAttributeEvent;
    import javax.servlet.ServletRequestAttributeListener;
    /*
    * To change this license header, choose License Headers in Project Properties.
    * To change this template file, choose Tools | Templates
    * and open the template in the editor.
    */
    /**
    * Web application lifecycle listener.
    *
    * @author user
    */
    public class ServletRequestAttributeListenerClass implements ServletRequestAttributeListener {
    @Override
    public void attributeAdded(ServletRequestAttributeEvent event) {
    System.out.print(“Attribute ditambahakan : ” + event.getName() + ” = ” +       event.getValue());
    // throw new UnsupportedOperationException(“Not supported yet.”);
             //To change body of generated methods, choose Tools | Templates.
    }@Override
    public void attributeRemoved(ServletRequestAttributeEvent event) {
    System.out.print(“Attribute dihapus : ” + event.getName() + ” = ” + event.getValue());
    // throw new UnsupportedOperationException(“Not supported yet.”);
              //To change body of generated methods, choose Tools | Templates.
    }@Override
    public void attributeReplaced(ServletRequestAttributeEvent event) {
    System.out.print(“Attribute diganti : ” + event.getName() + ” = ” + event.getValue());
    // throw new UnsupportedOperationException(“Not supported yet.”);
              //To change body of generated methods, choose Tools | Templates.
    }
    }
  6. Ayo buat lagi file dengan nama HttpSessionListenerClass.java, rubah menjadi :
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    import javax.servlet.annotation.WebListener;
    import javax.servlet.http.HttpSessionEvent;
    import javax.servlet.ServletContext;
    /**
     * Web application lifecycle listener.
     * @author user
     */
    @WebListener()
    public class HttpSessionListenerClass implements javax.servlet.http.HttpSessionListener {
        @Override
        public void sessionCreated(HttpSessionEvent se) {
     ServletContext ctx = se.getSession().getServletContext();
        if (ctx != null) {
            ctx.log("Context " + ctx.getServletContextName() + ", "
                    + "session " + se.getSession().getId() + " sudah dibuat");
            }
        }
        @Override
        public void sessionDestroyed(HttpSessionEvent se) {
             ServletContext ctx = se.getSession().getServletContext();
    if (ctx != null) {
            ctx.log("Context " + ctx.getServletContextName() + ", "
                    + "session " + se.getSession().getId() + " sudah dihancurkan");
        }
        }
    }
  7. yu ah buat lagi file dengan nama HttpSessionAttributeListener.java, rubah lagi isinya menjadi :
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    import javax.servlet.annotation.WebListener;
    import javax.servlet.http.HttpSessionBindingEvent;
    import javax.servlet.ServletContext;
    /**
     * Web application lifecycle listener.
     * @author user
     */
    @WebListener()
    public class HttpSessionAttributeListener implements javax.servlet.http.HttpSessionAttributeListener {
        @Override
        public void attributeAdded(HttpSessionBindingEvent event) {
    ServletContext ctx=event.getSession().getServletContext();
            if(ctx!=null){
                ctx.log("Context :"+ctx.getServletContextName()+" ,"+event.getSession().getId()+"session attribute"+event.getName()+"dengan nilai : "+event.getValue()+"sudah ditambahkan");
            }
        }
        @Override
        public void attributeRemoved(HttpSessionBindingEvent event) {
    ServletContext ctx=event.getSession().getServletContext();
            if(ctx!=null){
                ctx.log("Context :"+ctx.getServletContextName()+" ,"+event.getSession().getId()+"session attribute"+event.getName()+"dengan nilai : "+event.getValue()+"sudah dihapus");
            }
        }
        @Override
        public void attributeReplaced(HttpSessionBindingEvent event) {
            throw new UnsupportedOperationException("Not supported yet.");
        }
    }
  8. di bawah ini untuk web.xml nya. rubah menjadi ini ya.
    <?xml version="1.0" encoding="UTF-8"?>
        <context-param>
            <param-name>bhs1</param-name>
            <param-value>Java</param-value>
        </context-param>
        <context-param>
            <param-name>bhs2</param-name>
            <param-value>C++</param-value>
        </context-param>
        <context-param>
            <param-name>bhs3</param-name>
            <param-value>C</param-value>
        </context-param>
        <context-param>
            <param-name>bhs4</param-name>
            <param-value>VB.Net</param-value>
        </context-param>
        <context-param>
            <param-name>bhs5</param-name>
            <param-value>JSP</param-value>
        </context-param>
        <listener>
            <description>ServletContextListener</description>
            <listener-class>ServletContextListenerClass</listener-class>
        </listener>
        <listener>
            <description>ServletContextAttributeListener</description>
            <listener-class>ServletContextAttributeListenerClass</listener-class>
        </listener>
        <listener>
            <description>RequestListener</description>
            <listener-class>ServletRequestListenerClass</listener-class>
        </listener>
        <listener>
            <description>HttpSessionListener</description>
            <listener-class>HttpSessionListenerClass</listener-class>
        </listener>
        <listener>
            <description>RequestAttributeListener</description>
            <listener-class>HttpSessionAttributeListenerClass</listener-class>
        </listener>
        <servlet>
            <servlet-name>ServletContext</servlet-name>
            <servlet-class>ServletContext</servlet-class>
        </servlet>
        <servlet>
            <servlet-name>ServletContextClass</servlet-name>
            <servlet-class>ServletContextClass</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>ServletContext</servlet-name>
            <url-pattern>/ServletContext</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>ServletContextClass</servlet-name>
            <url-pattern>/ServletContextClass</url-pattern>
        </servlet-mapping>
        <session-config>
            <session-timeout>
                30
            </session-timeout>
        </session-config>
    </web-app>
Berikutnya kita membuat Servlet Context & Listener - DB, siapkan jari ya. 
oke langsung kita mulai.

1.  Buat Project baru ya.
2.  Buat file dengan nama DBConnectionManager.javakemudian rubah menjadi :
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 *
 * @author user
 */
public class DBConnectionManager {
    /**
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
     * methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    private String dbURL;
    private String user;
    private String password;
    private Connection con;
    public DBConnectionManager(String url, String u, String p) {
        this.dbURL = url;
        this.user = u;
        this.password = p;
        //create db connection now
    }
    public Connection getConnection() {
        return this.con;
    }
    public void closeConnection() {
    }
}
3.  Lalu buat lagi file dengan nama MyServlet.java, rubah menjadi :
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
import java.io.IOException;
import java.io.PrintWriter;
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;
/**
 *
 * @author user
 */
public class MyServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        try (PrintWriter out = response.getWriter()) {
            /* TODO output your page here. You may use following sample code. */
            out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet MyServlet</title>");
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet MyServlet at " + request.getContextPath()
                    + "</h1>");
            out.println("</body>");
            out.println("</html>");
        }
    }
 @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // processRequest(request, response);
        ServletContext ctx = request.getServletContext();
        ctx.setAttribute("User", "Maulana");
        String user = (String) ctx.getAttribute("User");
        ctx.removeAttribute("User");
        HttpSession session = request.getSession();
        session.invalidate();
        PrintWriter out = response.getWriter();
        out.write("Hi " + user);
    }
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}

4.  Kemudian buat file lagi dengan nama AppContextListener.java, rubah menjadi :
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/**
 *
 * @author user
 */
public class AppContextListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        ServletContext ctx = sce.getServletContext();
        String url = ctx.getInitParameter("DBURL");
        String u = ctx.getInitParameter("DBUSER");
        String p = ctx.getInitParameter("DBPWD");
        //create database connection from init parameters and set it to context
        DBConnectionManager dbManager = new DBConnectionManager(url, u, p);
        ctx.setAttribute("DBManager", dbManager);
        System.out.println("Database connection initialized for Application.");
    }
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        ServletContext ctx = sce.getServletContext();
        DBConnectionManager dbManager = (DBConnectionManager) ctx.getAttribute("DBManager");
        dbManager.closeConnection();
        System.out.println("Database connection closed for Application.");
    }
}

5.  Dilanjutkan dengan file AppContextAttributeListener.java, rubah menjadi :
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
/**
 *
 * @author user
 */
public class AppContextAttributeListener implements ServletContextAttributeListener {
    @Override
    public void attributeAdded(ServletContextAttributeEvent event) {
        System.out.println("ServletContext attribute added::{" + event.getName()
                + "," + event.getValue() + "}");
    }
    @Override
    public void attributeRemoved(ServletContextAttributeEvent event) {
        System.out.println("ServletContext attribute replaced::{" + event.getName()
                + "," + event.getValue() + "}");
    }
    @Override
    public void attributeReplaced(ServletContextAttributeEvent event) {
        System.out.println("ServletContext attribute removed::{" + event.getName()
                + "," + event.getValue() + "}");
    }
}
6.  Buat file lagi dengan nama HttpSessionListener.java, rubah menjadi :
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
import javax.servlet.http.HttpSessionEvent;
/**
 *
 * @author user
 */
public class HttpSessionListener implements javax.servlet.http.HttpSessionListener {
    @Override
    public void sessionCreated(HttpSessionEvent se) {
        System.out.println("Session Created:: ID=" + se.getSession().getId());
    }
    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        System.out.println("Session Destroyed:: ID=" + se.getSession().getId());
    }
}7.  Sebentar lagi selesai, buat file dengan nama ServletRequestListener.java, rubah menjadi :
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
import javax.servlet.ServletRequest;
import javax.servlet.ServletRequestEvent;
/**
 *
 * @author user
 */
public class ServletRequestListener implements javax.servlet.ServletRequestListener {
    @Override
    public void requestDestroyed(ServletRequestEvent sre) {
        ServletRequest servletRequest = sre.getServletRequest();
        System.out.println("ServletRequest destroyed. Remote IP="
                + servletRequest.getRemoteAddr());
    }
    @Override
    public void requestInitialized(ServletRequestEvent sre) {
        ServletRequest servletRequest = sre.getServletRequest();
        System.out.println("ServletRequest initialized. Remote IP="
                + servletRequest.getRemoteAddr());
    }
}
8.  The last rubah web.xml nya menjadi :
<?xml version="1.0" encoding="UTF-8"?>
    <servlet>
        <servlet-name>DBConnectionManager</servlet-name>
        <servlet-class>DBConnectionManager</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>MyServlet</servlet-name>
        <servlet-class>MyServlet</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>AppContextListener</servlet-name>
        <servlet-class>AppContextListener</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>AppContextAttributeListener</servlet-name>
        <servlet-class>AppContextAttributeListener</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>MySessionListener</servlet-name>
        <servlet-class>MySessionListener</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>MyServletRequestListener</servlet-name>
        <servlet-class>MyServletRequestListener</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>DBConnectionManager</servlet-name>
        <url-pattern>/DBConnectionManager</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>MyServlet</servlet-name>
        <url-pattern>/MyServlet</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>AppContextListener</servlet-name>
        <url-pattern>/AppContextListener</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>AppContextAttributeListener</servlet-name>
        <url-pattern>/AppContextAttributeListener</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>MySessionListener</servlet-name>
        <url-pattern>/MySessionListener</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>MyServletRequestListener</servlet-name>
        <url-pattern>/MyServletRequestListener</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
</web-app>

Selesai

Comments