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)
    Berfungsi untuk membuat suatu attribute dengan nama dan object tertentu.
  • getAttribute(String name)
    Berfungsi untuk mengembalikan nilai dari suatu attribute tertentu.
  • getAttributeNames()
    Berfungsi untuk mengembalikan nama2 semua attribute yang ada dalam ServletContext.
  • removeAttribute(String name)
    Berfungsi untuk mengahapus suatu attribute tertentu.
  • getServletContextName()
    Berfungsi untuk mengambil nilai yang berada di dalam elemen yang berada di file web.xml.
  • getInitParameter(String name)
    Berfungsi untuk mengambil nilai paramater yang sudah diinisaliasikan di file web.xml.
  • getInitParameterNames()
    Berfungsi untuk mengambil semua nama parameter yang ada.
  • getServerInfo()
    Berfungsi untuk mengambil nama dan versi dari servlet-container. Formatnya adalah servername/versionnumber.
  • getRealPath(String path)
    Berfungsi untuk mengambil real path dari suatu aplikasi web. Real path disini maksudnya letak direktori file2 aplikasi web tersebut.
  • log(String log)
    Berfungsi untuk menulis suatu pesan/log. Log yang kita buat ini bisa dilihat di Apache Tomcat xxx.Log (Jika menggunakan netbeans, terletak di bagian output).

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

Sekarang langsung saja buat sebuah new java web project menggunakan IDE kalian (saya menggunakan netbeans), lalu tambahkan code berikut di file index.jsp

<a href="getServletContext.do">view servlet context</a> 

Lalu buatlah sebuah class ServletContextClass

package com.maniakjava.servletcontext;

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;

public class ServletContextClass extends HttpServlet
{
    public void doGet(HttpServletRequest request, HttpServletResponse response)
	                throws ServletException, IOException
    {
        response.setContentType("text/html; charset=UTF-8");
        PrintWriter out = response.getWriter();

        ServletContext ctx=getServletContext();

        ctx.setAttribute("name", "maniak java");
        out.print(ctx.getAttribute("name"));

        Enumeration temp = ctx.getAttributeNames();
        while(temp.hasMoreElements())
        {
            String attrName = (String) temp.nextElement();
            out.print("<br>Atribut " + 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>Atribut " + paramName + " , nilainya = " + ctx.getInitParameter(paramName));
        }

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

        ctx.setAttribute("name", "maniak java.wordpress.com");
        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", "ManiakJava");
        session.setAttribute("userSession", "Mari belajar JAVA");
        session.setAttribute("userSession", null);
    }

}

Kemudian buat sebuah 6 buah class untuk mengimplementasikan setiap interface listener di atas. Sebenarnya buat 1 class juga bisa untuk mengimplementasikan keenam interface tersebut. Namun ada baiknya dipisah saja per interface, supaya lebih mudah dicerna.😀

package com.maniakjava.listener;

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

public class ServletContextListenerClass implements ServletContextListener
{

    public void contextInitialized(ServletContextEvent sce)
    {
        ServletContext ctx = sce.getServletContext();
        if(ctx!=null)
        {
            ctx.log("Context : " + ctx.getServletContextName() + " sudah diinisialisasi");
        }
    }

    public void contextDestroyed(ServletContextEvent sce)
    {
        ServletContext ctx = sce.getServletContext();
        if(ctx!=null)
        {
            ctx.log("Context : " + ctx.getServletContextName() + " sudah dihancurkan");
        }
    }

}
 

Ketika proses inisialisasi dari aplikasi kita telah dimulai, maka fungsi contextInitialized akan dijalankan. Sedangkan ketika servlet-context akan dishutdownmaka fungsi contextDestroyed akan dijalankan.

package com.maniakjava.listener;

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

public class ServletContextAttributeListenerClass implements ServletContextAttributeListener
{

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

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

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

}
 

Ketika ada suatu attribute baru yang ditambahkan ke dalam servlet-context maka fungsi attributeAdded akan dijalankan, ketika suatu attribute dihapus maka fungsi attributeRemoved dijalankan, dan ketika suatu attribute diubah nilainya maka fungsi attributeReplaced dijalankan.

package com.maniakjava.listener;

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

public class ServletRequestListenerClass implements ServletRequestListener
{

    public void requestDestroyed(ServletRequestEvent sre)
    {
        ServletContext ctx = sre.getServletContext();
        if(ctx!=null)
        {
            ctx.log("Context " + ctx.getServletContextName() + ", " +
                    "request " + sre.getServletRequest() + " sudah dihancurkan");
        }
    }

    public void requestInitialized(ServletRequestEvent sre)
    {
        ServletContext ctx = sre.getServletContext();
        if(ctx!=null)
        {
            ctx.log("Context " + ctx.getServletContextName() + ", " +
                    "request " + sre.getServletRequest() + " sudah diinisialisasi");
        }
    }

}
 
package com.maniakjava.listener;

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

public class HttpSessionListenerClass implements HttpSessionListener
{

