日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

编写 Servlet 2.3 Filter

發布時間:2023/12/13 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 编写 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>


很可惜后面的東東網上都沒有了,現在這些網站對自己的內容都太不負責任了!不過索性大概開發流程是說出來了,具體工作原理就找找別的資料吧

轉載于:https://www.cnblogs.com/menghe/articles/188432.html

總結

以上是生活随笔為你收集整理的编写 Servlet 2.3 Filter的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。