1. 程式人生 > >servlet 過濾器與監聽器

servlet 過濾器與監聽器

1、過濾器

過濾器物件放置在javax.servlet包中,名稱為Filter,是一個介面。與過濾器相關的物件還有FilterConfig物件與FilterChain物件,一樣為介面。

過濾器的建立與配置:

  1. 登陸過濾器例子
    java程式碼
package com.topinfo.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import
javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import com.topinfo.component.common.bean.UserBean; /** * *@Description:TODO *@Author:pand *@Since:2016年7月5日下午2:35:45 */
public class LoginFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException{ System.out.println ("init"); } @Override public void doFilter(ServletRequest servletRequest,ServletResponse servletResponse,FilterChain chain) throws
IOException,ServletException{ System.out.println ("doFilter"); HttpServletRequest request = (HttpServletRequest) servletRequest; HttpServletResponse response = (HttpServletResponse) servletResponse; HttpSession session = request.getSession (); UserBean user = (UserBean)session.getAttribute ("user"); String[] uri = request.getRequestURI ().split ("/"); if("login.do".equals (uri[uri.length - 1])){ chain.doFilter(request, response); }else{ if(null != user) { chain.doFilter(request, response); }else{ response.sendRedirect ("index.html"); } } } @Override public void destroy(){ System.out.println ("destroy"); } }

web.xml配置

    <filter-name>login</filter-name>
    <filter-class>com.topinfo.filter.LoginFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>login</filter-name>
    <url-pattern>*.do</url-pattern>
  </filter-mapping>
  1. 計數攔截器
    java程式碼
package com.topinfo.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;

/**
 *@Description:TODO
 *@Author:pand
 *@Since:2016年7月5日下午2:34:04
 */
public class CountFilter implements Filter {

    private int count;

    @Override
    public void init(FilterConfig filterConfig) throws ServletException{
        String param = filterConfig.getInitParameter ("count");
        count = Integer.valueOf (param);

    }

    @Override
    public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException,ServletException{
        count++;
        HttpServletRequest req = (HttpServletRequest)request;
        ServletContext context = req.getSession ().getServletContext ();
        context.setAttribute ("count", count);
        chain.doFilter (request, response);

    }

    @Override
    public void destroy(){

    }
}

web.xml配置:

      <filter-name>CountFilter</filter-name>
      <filter-class>com.topinfo.filter.CountFilter</filter-class>
      <init-param>
          <param-name>count</param-name>
          <param-value>5000</param-value>
      </init-param>
  </filter>
  <filter-mapping>
      <filter-name>CountFilter</filter-name>
      <url-pattern>/login.do</url-pattern>
  </filter-mapping>

2、監聽器

監聽器的作用是監聽web容器的有效期事件,由容器管理。有八個listener介面。

  • ServletContextListener

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

/**
 * 
 *@Description:監聽上下文servletContext物件的建立,刪除。
 *@Author:pand
 *@Since:2017年7月5日下午3:54:44
 */
public class ServletContextDemoListener implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent sce){
        // 通知監聽物件,應用程式已經被載入

    }

    @Override
    public void contextDestroyed(ServletContextEvent sce){
     // 通知監聽物件,應用程式已經被載出,即關閉

    }

}
  • ServletContextAttributeListener

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

/**
 * 
 *@Description:監聽ServletContext屬性的增加,刪除和修改
 *@Author:pand
 *@Since:2017年7月5日下午3:58:34
 */
public class ServletAttributeDemoListener implements ServletContextAttributeListener {

    @Override
    public void attributeAdded(ServletContextAttributeEvent scab){
        // 當有物件加入application時,通知正在監聽的物件

    }

    @Override
    public void attributeRemoved(ServletContextAttributeEvent scab){
        // 當有物件移除application時,通知正在監聽的物件

    }

    @Override
    public void attributeReplaced(ServletContextAttributeEvent scab){
        // 當有物件取代另一個物件時,通知正在監聽的物件

    }

}
  • ServletRequestListener
package com.topinfo.listener;

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

/**
 * 
 *@Description:servlet請求監聽,可以獲取客戶端請求,對請求進行統一處理,可以與ServletRequestAttributeListener儀器使用
 *@Author:pand
 *@Since:2017年7月5日下午3:11:39
 */
public class RequestListener implements ServletRequestListener {

    @Override
    public void requestDestroyed(ServletRequestEvent sre){
        // 通知正在監聽的物件,servletRequest已經唄載入以及初始化

    }

    @Override
    public void requestInitialized(ServletRequestEvent sre){
        // 通知正在監聽的物件,servletRequest已經載出,即關閉

    }

}
  • ServletRequestAttributeListener
package com.topinfo.listener;

import javax.servlet.ServletRequestAttributeEvent;
import javax.servlet.ServletRequestAttributeListener;


/**
 * 
 *@Description:servlet請求監聽,可以獲取客戶端請求,對請求進行統一處理
 *@Author:pand
 *@Since:2017年7月5日下午3:10:57
 */

public class RequestAttributeListener implements ServletRequestAttributeListener {

    @Override
    public void attributeAdded(ServletRequestAttributeEvent srae){
        // 當有物件加入request範圍時,通知監聽物件

    }

    @Override
    public void attributeRemoved(ServletRequestAttributeEvent srae){
        // 當有物件移除request範圍時,通知監聽物件

    }

    @Override
    public void attributeReplaced(ServletRequestAttributeEvent srae){
        // 當有物件取代另一個物件時,通知監聽物件

    }

}
  • HttpSessionListener
package com.topinfo.listener;

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

/**
 * 
 *@Description:監聽HTTP會話建立,銷燬
 *@Author:pand
 *@Since:2016年7月5日下午2:39:17
 */
public class SessionListener implements HttpSessionListener {

    @Override
    public void sessionCreated(HttpSessionEvent se){
        System.out.println ("session 建立");
        //根據自己的業務需求寫
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se){
        System.out.println ("session 銷燬");
        //根據自己的業務需求寫
    }

}
  • HttpSessionActivationListener
package com.topinfo.listener;

import javax.servlet.http.HttpSessionActivationListener;
import javax.servlet.http.HttpSessionEvent;

/**
 * 
 *@Description:實現HTTP會話active和passivate
 *@Author:pand
 *@Since:2017年7月5日下午3:13:08
 */
public class SessionActivationListener implements HttpSessionActivationListener {

    @Override
    public void sessionWillPassivate(HttpSessionEvent se){
        // TODO Auto-generated method stub

    }

    @Override
    public void sessionDidActivate(HttpSessionEvent se){
        // TODO Auto-generated method stub

    }

}
  • HttpSessionBindingListener
package com.topinfo.listener;

import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;

/**
 * 
 *@Description:實現監聽HTTP會話物件的繫結,唯一一個不需要在web.xml中設定的listener
 *@Author:pand
 *@Since:2017年7月5日下午3:05:29
 */
public class SessionBingingListener implements HttpSessionBindingListener{

    @Override
    public void valueBound(HttpSessionBindingEvent event){
        // 當有物件加入session的範圍時會自動呼叫

    }

    @Override
    public void valueUnbound(HttpSessionBindingEvent event){
        // 當有物件移除session的範圍時會自動呼叫

    }

}
  • HttpSessionAttributeListener
package com.topinfo.listener;

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

/**
 * 
 *@Description:實現監聽HTTP會話中屬性的設定請求
 *@Author:pand
 *@Since:2017年7月5日下午3:06:00
 */
public class SessionAttributeListener implements HttpSessionAttributeListener {

    @Override
    public void attributeAdded(HttpSessionBindingEvent se){
        // 當有物件加入session的範圍時,通知正在監聽的物件

    }

    @Override
    public void attributeRemoved(HttpSessionBindingEvent se){
        // 當有物件移除session的範圍時,通知正在監聽的物件
        se.getName ();
        se.getSession ();
        se.getValue ();
    }

    @Override
    public void attributeReplaced(HttpSessionBindingEvent se){
        // 當有物件去帶領一個物件時,通知正在監聽的物件

    }

}
  • 監聽器除了HttpSessionBindingListener不要要在web.xml中配置監聽,其他都需要配置,配置方式:
  <listener>
    <listener-class>com.topinfo.listener.SessionListener</listener-class>
  </listener>
  • session監聽器,可以通過
  <session-config>
    <session-timeout>30</session-timeout>
  </session-config>

設定session超時時間,預設30分鐘。為了測試方便可以改為1分鐘超時。

3、說明

工作中用到session監聽器,順便總結一下,以後再有用到方便查詢。僅供學習參考。

相關推薦

servlet 過濾器監聽器

1、過濾器 過濾器物件放置在javax.servlet包中,名稱為Filter,是一個介面。與過濾器相關的物件還有FilterConfig物件與FilterChain物件,一樣為介面。 過濾器的建立與配置: 登陸過濾器例子 java程式碼 pa

Servlet中的過濾器監聽器

-過濾器? 1.Servlet2.3規範中定義的一種小型的,可插入的Web元件。 2.用來攔截Servlet容器的請求和響應過程,以便檢視,提取或以某種方式操作正在客戶機和伺服器之間交換的資料。 3.通常是一些封裝一些功能的Web元件,這些功能很重要,但對於處理客戶端請求或傳送響應來說不受決

過濾器監聽器知識總結

mapping rem setattr 處理 event 節點 create 增加 多個 過濾器 什麽是過濾器? 過濾器是servlet2.3規範中定義的一種小型的、可插入的Web組件。用來攔截Servlet容器的請求和響應過程。以便查看、提取或以某種方式操作正在客戶機和服

JAVA Web基礎4-過濾器監聽器

javax 數組 patch param object servle on() .get 監聽器 一.過濾器1.定義:過濾器是指定義在服務器端的一段程序, 可以截獲客戶端發來的請求, 並根據一定規則進行過濾和攔截。2.過濾器的生命周期: 1.服務器啟動:先通過

Java Servlet 過濾器 springmvc 攔截器的區別?

結果 dap ber 如果 exce 流程 @override clas 出錯 前言:在工作中,遇到需要記錄日誌的情況,不知道該選擇過濾器還是攔截器,故總結了一下。 servlet 過濾器 定義   java過濾器能夠對目標資源的請求和響應進行截取。過濾器的工作方式分為

java中攔截器、過濾器監聽器的區別

一、攔截器         interceptor:java裡的攔截器是動態攔截Action呼叫的物件。它提供了一種機制可以使開發者可以定義在一個action執行的前後執行的程式碼,也可以在一個action執行前阻止其執行,同時也提供了一種可以提取action中可重用部分的

從零學springboot—— servlet,過濾器監聽器,攔截器

自定義servlet @WebServlet(urlPatterns = "/myServlet/*") public class MyServlet extends HttpServlet { @Override protected void doGet(Http

servlet過濾器監聽器、struts2攔截器的區別

1.過濾器 Servlet中的過濾器Filter是實現了javax.servlet.Filter介面的伺服器端程式,主要的用途是過濾字元編碼、做一些業務邏輯判斷等。其工作原理是,只要你在web.xml檔案配置好要攔截的客戶端請求,它都會幫你攔截到請求,此時你就可以對請求

servlet過濾器監聽器

Filter的配置和Servlet相似。 <filter>  <filter-name>SessionFilter</filter-name>  <filter-class>alan.filter.SessionFilter</filter-class&g

Servlet過濾器監聽器攔截器

概念 Servlet   Servlet是一種運行於伺服器端的Java應用程式,具有獨立於平臺和協議的特性,並且可以動態的生成Web頁面,它工作在客戶端請求與伺服器響應的中間層,具有跨平臺與可移植性強等優點。 Filter   Filter是一個

Servlet過濾器監聽器對象的實例化和銷毀的優先級

servlet優先級實例化時:監聽器-->過濾器-->Servlet銷毀時:過濾器-->Servlet-->監聽器Servlet實例化的順序:若設置了loadOnStartUp屬性值≥0,則在Wed容器開啟的時候就實例化,否則訪問時實例化;如果Servlet是在Web.xml文件中配置

Java基礎——Servlet(七)過濾器&監聽器 相關

計數器 cti inf width 正在 tab implement eve login 一、過濾器簡介 Filter 位於客戶端和請求資源之間,請求的資源可以是 Servlet Jsp html (img,javascript,css)等。用於攔截瀏覽器發給服務器的請求(

總結過濾器監聽器servlet的異同點,已經執行順序。

dex code 客戶 blog -name 執行順序 銷毀 pat 固定 1.過濾器   Servlet中的過濾器Filter是實現了javax.servlet.Filter接口的服務器端程序,主要的用途是過濾字符編碼、做一些業務邏輯判斷等。其工作原理是,只要你在web.

Servlet初始配置 監聽器過濾器

https cal 認證 缺省 Coding wrapper oot comm 是否 ServletContext:application範圍內的參數 此所設定的參 來源: http://note.sdo.com/my 數,在JSP網頁中可以使用下列方法來取得:

Filter過濾器listener監聽器的簡單使用

Filter過濾器是一種對客戶端訪問的過濾技術,簡單來說就是我們瀏覽器訪問伺服器檔案時,如果設定了特定的過濾配置,則會先經過過濾器,然後再將請求放給伺服器去執行,最常見的就是我們過濾使用者是否登入的使用。 listener監聽器,見名得意,他就是起到一個監聽的作用,主要是用來監聽web應用的建立

context-param、init-param、監聽器過濾器攔截器

1.context-param 相當於全域性變數,針對容器中所有的servlet都有效,均可獲取該引數,與監聽器無任何必然關係,緊設定的引數可在監聽器中監控使用而已; 2.init-param相當於區域性變數,只針對在xml中宣告的servlet中有效; 3.監聽器Lis

Servlet過濾器監聽器

過濾器 作用:對伺服器資源進行統一處理; 如:設定編碼格式,session管理、許可權管理、和諧詞彙 使用: 建立一個實現了Filter介面 的普通java類 覆寫Filter介面的方法       init方法:伺服器啟

JavaWeb-Servlet技術的監聽器-解析例項-網站線上使用者資訊網頁點選量

轉載請註明出處: http://blog.csdn.net/qq_26525215 本文源自 在Web專案中,我們對下面這幾個監聽器必須熟練的使用,它們的作用真的很大。熟練的使用後,可以使我們少繞彎路,少寫很多程式碼、 事件源

Servlet過濾器監聽器、攔截器的區別

下面從幾個方面闡述一下題目中四個概念的區別與聯絡:         1、概念         2、生命週期         3、職責         4、執行過程         一、概念:         1、servlet:servlet是一種執行伺服器端的java應用程

filter過濾器servlet的異同

簡述servlet與filter的異同點相同點 :都需要建立類去繼承介面,都有init初始化方法,都需要通過配置WEB-INxmlF/web.xml不同點:1).  filter在servlet容器初