程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> JSP詳細篇——Servlet過濾器和監聽器

JSP詳細篇——Servlet過濾器和監聽器

編輯:關於JSP

JSP詳細篇——Servlet過濾器和監聽器


過濾器和監聽器

Servlet過濾器是從Servlet2.3規范開始新增的功能,並在Servlet2.4規范中得到增強,監聽器可以監聽到Web應用程序啟動和關閉。創建監聽器需要實現響應的接口,並對其進行配置。

Servlet過濾器

1.什麼是過濾器

Servlet過濾器與Servlet十分相似,但是它具有攔截客戶端請求的功能。Servlet過濾器可以改變請求中的內容,來滿足實際開發中的需要。對於程序開發人員來說,過濾器實質上就是在Web應用服務器上的一個Web應用組件,用於攔截客戶端與目標資源之間的請求,並對這些請求進行過濾處理再發送給目標資源。

如果在一個Web應用中使用一個過濾器不能解決問題,可以部署多個過濾器對業務請求進行多次處理。這樣就形成一個過濾器鏈,在Web容器處理過濾器鏈時,將按照過濾器的先後順序對請求進行處理。

2.過濾器核心對象

過濾器對象放在javax.servlet包中,其名為Filter,它是一個接口,除了這個接口外,與過濾器相關的對象還有FilterConfig對象與FilterChain對象,這兩個對象也同樣是接口,為位於javax.servlet包中,分別為過濾器的配置對象和過濾器的傳遞工具。在實際開發過程中,定義過濾器只要直接或間接的實現Filter接口即可。而FilterChain和FilterConfig用於對過濾器的相關操作。

Filter接口

每一個過濾器都要直接或間接的實現Filter接口,在Filter接口中,定義了3個方法,分別為init(),doFilter(),destroy()。對應的方法說明如下:

方法聲明

說明

public void init(FilterConfig filterConfig) throws ServlerException

過濾器初始化,該方法在過濾器初始化時調用

public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException,ServletException

對請求進行過濾處理

public void destroy()

銷毀方法,以便釋放資源

FilterConfig接口

FilterConfig接口由Servlet容器進行實現,主要用於獲取過濾器中的配置信息。其方法說明如下:

方法聲明

說明

Public String getFilterName()

用於獲取過濾器的名字

Public ServletContext getServletContext()

獲取Servlet上下文

Public String getInitParameter(String name)

獲取過濾器的初始化參數的值

Public Enumeration getInitParameterNames()

獲取過濾器所有的初始化參數

FilterChain接口

FilterChain接口也是由Servlet容器實現的,在這個接口中只有一個方法,其方法聲明為:public void doFilter(ServletRuquest request,ServletResponse response) throws IOException,ServletException

該方法用於將過濾後的請求傳遞給下一個過濾器,如果此過濾器已經是過濾器中的最後一個過濾器,那麼,請求將傳送給目標資源。

過濾器的創建與配置

創建也該過濾器需要實現javax.servlet.Filter接口,同時實現接口的3個方法。

范例:

package com.zgy.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;

public class MyFilter 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

}

}

使用過濾器不一定要將請求傳遞到下一個過濾器,如果業務邏輯需要,也可以在過濾器處理完後,直接回應客戶端

創建名稱為MyServlet的過濾對象,其web.xml的配置如下:

MyFilter

com.zgy.filter.Myfilter

MyFilter

/MyFilter

標簽用於聲明過濾對象,在這個標簽中必須配置兩個元素,分別為過濾器名稱與過濾器完整類名,其中用於定義過濾器的名稱,用於指定過濾器的完整類名

標簽用於創建過濾器的映射,它的主要作用就是指定Web應用中,哪些URL應該用哪個過濾器進行處理。在標簽中,需要指定過濾的名稱和過濾的URL映射,其中,用於定義過濾器的名稱,用於指定過濾器應用的URL。

PS:標簽中的可以是自定義的名稱,標簽中的是指定的已定義的過濾器名稱,他需要與標簽中的一一對應



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved