Jumat, 16 Januari 2015

Tugas Java Servlet Filter dan Listener

Langsung saja berikut akan dibahas mengenai tugas bahasa pemrograman java, yaitu:

  1. Java Servlet Filter
  2. ServletContext dan Listener
  3. ServletContext dan Listener-DB



Java Servlet Filter


Dalam tugas ini akan dibahas mengenai logging and session validation. dan akan membuat contoh program yang bisa mencatat aktifitas yang dilakukan user, semua kegiatan user akan dicatat oleh server pada file log. dan aplikasi ini akan memvalidasi user ketika mengakses halaman tertentu. Jika user belum melakukan login maka akan diarahkan ke form login.

Pertama buat project web application baru dengan nama filterLogin. lalu buat file berikut: 

  • index.html
  • CheckoutPage.jsp
  • LoginSuccess.jsp 
  • AuthenticationFilter.java
  • LoginServlet.java
  • LogoutServlet.java
  • RequestLoggingFilter.java
Kemudian edit file file tersebut sebagai berikut :

index.html

<!DOCTYPE html>
<!--
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.
-->
<html>
    <head>
        <title>Filter Login</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
    <body>
        <form action="LoginServlet" method="post">
        Username: <input type="text" name="user">
        <br>
        Password: <input type="password" name="pwd">
        <br>
        <input type="submit" value="Login">
        </form>
    </body>
</html>


CheckoutPage.jsp

<%-- 

    Document   : CheckoutPage

    Author     : mukti

--%>



<%@page contentType="text/html" pageEncoding="UTF-8"%>

<!DOCTYPE html>

<html>

    <head>

        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

        <title>JSP Page</title>

    </head>

    <body>

        <%

            String userName = null;

            String sessionID = null;

            Cookie[] cookies = request.getCookies();
            if(cookies != null){
                for(Cookie cookie : cookies){
                    if(cookie.getName().equals("user")){
                        userName = cookie.getValue();
                    }
                }
            }
        %>
        <h3>Hi <%=userName%>, do the checkout.</h3>
        <br>
        <form action="LogoutServlet" method="post">
            <input type="submit" value="Logout">
        </form>
    </body>
</html>


LoginSuccess.jsp

<%-- 
    Document   : LoginSuccess
    Author     : mukti
--%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <%
            String user = (String) session.getAttribute("user");
            String userName = null;
            String sessionID = null;
            Cookie[] cookies = request.getCookies();
            if(cookies != null){
                for(Cookie cookie : cookies){
                    if(cookie.getName().equals("user")){
                        userName = cookie.getValue();
                    }
                    if(cookie.getName().equals("JSESSIONID")){
                        sessionID = cookie.getValue();
                    }
                }
            }
        %>
        <h3>Hi <%=userName%>, Login sucessful. Your Session ID=<%=sessionID%></h3>
        <br>
        User=<%=user%>
        <a href="CheckoutPage.jsp">Checkout Page</a>
        <form action="LogoutServlet" method="post">
            <input type="submit" value="Logout">
        </form>
    </body>
</html>


AuthenticationFilter.java

import java.io.IOException;

import java.io.PrintStream;

import java.io.PrintWriter;

import java.io.StringWriter;

import java.util.logging.Filter;

import java.util.logging.LogRecord;

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;



/*

 * 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.
 */

/**
 *
 * @author mukti
 */
public class AuthenticationFilter implements Filter {
    private static final boolean debug = true;
// The filter configuration object we are associated with. If
// this value is null, this filter instance is not currently
// configured.
    private FilterConfig filterConfig = null;
    public AuthenticationFilter() {
    }
    private void doBeforeProcessing(ServletRequest request, ServletResponse response)
            throws IOException, ServletException {
        if (debug) {
            log("AuthenticationFilter:DoBeforeProcessing");
        }
// For example, a filter might append something to the response.
    }
    private void doAfterProcessing(ServletRequest request, ServletResponse response)
            throws IOException, ServletException {
        if (debug) {
            log("AuthenticationFilter:DoAfterProcessing");
        }
 // Write code here to process the request and/or response after
        // the rest of the filter chain is invoked.
        // For example, a logging filter might log the attributes on the
        // request object after the request has been processed.
    }
    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 {
// pass the request along the filter chain
                chain.doFilter(request, response);
            }
        } catch (Throwable t) {
// If an exception is thrown somewhere down the filter chain,
// we still want to execute our after processing, and then
// rethrow the problem after that.
            problem = t;
            t.printStackTrace();
        }
        doAfterProcessing(request, response);
