Servlet、Filter和Listener

1、Servlet、Filter和Listener的功能html

Servlet的功能:Servlet是一個運行在web服務器上的小應用程序,用於接收來自客戶端的請求,進行處理及返回響應。(Servlet自己實際上已經能夠完成Filter和Listener的功能,可是把這兩個獨立出來造成組件,其實是實現了功能複用和可插拔式的架構java

Filter的功能:Filter,即過濾器,是一種在Servlet獲取請求前、應答後進行功能處理的技術。(裝飾器模式web

Listener的功能:Listener用於監聽對象的變化而進行相應的功能處理。在本文中,Listener是Servlet的監聽器,Servlet的操做事件和生命狀態變化會觸發相應的監聽器。(觀察者模式服務器

2、Servlet、Filter和Listener的生命週期對比session

(一)、這三個組件的生命週期皆是由web容器控制架構

階段 Servlet Filter Listener
初始化 void init(ServletConfig config) void init(FilterConfig)  
處理 void service(ServletRequest req, ServletResponse res) void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)  
銷燬 void destroy() void destroy()  

(二)、相應類和配置的寫法,能夠發現Servlet和Filter很類似。app

這兩篇文章寫得不錯《web.xml 中的listener、 filter、servlet 加載順序及其詳解》《Java中Filter、Servlet、Listener的學習》。eclipse

這裏的主要就是注意一下他們都實現了什麼樣的方法。本文中的監聽器只是對對象生命週期變化進行監控,另外還有的監聽器是對對象操做的事件進行監控,如:HttpSessionAttributeListener。ide

package com.kwan.web.three;

import java.io.IOException;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;

public class DemoServlet extends HttpServlet {

    @Override
    public void service(ServletRequest arg0, ServletResponse arg1)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        super.service(arg0, arg1);
    }

    @Override
    public void destroy() {
        // TODO Auto-generated method stub
        super.destroy();
    }

    @Override
    public void init() throws ServletException {
        // TODO Auto-generated method stub
        super.init();
    }

    @Override
    public void init(ServletConfig config) throws ServletException {
        // TODO Auto-generated method stub
        super.init(config);
    }
    
}


package com.kwan.web.three;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class DemoFilter implements Filter {

    @Override
    public void destroy() {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void doFilter(ServletRequest arg0, ServletResponse arg1,
            FilterChain arg2) throws IOException, ServletException {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {
        // TODO Auto-generated method stub
        
    }

}


package com.kwan.web.three;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

//listen the lifecycle of object HttpSession, ServletContext, ServletRequest
public class DemoListener implements HttpSessionListener, ServletContextListener, ServletRequestListener {

    @Override
    public void requestDestroyed(ServletRequestEvent arg0) {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void requestInitialized(ServletRequestEvent arg0) {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void contextInitialized(ServletContextEvent arg0) {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void sessionCreated(HttpSessionEvent arg0) {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent arg0) {
        // TODO Auto-generated method stub
        
    }
}
<?xml version="1.0" encoding="UTF-8"?>

<web-app 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_3_0.xsd"
  version="3.0"
  metadata-complete="true">
  
  <servlet>
      <servlet-name>ServletDemo</servlet-name>
      <servlet-class>com.kwan.web.three.DemoServlet</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>ServletDemo</servlet-name>
      <url-pattern>/servlet</url-pattern>
  </servlet-mapping>
  
  <filter>
      <filter-name>FilterDemo</filter-name>
      <filter-class>com.kwan.web.three.DemoFilter</filter-class>
  </filter>
  <filter-mapping>
      <filter-name>FilterDemo</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>
  
  <listener>
      <listener-class>com.kwan.web.three.DemoListener</listener-class>
  </listener>

</web-app>

3、裝飾器模式和觀察者模式(之後有時間再補充)學習

相關文章
相關標籤/搜索