    public void sessionCreated(HttpSessionEvent se)
    {
        ServletContext ctx = se.getSession().getServletContext();
        if(ctx!=null)
        {
            ctx.log("Context " + ctx.getServletContextName() + ", " +
                    "session " + se.getSession().getId() + " sudah dibuat");
        }
    }

    public void sessionDestroyed(HttpSessionEvent se)
    {
        ServletContext ctx = se.getSession().getServletContext();
        if(ctx!=null)
        {
            ctx.log("Context " + ctx.getServletContextName() + ", " +
                    "session " + se.getSession().getId() + " sudah dihancurkan");
        }
    }

}
 
package com.maniakjava.listener;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;

public class HttpSessionAttributeListenerClass implements HttpSessionAttributeListener
{

    public void attributeAdded(HttpSessionBindingEvent event)
    {
        ServletContext ctx = event.getSession().getServletContext();
        if(ctx!=null)
        {
            ctx.log("Context " + ctx.getServletContextName() + ", " +
                    "session attribute " + event.getName() + " dengan nilai : " + event.getValue() +
                    " sudah ditambahkan");
        }
    }

    public void attributeRemoved(HttpSessionBindingEvent event)
    {
        ServletContext ctx = event.getSession().getServletContext();
        if(ctx!=null)
        {
            ctx.log("Context " + ctx.getServletContextName() + ", " +
                    "session attribute " + event.getName() + " dengan nilai : " + event.getValue() +
                    " sudah dihapus");
        }
    }

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

}
 

Sekarang daftarkan class ServletContextClass sebagai sebuah servlet dan keenam class di atas sebagai sebuah listener. Konfigurasinya kita lakukan di file web.xml, seperti ini codenya

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <display-name>Fungsi ServletContext dan Listener</display-name>

    <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>com.maniakjava.listener.ServletContextListenerClass</listener-class>
    </listener>
    <listener>
        <description>ServletContextAttributeListener</description>
        <listener-class>com.maniakjava.listener.ServletContextAttributeListenerClass</listener-class>
    </listener>
    <listener>
        <description>ServletRequestListener</description>
        <listener-class>com.maniakjava.listener.ServletRequestListenerClass</listener-class>
    </listener>
    <listener>
        <description>ServletRequestAttributeListener</description>
        <listener-class>com.maniakjava.listener.ServletRequestAttributeListenerClass</listener-class>
    </listener>
    <listener>
        <description>HttpSessionListener</description>
        <listener-class>com.maniakjava.listener.HttpSessionListenerClass</listener-class>
    </listener>
    <listener>
        <description>HttpSessionAttributeListener</description>
        <listener-class>com.maniakjava.listener.HttpSessionAttributeListenerClass</listener-class>
    </listener>

