大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 Filter的作用是什么

Filter的作用是什么

更新時間:2022-02-07 11:44:51 來源:動力節(jié)點 瀏覽1702次

過濾器

filter用于攔截用戶請求,在服務(wù)器作出響應(yīng)前,可以在攔截后修改request和response,這樣實現(xiàn)很多開發(fā)者想得到的功能。

filter是一個可以復(fù)用的代碼片段,可以用來轉(zhuǎn)換HTTP請求、響應(yīng)和頭信息。Filter不像Servlet,它不能產(chǎn)生一個請求或者響應(yīng),它只是修改對某一資源的請求,或者修改從某一的響應(yīng)。

一個過濾器是一個可以傳送請求或修改響應(yīng)的對象。過濾器并不是servlet,他們并不實際創(chuàng)建一個請求。他們是請求到達(dá)一個servlet前的預(yù)處理程序,和/或響應(yīng)離開servlet后的后處理程序。一個過濾器能夠:

·在一個servlet被調(diào)用前截獲該調(diào)用

·在一個servlet被調(diào)用前檢查請求

·修改在實際請求中提供了可定制請求對象的請求頭和請求數(shù)據(jù)

·修改在實際響應(yīng)中提供了可定制響應(yīng)對象的響應(yīng)頭和響應(yīng)數(shù)據(jù)

·在一個servlet被調(diào)用之后截獲該調(diào)用

一個過濾器以作用于一個或一組servlet,零個或多個過濾器能過濾一個或多個servlet。一個過濾器需要實現(xiàn)java.servlet.Filter接口,并定義它的三個方法:

1. void init(FilterConfig config) throws ServletException:在過濾器執(zhí)行service前被調(diào)用,以設(shè)置過濾器的配置對象。

2. void destroy();在過濾器執(zhí)行service后被調(diào)用。

3. Void doFilter(ServletRequest req,ServletResponse res,FilterChain chain) throws IOException,ServletException;執(zhí)行實際的過濾工作。

服務(wù)器調(diào)用一次init(FilterConfig)以為服務(wù)準(zhǔn)備過濾器,然后在請求需要使用過濾器的任何時候調(diào)用doFilter()。FilterConfig接口檢索過濾器名、初始化參數(shù)以及活動的servlet上下文。服務(wù)器調(diào)用destory()以指出過濾器已結(jié)束服務(wù)。過濾器的生命周期和servelt的生命周期非常相似 ——在Servlet API 2.3 最終發(fā)布稿2號 中最近改變的。先前得用setFilterConfig(FilterConfig)方法來設(shè)置生命周期。

在doFilter()方法中,每個過濾器都接受當(dāng)前的請求和響應(yīng),而FilterChain包含的過濾器則仍然必須被處理。doFilter()方法中,過濾器可以對請求和響應(yīng)做它想做的一切。(就如我將在后面討論的那樣,通過調(diào)用他們的方法收集數(shù)據(jù),或者給對象添加新的行為。)過濾器調(diào)用

chain.doFilter()將控制權(quán)傳送給下一個過濾器。當(dāng)這個調(diào)用返回后,過濾器可以在它的doFilter()方法的最后對響應(yīng)做些其他的工作;例如,它能記錄響應(yīng)的信息。如果過濾器想要終止請求的處理或得對響應(yīng)的完全控制,則他可以不調(diào)用下一個過濾器。

常見用法

處理全站中文亂碼問題

實現(xiàn)自動登錄

過濾敏感詞匯

壓縮網(wǎng)頁

選擇性讓瀏覽器緩存

這幾種功能的實現(xiàn)采用同樣的原理,那就是使用包裝模式或動態(tài)代理增強(qiáng)request或response對象的功能。

Servlet和filter的區(qū)別

1,servlet 流程是短的,url傳來之后,就對其進(jìn)行處理,之后返回或轉(zhuǎn)向到某一自己指定的頁面。它主要用來在 業(yè)務(wù)處理之前進(jìn)行控制.

2,filter 流程是線性的, url傳來之后,檢查之后,可保持原來的流程繼續(xù)向下執(zhí)行,被下一個filter, servlet接收等,而servlet 處理之后,不會繼續(xù)向下傳遞。filter功能可用來保持流程繼續(xù)按照原來的方式進(jìn)行下去,或者主導(dǎo)流程,而servlet的功能主要用來主導(dǎo)流程。

filter可用來進(jìn)行字符編碼的過濾,檢測用戶是否登陸的過濾,禁止頁面緩存等。

