编写 Servlet 2.3 Filter
生活随笔
收集整理的這篇文章主要介紹了
编写 Servlet 2.3 Filter
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Servlets Filter 是Servlet 2.3 規范中新增加的,它是截取用戶從客戶端提交的請求,在還沒有到達需要訪問的資源時運行的一個類。它操縱來自客戶端的請求,在資源還沒有初發送到客戶端前截取響應,并處理這些還沒有發送到客戶端的響應。
Filters 有許多的應用場合。Servlet 2.3 規范建議如下的地方可以應用Filter:
authentication filters
logging and auditing filters
image conversion filters
data compression filters
encryption filters
tokenizing filters
filters that trigger resource access events
XSL/T filters that transform XML content
MIME-type chain filters
編寫一個簡單的 Filter
學習怎么樣寫Filter的第一步,是看一個非常簡單的實例。Filter 是一個實現了 javax.servlet.Filter 接口的類。javax.servlet.Filter 接口定義了三個方法:
public void doFilter (ServletRequest request, ServletResponse response, FilterChain chain)
public FilterConfig getFilterConfig()
public void setFilterConfig (FilterConfig filterConfig)
創建 javax.servlet.FilterConfig 對象,并完成初始化后傳遞給 Filter ,是容器的職責。javax.servlet.FilterConfig 可以被用來:
提取 Filter name(在配置描述符中定義的)
提取初始化變量(在配置描述符中定義的)
得到 ServletContext 對象的引用
setFilterConfig() 方法可以被用來設置一個對象為某個 Filter 的屬性。doFilter() 方法實際上真正要進行 filter 動作的地方。在這里,你可以解析用戶的請求,記錄統計到文件,處理返回客戶端的響應,等等。列表1是一人非常簡單的例子,當它 filter 客戶端請求時,打印一個消息到控制臺;然后當它 filter 一個返回客戶端的響應時再打印一個消息到控制臺。圖1是一個示例這個簡單的 Filter 怎樣處理請求-響應模型的圖表。
列表1: 一個非常簡單的 Filter (SimpleFilter.java)
package com.filters;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.IOException;
import javax.servlet.ServletException;
public class SimpleFilter implements Filter
{
? private FilterConfig filterConfig;
? public void doFilter (ServletRequest request,
? ? ? ? ? ? ?ServletResponse response,
? ? ? ? ? ? ?FilterChain chain)
? {
? ? try
? ? {
? ? ? System.out.print ("Within Simple Filter ... ");
? ? ? System.out.println ("Filtering the Request ...");
? ? ? chain.doFilter (request, response);
? ? ? System.out.print ("Within Simple Filter ... ");
? ? ? System.out.println ("Filtering the Response ...");
? ? } catch (IOException io) {
? ? ? System.out.println ("IOException raised in SimpleFilter");
? ? } catch (ServletException se) {
? ? ? System.out.println ("ServletException raised in SimpleFilter");
? ? }
? }
? public FilterConfig getFilterConfig()
? {
? ? return this.filterConfig;
? }
? public void setFilterConfig (FilterConfig filterConfig)
? {
? ? this.filterConfig = filterConfig;
? }
}
以上的代碼中可以看出,這個 Filter 是一個名為 SimpleFilter.java 類,它實現了 javax.servlet.Filter 接口,并提供了這個接口中三個方法的實現。
注 意,doFilter 可以分為二個部分:filter request 與 filter response 。這二部分由 javax.servlet.FilterChain 對象調用 chain 中的下一個對象來隔開,這下一個對象可能是一個 Servlet 或者另外的一個 Filter 。
現在,我們寫好了這樣的一個簡單的 Filter ,需要把它配置到一個容器中,看看運行結果。
Apache Jatarka Tomcat,4.0 以上版本都支持 Servlet 2.3 規范。本文所有的實例都在此環境下測試通過。
Filters 定義在web應用描述符中,即 web.xml 文件。Filters 先被定義,然后映射(map)到 Servlet 或者 URL ,這與 Servlet 的定義與映射是完全一樣的。列表2是 web.xml 文件中,配置 SimpleFilter.java ,并映射(map)到一個 Servlet 。
Listing 2: web.xml
<?xml version = "1.0" encoding = "ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/j2ee/dtds/web-app_2_3.dtd">
<web-app>
? <!-- Define the filters within the Web Application -->
? <filter>
? ? <filter-name>
? ? ? Simple Filter Example
? ? </filter-name>
? ? <filter-class>
? ? ? com.filters.SimpleFilter
? ? </filter-class>
? </filter>
? <!-- Map the filter to a Servlet or URL -->
? <filter-mapping>
? ? <filter-name>
? ? ? Simple Filter Example
? ? </filter-name>
? ? <url-pattern>
? ? ? /simple
? ? </url-pattern>
? </filter-mapping>
? <!-- Define the Servlets within the Web Application -->
? <servlet>
? ? <servlet-name>
? ? ? Simple Servlet
? ? </servlet-name>
? ? <servlet-class>
? ? ? com.servlets.SimpleServlet
? ? </servlet-class>
? </servlet>
? <!-- Define Servlet mappings to urls -->
? <servlet-mapping>
? ? <servlet-name>
? ? ? Simple Servlet
? ? </servlet-name>
? ? <url-pattern>
? ? ? /simple
? ? </url-pattern>
? </servlet-mapping>
</web-app>
很可惜后面的東東網上都沒有了,現在這些網站對自己的內容都太不負責任了!不過索性大概開發流程是說出來了,具體工作原理就找找別的資料吧
Filters 有許多的應用場合。Servlet 2.3 規范建議如下的地方可以應用Filter:
authentication filters
logging and auditing filters
image conversion filters
data compression filters
encryption filters
tokenizing filters
filters that trigger resource access events
XSL/T filters that transform XML content
MIME-type chain filters
編寫一個簡單的 Filter
學習怎么樣寫Filter的第一步,是看一個非常簡單的實例。Filter 是一個實現了 javax.servlet.Filter 接口的類。javax.servlet.Filter 接口定義了三個方法:
public void doFilter (ServletRequest request, ServletResponse response, FilterChain chain)
public FilterConfig getFilterConfig()
public void setFilterConfig (FilterConfig filterConfig)
創建 javax.servlet.FilterConfig 對象,并完成初始化后傳遞給 Filter ,是容器的職責。javax.servlet.FilterConfig 可以被用來:
提取 Filter name(在配置描述符中定義的)
提取初始化變量(在配置描述符中定義的)
得到 ServletContext 對象的引用
setFilterConfig() 方法可以被用來設置一個對象為某個 Filter 的屬性。doFilter() 方法實際上真正要進行 filter 動作的地方。在這里,你可以解析用戶的請求,記錄統計到文件,處理返回客戶端的響應,等等。列表1是一人非常簡單的例子,當它 filter 客戶端請求時,打印一個消息到控制臺;然后當它 filter 一個返回客戶端的響應時再打印一個消息到控制臺。圖1是一個示例這個簡單的 Filter 怎樣處理請求-響應模型的圖表。
列表1: 一個非常簡單的 Filter (SimpleFilter.java)
package com.filters;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.IOException;
import javax.servlet.ServletException;
public class SimpleFilter implements Filter
{
? private FilterConfig filterConfig;
? public void doFilter (ServletRequest request,
? ? ? ? ? ? ?ServletResponse response,
? ? ? ? ? ? ?FilterChain chain)
? {
? ? try
? ? {
? ? ? System.out.print ("Within Simple Filter ... ");
? ? ? System.out.println ("Filtering the Request ...");
? ? ? chain.doFilter (request, response);
? ? ? System.out.print ("Within Simple Filter ... ");
? ? ? System.out.println ("Filtering the Response ...");
? ? } catch (IOException io) {
? ? ? System.out.println ("IOException raised in SimpleFilter");
? ? } catch (ServletException se) {
? ? ? System.out.println ("ServletException raised in SimpleFilter");
? ? }
? }
? public FilterConfig getFilterConfig()
? {
? ? return this.filterConfig;
? }
? public void setFilterConfig (FilterConfig filterConfig)
? {
? ? this.filterConfig = filterConfig;
? }
}
以上的代碼中可以看出,這個 Filter 是一個名為 SimpleFilter.java 類,它實現了 javax.servlet.Filter 接口,并提供了這個接口中三個方法的實現。
注 意,doFilter 可以分為二個部分:filter request 與 filter response 。這二部分由 javax.servlet.FilterChain 對象調用 chain 中的下一個對象來隔開,這下一個對象可能是一個 Servlet 或者另外的一個 Filter 。
現在,我們寫好了這樣的一個簡單的 Filter ,需要把它配置到一個容器中,看看運行結果。
Apache Jatarka Tomcat,4.0 以上版本都支持 Servlet 2.3 規范。本文所有的實例都在此環境下測試通過。
Filters 定義在web應用描述符中,即 web.xml 文件。Filters 先被定義,然后映射(map)到 Servlet 或者 URL ,這與 Servlet 的定義與映射是完全一樣的。列表2是 web.xml 文件中,配置 SimpleFilter.java ,并映射(map)到一個 Servlet 。
Listing 2: web.xml
<?xml version = "1.0" encoding = "ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/j2ee/dtds/web-app_2_3.dtd">
<web-app>
? <!-- Define the filters within the Web Application -->
? <filter>
? ? <filter-name>
? ? ? Simple Filter Example
? ? </filter-name>
? ? <filter-class>
? ? ? com.filters.SimpleFilter
? ? </filter-class>
? </filter>
? <!-- Map the filter to a Servlet or URL -->
? <filter-mapping>
? ? <filter-name>
? ? ? Simple Filter Example
? ? </filter-name>
? ? <url-pattern>
? ? ? /simple
? ? </url-pattern>
? </filter-mapping>
? <!-- Define the Servlets within the Web Application -->
? <servlet>
? ? <servlet-name>
? ? ? Simple Servlet
? ? </servlet-name>
? ? <servlet-class>
? ? ? com.servlets.SimpleServlet
? ? </servlet-class>
? </servlet>
? <!-- Define Servlet mappings to urls -->
? <servlet-mapping>
? ? <servlet-name>
? ? ? Simple Servlet
? ? </servlet-name>
? ? <url-pattern>
? ? ? /simple
? ? </url-pattern>
? </servlet-mapping>
</web-app>
很可惜后面的東東網上都沒有了,現在這些網站對自己的內容都太不負責任了!不過索性大概開發流程是說出來了,具體工作原理就找找別的資料吧
轉載于:https://www.cnblogs.com/menghe/articles/188432.html
總結
以上是生活随笔為你收集整理的编写 Servlet 2.3 Filter的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微软获得O/R映射技术专利 业界担忧阻碍
- 下一篇: c基础--II