    <servlet>
        <servlet-name>ServletContext</servlet-name>
        <servlet-class>com.maniakjava.servletcontext.ServletContextClass</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ServletContext</servlet-name>
        <url-pattern>/getServletContext.do</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

</web-app>
 

Jika aplikasi di atas dijalankan, tampilan di browser akan seperti ini Dan untuk isi log dari setiap listener di atas adalah seperti ini

Sep 2, 2011 8:44:04 PM org.apache.catalina.core.ApplicationContext log
INFO: Context Fungsi ServletContext dan Listener, request org.apache.catalina.connector.RequestFacade@1dfb148 sudah diinisialisasi
Sep 2, 2011 8:44:04 PM org.apache.catalina.core.ApplicationContext log
INFO: Context Fungsi ServletContext dan Listener, request attribute netbeans.monitor.request dengan nilai : uri: /Fungsi_ServletContext_dan_Listener_di_Java/getServletContext.do
method: GET
QueryString: null
Parameters:
Headers:
Name: host Value: localhost:8084
Name: user-agent Value: Mozilla/5.0 (Windows NT 6.0; rv:5.0) Gecko/20100101 Firefox/5.0
Name: accept Value: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Name: accept-language Value: en-us,en;q=0.5
Name: accept-encoding Value: gzip, deflate
Name: accept-charset Value: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Name: connection Value: keep-alive
Name: cookie Value: JSESSIONID=843687351E54AA01B9178671A7194D34; CUSTOMER_UUID=312bc1aa-53fd-479b-97e0-7a0048b406d2
sudah ditambahkan
Sep 2, 2011 8:44:04 PM org.apache.catalina.core.ApplicationContext log
INFO: Context Fungsi ServletContext dan Listener, request attribute netbeans.monitor.monData dengan nilai : [MonitorData] sudah ditambahkan
Sep 2, 2011 8:44:04 PM org.apache.catalina.core.ApplicationContext log
INFO: Context Fungsi ServletContext dan Listener, request attribute netbeans.monitor.response dengan nilai : org.netbeans.modules.web.monitor.server.MonitorResponseWrapper@fa8ba9 sudah ditambahkan
Sep 2, 2011 8:44:04 PM org.apache.catalina.core.ApplicationContext log
INFO: Context Fungsi ServletContext dan Listener, request attribute netbeans.monitor.filter dengan nilai : MonitorFilter(ApplicationFilterConfig[name=HTTPMonitorFilter, filterClass=org.netbeans.modules.web.monitor.server.MonitorFilter]) sudah ditambahkan
Sep 2, 2011 8:44:04 PM org.apache.catalina.core.ApplicationContext log
INFO: Context Fungsi ServletContext dan Listener, attribute name dengan nilai : maniak java sudah ditambahkan
Sep 2, 2011 8:44:04 PM org.apache.catalina.core.ApplicationContext log
INFO: Hello world
Sep 2, 2011 8:44:04 PM org.apache.catalina.core.ApplicationContext log
INFO: Context Fungsi ServletContext dan Listener, attribute name dengan nilai : maniak java sudah diubah
Sep 2, 2011 8:44:04 PM org.apache.catalina.core.ApplicationContext log
INFO: Context Fungsi ServletContext dan Listener, attribute name dengan nilai : maniak java.wordpress.com sudah dihapus
Sep 2, 2011 8:44:04 PM org.apache.catalina.core.ApplicationContext log
INFO: Context Fungsi ServletContext dan Listener, request attribute word dengan nilai : never say give up in this world sudah ditambahkan
Sep 2, 2011 8:44:04 PM org.apache.catalina.core.ApplicationContext log
INFO: Context Fungsi ServletContext dan Listener, request attribute word dengan nilai : never say give up in this world sudah diubah
Sep 2, 2011 8:44:04 PM org.apache.catalina.core.ApplicationContext log
INFO: Context Fungsi ServletContext dan Listener, request attribute word dengan nilai : do your best and let God do the rest sudah dihapus
Sep 2, 2011 8:44:04 PM org.apache.catalina.core.ApplicationContext log
INFO: Context Fungsi ServletContext dan Listener, session attribute userSession dengan nilai : ManiakJava sudah ditambahkan
Sep 2, 2011 8:44:04 PM org.apache.catalina.core.ApplicationContext log
INFO: Context Fungsi ServletContext dan Listener, session attribute userSession dengan nilai : ManiakJava sudah diubah
Sep 2, 2011 8:44:04 PM org.apache.catalina.core.ApplicationContext log
INFO: Context Fungsi ServletContext dan Listener, session attribute userSession dengan nilai : Mari belajar JAVA sudah dihapus
Sep 2, 2011 8:44:04 PM org.apache.catalina.core.ApplicationContext log
INFO: Context Fungsi ServletContext dan Listener, request attribute netbeans.monitor.request dengan nilai : uri: /Fungsi_ServletContext_dan_Listener_di_Java/getServletContext.do
method: GET
QueryString: null
Parameters:
Headers:
Name: host Value: localhost:8084
Name: user-agent Value: Mozilla/5.0 (Windows NT 6.0; rv:5.0) Gecko/20100101 Firefox/5.0
Name: accept Value: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Name: accept-language Value: en-us,en;q=0.5
Name: accept-encoding Value: gzip, deflate
Name: accept-charset Value: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Name: connection Value: keep-alive
Name: cookie Value: JSESSIONID=843687351E54AA01B9178671A7194D34; CUSTOMER_UUID=312bc1aa-53fd-479b-97e0-7a0048b406d2
sudah dihapus
Sep 2, 2011 8:44:04 PM org.apache.catalina.core.ApplicationContext log
INFO: Context Fungsi ServletContext dan Listener, request attribute netbeans.monitor.response dengan nilai : org.netbeans.modules.web.monitor.server.MonitorResponseWrapper@fa8ba9 sudah dihapus
Sep 2, 2011 8:44:04 PM org.apache.catalina.core.ApplicationContext log
INFO: Context Fungsi ServletContext dan Listener, request attribute netbeans.monitor.filter dengan nilai : MonitorFilter(ApplicationFilterConfig[name=HTTPMonitorFilter, filterClass=org.netbeans.modules.web.monitor.server.MonitorFilter]) sudah dihapus
Sep 2, 2011 8:44:04 PM org.apache.catalina.core.ApplicationContext log
INFO: Context Fungsi ServletContext dan Listener, request attribute netbeans.monitor.monData dengan nilai : [MonitorData] sudah dihapus
Sep 2, 2011 8:44:04 PM org.apache.catalina.core.ApplicationContext log
INFO: Context Fungsi ServletContext dan Listener, request org.apache.catalina.connector.RequestFacade@1dfb148 sudah dihancurkan

Sebagai informasi, selain terdapat pada Apache Tomcat xxx.log (bundled dari netbeans), semua log tersebut juga akan ditulis ke dalam file yang terletak di C:\Users\xxx\.netbeans\6.8\apache-tomcat-6.0.20_base\logs (karena saya menggunakan bundled tomcat dari netbeans). Nama filenya memiliki format namaserver.tanggal.log.

Dalam prakteknya, listener ServletContextListener sering digunakan untuk melakukan proses connect dan disconnect dari database server. Sedangkan listener HttpSessionListener sering digunakan untuk mencatat ativitas user di database. Misalnya kapan user login dan kapan user logout dari aplikasi kita.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s