demo演示

步驟一:新建comment.jsp頁面

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<title>評論</title>
</head>
<body>
    <form action="comment" method="post">
        <fieldset>
            <legend>評論</legend>
            請輸入評論:<textarea name="comment"
            style="vertical-align:middle;
            width:140px;height:55px"></textarea><Br>
            <input type="submit" value="發(fā)表評論" />
        </fieldset>
    </form>
</body>
</html>

步驟二:新建CommentServlet.java文件

package web;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CommentServlet extends HttpServlet {
    public void service(HttpServletRequest request,
                        HttpServletResponse response)
                        throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        //獲取評論內(nèi)容
        String str = request.getParameter("comment");
        //顯示評論內(nèi)容
        out.println("<h3>評論內(nèi)容:" + str + "</h3>");
        out.close();
    }
}

步驟三:新建CommentFilter類

package web;
import java.io.IOException;
import java.io.PrintWriter;
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;
public class CommentFilter1 implements Filter{
    private String illegalWord;    
    /**
     * 容器刪除過濾器實例之前調(diào)用,只執(zhí)行一次
     */
    public void destroy() {                
    }    
    /**
     * 用于處理請求的主要方法
     */
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest)request;
        HttpServletResponse resp = (HttpServletResponse)response;
        req.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=UTF-8");
        PrintWriter out = resp.getWriter();
        String comment = req.getParameter("comment");
        if(comment.indexOf("damn")!=-1){
            //有敏感詞匯
            out.print("<h3>評論內(nèi)容已關(guān)閉</h3>");
        }else{
            //沒有敏感詞匯則向后處理,交給其他過濾器或Servlet
            chain.doFilter(req, resp);
        }
    }    
    /**
     * 容器啟動之后,創(chuàng)建過濾器實例
     * 然后調(diào)用init方法,只會調(diào)用一次
     * 容器會將已經(jīng)創(chuàng)建好的FilterConfig對象作為參數(shù)傳入
     * 可以從該參數(shù)中獲取初始化的配置信息
     */
    public void init(FilterConfig filterConfig) throws ServletException {
        illegalWord = filterConfig.getInitParameter("illegalWord");
        System.out.println("Filter1:init is runnming... " + illegalWord);        
    }    
}

步驟四:配置CommentFilter過濾器

web.xml文件代碼:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name></display-name>
<!-- 過濾器 -->
<filter>
    <filter-name>filter1</filter-name>
    <filter-class>web.CommentFilter1</filter-class>    
</filter>
<filter-mapping>
    <filter-name>filter1</filter-name>
    <url-pattern>/comment</url-pattern>
</filter-mapping>
<!-- Servlet -->
<servlet>
<servlet-name>CommentServlet</servlet-name>
<servlet-class>web.CommentServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CommentServlet</servlet-name>
<url-pattern>/comment</url-pattern>
</servlet-mapping>
</web-app>

步驟五:部署應(yīng)用,輸入評論查看結(jié)果

提交申請后,顧問老師會電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 亚洲国产精品综合久久久 | 日本aaaa视频 | 久久精品亚洲一区二区三区浴池 | 久re这里只有精品最新地址 | 亚洲国产精品乱码在线观看97 | 欧美在线观看一区 | 香蕉一区二区三区观 | 亚洲sss综合天堂久久久 | 色婷婷激婷婷深爱五月小蛇 | 国产激情一区二区三区 | 99热久久国产综合精品久久国产 | 日韩欧美在线免费观看 | 中文字幕一区在线观看 | 99视频九九精品视频在线观看 | 国内久久久久影院精品 | 欧美性xxxxxx性 | 亚洲一在线| 成人免费播放视频777777 | 精品国产自在现线看久久 | 日本中文字幕一区二区有码在线 | 亚洲欧美午夜 | 国产全黄a一级毛片视频 | 欧美大陆日韩一区二区三区 | 色桃花网| 久久国产精品久久国产片 | 国产精品免费一区二区三区 | 欧洲成人在线视频 | 亚欧中文字幕 | 福利在线视频观看 | 奇米激情网 | 亚洲欧洲日韩在线 | 91九色视频 | 亚洲精品www久久久久久久软件 | 国产不卡视频在线播放 | 女人十八毛片免费特黄 | 91资源在线 | 综合伊人久久在一二三区 | 四虎影院最新 | 99热久久免费精品首页 | 91精品国产91久久综合 | 91在线看视频 |