在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Linux/ Servlet過慮器
Servlet web.xml welcome-file-list
Servlet從數(shù)據(jù)庫(kù)讀取記錄性能優(yōu)化
Servlet URL重寫帶參數(shù)
War文件
Web技術(shù)基礎(chǔ)
Servlet GenericServlet類
Servlet API
Servlet ServletInputStream類
使用MyEclipse創(chuàng)建Servlet
Servlet增刪改查
Servlet ServletConfig配置信息
Servlet Cookies
Servlet重定向
Servlet生命周期
Servlet HttpSession會(huì)話
Servlet HttpServlet類
Servlet注冊(cè)表單示例
Servlet表單隱藏字段
Servlet下載文件
Servlet教程
Servlet身份驗(yàn)證過濾器
Servlet ServletOutputStream類
Servlet HttpSession登錄注銷實(shí)例
Servlet啟動(dòng)時(shí)加載
Servlet事件和監(jiān)聽器
使用Eclipse創(chuàng)建Servlet
Servlet ServletContextEvent事件
Servlet HttpSessionEvent統(tǒng)計(jì)在線用戶數(shù)實(shí)例
Servlet RequestDispatcher請(qǐng)求轉(zhuǎn)發(fā)
Servlet使用注釋
Servlet過濾器示例
Servlet過慮器
Servlet ServletContext配置信息
Servlet登錄注銷Cookies實(shí)例
Servlet工作流程
Servlet會(huì)話跟蹤
Servlet登錄實(shí)例
Servlet ServletRequest接口
Servlet ServletRequestEvent類和接口
Servlet入門程序
Servlet查詢搜索數(shù)據(jù)示例
Servlet FilterConfig應(yīng)用示例
Servlet顯示所有頭信息
Servlet屬性設(shè)置
使用NetBeans創(chuàng)建Servlet
Servlet接口實(shí)現(xiàn)
Servlet上傳文件

Servlet過慮器

過濾器是在請(qǐng)求的預(yù)處理和后處理時(shí)調(diào)用的對(duì)象。

主要用于執(zhí)行轉(zhuǎn)換,日志記錄,壓縮,加解密,輸入驗(yàn)證等過濾任務(wù)。

servlet過濾器是可插拔的,即它在web.xml文件中定義,如果從web.xml文件中刪除過濾項(xiàng),則過濾器將被自動(dòng)刪除,因此不需要手動(dòng)更改Servlet。所以過濾器維護(hù)成本會(huì)比較低。

參考模型圖 -

注意:與Servlet不同,一個(gè)過濾器不依賴于另一個(gè)過濾器。

過濾器的使用

  • 記錄所有傳入的請(qǐng)求
  • 記錄來自標(biāo)計(jì)算機(jī)的IP地址的請(qǐng)求
  • 轉(zhuǎn)變/轉(zhuǎn)換
  • 數(shù)據(jù)壓縮
  • 加密和解密
  • 輸入驗(yàn)證等

過濾器的優(yōu)點(diǎn)

  • 過濾器是可插拔的。
  • 一個(gè)過濾器不依賴于另一個(gè)資源。
  • 維護(hù)少,比較容易維護(hù)。

過濾器API

像Servlet一樣,過濾器也有自己的API。 javax.servlet包中包含F(xiàn)ilter API的三個(gè)接口,它們分別如下所示 -

  • Filter
  • FilterChain
  • FilterConfig

Filter接口

要?jiǎng)?chuàng)建一個(gè)過濾器,必須要實(shí)現(xiàn)Filter接口。Filter接口為過濾器提供了生命周期方法。

方法 描述
public void init(FilterConfig config) init()方法只被調(diào)用一次,用于初始化過濾器。
public void doFilter(HttpServletRequest request,HttpServletResponse response, FilterChain chain) 當(dāng)用戶請(qǐng)求過濾器所映射到資源時(shí),會(huì)調(diào)用doFilter()方法,它用于執(zhí)行過濾任務(wù)。
public void destroy() 當(dāng)過濾器從服務(wù)中取出時(shí),調(diào)用此方法(僅一次)。

FilterChain接口

FilterChain對(duì)象負(fù)責(zé)調(diào)用鏈中的下一個(gè)過濾器或資源。對(duì)象在Filter接口的doFilter方法中傳遞。FilterChain接口只包含一個(gè)方法:

  • public void doFilter(HttpServletRequest request,HttpServletResponse response):它將控件傳遞給下一個(gè)過濾器或資源。

如何定義過濾器

我們可以使用與servlet相同方式來定義過濾器。下面來看看過濾器和過濾器映射的元素。在web.xml文件配置如下 -

<web-app>  

<filter>  
  <filter-name>...</filter-name>  
  <filter-class>...</filter-class>  
</filter>  

<filter-mapping>  
  <filter-name>...</filter-name>  
  <url-pattern>...</url-pattern>  
</filter-mapping>  

</web-app>

對(duì)于映射過濾器,可以使用url-patternservlet-name。 url-pattern元素比servlet-name元素具有優(yōu)勢(shì),即它可以應(yīng)用于servletJSPHTML資源。

過濾器的簡(jiǎn)單示例

在這個(gè)例子中,只是顯示在請(qǐng)求的后處理后自動(dòng)調(diào)用過濾器的信息。

打開Eclipse,創(chuàng)建一個(gè)動(dòng)態(tài)Web項(xiàng)目:SimpleFilter,其完整的目錄結(jié)構(gòu)如下所示 -

以下是這個(gè)項(xiàng)目中的幾個(gè)主要的代碼文件。

文件:index.html -

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>過濾器的簡(jiǎn)單示例</title>
</head>
<body>
    <div style="font-align: center;">
        <a href="servlet1">查看過濾器調(diào)用信息</a>
    </div>
</body>
</html>

文件:MyFilter.java

package com.yiibai;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.*;

public class MyFilter implements Filter {

    public void init(FilterConfig arg0) throws ServletException {
    }

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

        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        request.setCharacterEncoding("UTF-8");
        PrintWriter out = response.getWriter();
        out.print("過濾器調(diào)用之前<br/>");

        chain.doFilter(request, response);// sends request to next resource

        out.print("過濾器調(diào)用之后<br/>");
    }

    public void destroy() {
    }
}

文件:MyServlet.java

package com.yiibai;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.*;

public class MyServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        request.setCharacterEncoding("UTF-8");
        PrintWriter out = response.getWriter();
        out.print("  -- 這是一個(gè)簡(jiǎn)單的測(cè)試Servlet.<br>");

    }

}

文件:web.xml -

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    id="WebApp_ID" version="3.1">
    <display-name>SimpleFilter</display-name>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    <servlet>
        <servlet-name>s1</servlet-name>
        <servlet-class>com.yiibai.MyServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>s1</servlet-name>
        <url-pattern>/servlet1</url-pattern>
    </servlet-mapping>

    <filter>
        <filter-name>f1</filter-name>
        <filter-class>com.yiibai.MyFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>f1</filter-name>
        <url-pattern>/servlet1</url-pattern>
    </filter-mapping>
</web-app>

在編寫上面代碼后,部署此Web應(yīng)用程序(在項(xiàng)目名稱上點(diǎn)擊右鍵->”Run On Server…”),打開瀏覽器訪問URL: http://localhost:8080/SimpleFilter/ ,如果沒有錯(cuò)誤,應(yīng)該會(huì)看到以下結(jié)果 -

點(diǎn)擊鏈接,得到 以下結(jié)果 -

在上圖中,可以看到過濾器調(diào)用的順序。