// If there was a problem, we want to rethrow it if it is
// a known type, otherwise log it.
        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");
            }
        }
    }
    @Override
    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("<html>\n<head>\n<title>Error</title>\n</head>\n<body>\n");
//NOI18N
                // PENDING! Localize this for next official release
                pw.print("<h1>The resource did not process correctly</h1>\n<pre>\n");
                pw.print(stackTrace);
                pw.print("</pre></body>\n</html>"); //NOI18N
                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);
    }

    @Override
    public boolean isLoggable(LogRecord record) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
}


LoginServlet.java

/*
 * 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.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author mukti
 */
@WebServlet(urlPatterns = {"/LoginServlet"})
public class LoginServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    private final String userID = "admin";
    private final String password = "123";
    /**
     * 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");
        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 LoginServlet</title>");            
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet LoginServlet at " + request.getContextPath() + "</h1>");
            out.println("</body>");
            out.println("</html>");
        }
    }

    // <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);
        
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}


LogoutServlet.java

/*
 * 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.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;

/**
 *
 * @author mukti
 */
@WebServlet(urlPatterns = {"/LogoutServlet"})
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");
        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 LogoutServlet</title>");            
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet LogoutServlet at " + request.getContextPath() + "</h1>");
            out.println("</body>");
            out.println("</html>");
        }
    }

    // <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("tect/html");
        Cookie[] cookies = request.getCookies();
        if(cookies != null){
            for(Cookie cookie : cookies){
                if(cookie.getName().equals("JSESSIONID")){
                    System.out.println("JESSIONID="+cookie.getValue());
                    break;
                }
            }
        }
        HttpSession session = request.getSession(false);
        System.out.println("User="+session.getAttribute("user"));
        if(session!=null){
            session.invalidate();
        }
        response.sendRedirect("index.html");
    }

    /**
     * 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>

}


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.HttpServletRequest;

/*
 * 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.
 */

/**
 *
 * @author mukti
 */
public class RequestLoggingFilter implements Filter {
    private static final boolean debug = true;
// The filter configuration object we are associated with. If
// this value is null, this filter instance is not currently
// configured.
    private FilterConfig filterConfig = null;
//private ServletContext context;
    public RequestLoggingFilter() {
    }
    private void doBeforeProcessing(ServletRequest request, ServletResponse response)
            throws IOException, ServletException {
        if (debug) {
            log("RequestLoggingFilter:DoBeforeProcessing");
        }
        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() + "}");
            }
        }
// Write code here to process the request and/or response before
// the rest of the filter chain is invoked.
// For example, a logging filter might log items on the request object,
// such as the parameters.
/*
         64 for (Enumeration en = request.getParameterNames(); en.hasMoreElements(); ) {
         65 String name = (String)en.nextElement();
         66 String values[] = request.getParameterValues(name);
         67 int n = values.length;
         68 StringBuffer buf = new StringBuffer();
         69 buf.append(name);
         70 buf.append("=");
         71 for(int i=0; i < n; i++) {
         72 buf.append(values[i]);
         73 if (i < n-1)
         74 buf.append(",");
         75 }
         76 log(buf.toString());
         77 }
         78 */
    }
    private void doAfterProcessing(ServletRequest request, ServletResponse response)
            throws IOException, ServletException {
        if (debug) {
            log("RequestLoggingFilter:DoAfterProcessing");
        }
// Write code here to process the request and/or response after
// the rest of the filter chain is invoked.
// For example, a logging filter might log the attributes on the
// request object after the request has been processed.
    }
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain)
            throws IOException, ServletException {
        if (debug) {
            log("RequestLoggingFilter:doFilter()");
        }
        doBeforeProcessing(request, response);
        Throwable problem = null;
        try {
            chain.doFilter(request, response);
        } catch (Throwable t) {
// If an exception is thrown somewhere down the filter chain,
// we still want to execute our after processing, and then
// rethrow the problem after that.
            problem = t;
            t.printStackTrace();
        }
        doAfterProcessing(request, response);
// If there was a problem, we want to rethrow it if it is
// a known type, otherwise log it.
        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("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());
    }
    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("<html>\n<head>\n<title>Error</title>\n</head>\n<body>\n");
//NOI18N
                pw.print("<h1>The resource did not process correctly</h1>\n<pre>\n");
                pw.print(stackTrace);
                pw.print("</pre></body>\n</html>"); //NOI18N
                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);
    }
}


web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
    <filter>
        <filter-name>RequestLoggingFilter</filter-name>
        <filter-class>RequestLoggingFilter</filter-class>
    </filter>
    <filter>
        <filter-name>AuthenticationFilter</filter-name>
        <filter-class>AuthenticationFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>RequestLoggingFilter</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
    </filter-mapping>
    <filter-mapping>
        <filter-name>AuthenticationFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <servlet>
        <servlet-name>LoginServlet</servlet-name>
        <servlet-class>LoginServlet</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>LogoutServlet</servlet-name>
        <servlet-class>LogoutServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>LoginServlet</servlet-name>
        <url-pattern>/LoginServlet</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>LogoutServlet</servlet-name>
        <url-pattern>/LogoutServlet</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>

</web-app>


Selesai, selanjutnya jalankan project tersebut. dan berikut tampilannya :

Mukti Blog - Tampilan Filter Login Servlet




ServletContext dan Listener


Tugas bahasa pemrograman java selanjutnya yaitu tentang ServletContext dan Listener. ServletContext adalah suatu interface yang digunakan untuk berkomunikasi dengan servlet container. Dalam sebuah aplikasi web hanya terdapat satu ServletContext saja, dan seluruh komponen aplikasi web dapat saling menggunakannya. Berikut ini adalah daftar method yang sering digunakan yang berada di interface ServletContext :

  • setAttribute (String name, Object object)
  • getAttribute(String  name)
  • getAttributeNames() 
  • removeAttribute(String name)
  • getServletContextName() 
  • getInitParameter(String  name)
  • getInitParameterNames() 
  • getServerInfo() 
  • getRealPath(String path) 
  • log(String  log)

Sedangkan ContextListener berfungsi seperti listener di java yaitu mendeteksi suatu event dan memberikan respons terhadap event tersebut. Di dalam servlet, jika kita mendeklarasikan sebuah listener pada objek tertentu, maka servlet-container akan menghasilkan event yang sesuai pada saat terjadi perubahan dalam objek tersebut. Berikut ini adalah beberapa interface listener bisa digunakan di servlet:

  • ServletContextListener
  • ServletContextAttributeListener
  • ServletRequestListener
  • ServletRequestAttributeListener
  • HttpSessionListener
  • HttpSessionAttributeListener
Berikut langsung saja buat contoh programnya.

Buatlah project web application baru dengan nama MyServletListener, dan buat file berikut :
  • HttpSessionAttributeListener.java
  • HttpSessionListenerClass.java
  • ServletContextAttributeListenerClass.java
  • ServletContextClass
  • ServletContextListenerClass
  • ServletRequestListenerClass
Kemudian edit file tersebut sebagai berikut :

HttpSessionAttributeListener.java

import javax.servlet.ServletContext;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionBindingEvent;

/*
 * 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 mukti
 */
@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()+", "
                    +"session atribut "+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()+", "
                    +"session atribut "+event.getName()+" dengan nilai : "+event.getValue()
                    +" sudah dihapus");
        }
    }

    @Override
    public void attributeReplaced(HttpSessionBindingEvent event) {
        ServletContext ctx=event.getSession().getServletContext();
        if(ctx!=null){
            ctx.log("Context :" + ctx.getServletContextName() + ", "
                    +"session atribut "+event.getName()+" dengan nilai : "+event.getValue()
                    +" sudah diubah");
        }
    }
}


HttpSessionListenerClass.java

import javax.servlet.ServletContext;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

/*
 * 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 mukti
 */
@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");
        }
    }
}


ServletContextAttributeListenerClass.java

import javax.servlet.ServletContext;
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
import javax.servlet.annotation.WebListener;

/*
 * 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 mukti
 */
@WebListener()
public class ServletContextAttributeListenerClass implements 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");
        }
    }
}


ServletContextClass.java

/*
 * 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.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 mukti
 */
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");
        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 ServletContextClass</title>");            
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet ServletContextClass at " + request.getContextPath() + "</h1>");
            out.println("</body>");
            out.println("</html>");
        }
    }

    // <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("Attribut " + attrName + " , nilainya = " + ctx.getAttribute(attrName));
    }
    out.print("getServletContextName() : " + ctx.getServletContextName());
    out.print("" + ctx.getInitParameter("bhs1"));
    Enumeration temp2 = ctx.getInitParameterNames();
    while(temp2.hasMoreElements())
    {
        String paramName = (String) temp2.nextElement();
        out.print("Attribut " + paramName + " , nilainya = " + ctx.getInitParameter(paramName));
    }
    out.print("getServerInfo() : " + ctx.getServerInfo());
    out.print("getRealPath() : " + ctx.getRealPath(""));
    ctx.log("Hello world");
    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>

}


ServletContextListenerClass.java

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

/*
 * 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 mukti
 */
@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");
    }
    }
}


ServletRequestListenerClass.java

import javax.servlet.ServletContext;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.annotation.WebListener;

/*
 * 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 mukti
 */
@WebListener()
public class ServletRequestListenerClass implements 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");
        }
    }
}


web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
    <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>


Selesai, test program dengan menjalankannya.




ServletContext dan Listener-DB


Buat project baru dengan nama ServletListener, seperti berikut :


Mukti Blog - ServletContext dan Listener-DB


Isikan file file tersebut menjadi sebagai berikut :


AppContextAttributeListener.java


import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;

/*
 * 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 mukti
 */
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() + "}");
    }

}



AppContextListener.java


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

/*
 * 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 mukti
 */
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.");
    }

}



DBConnectionManager.java


import java.sql.Connection;

/*
 * 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.
 */

/**
 *
 * @author mukti
 */
public class DBConnectionManager {
    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() {
    }

}



HttpSessionListener.java


import javax.servlet.http.HttpSessionEvent;

/*
 * 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.
 */

/**
 *
 * @author mukti
 */
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());

    }

}



MyServlet.java


/*
 * 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 mukti
 */
public class MyServlet 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");
        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>");
        }
    }

    // <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);
        ServletContext ctx = request.getServletContext();
        ctx.setAttribute("User", "Mukti");
        String user = (String) ctx.getAttribute("User");
        ctx.removeAttribute("User");

        HttpSession session = request.getSession();
        session.invalidate();

        PrintWriter out = response.getWriter();
        out.write("Hi " + user);
    }

    /**
     * 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>


}



ServletRequestListener.java


import javax.servlet.ServletRequest;
import javax.servlet.ServletRequestEvent;

/*
 * 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.
 */

/**
 *
 * @author mukti
 */
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());

    }

}



web.xml


<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
    <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 dan jalankan ketiga project tersebut.

Semoga bermanfaat

Salam,
Muhamad Mukti

Tidak ada komentar:

Posting Komentar

Untuk menyisipkan kode pendek, gunakan <i rel="code"> ... KODE ... </i>
Untuk menyisipkan kode panjang, gunakan <i rel="pre"> ... KODE ... </i>
Untuk menyisipkan gambar, gunakan <i rel="image"> ... URL GAMBAR ... </i>