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

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

Filter的作用是什么

更新時間:2022-02-07 11:44:51 來源:動力節點 瀏覽1577次

過濾器

filter用于攔截用戶請求,在服務器作出響應前,可以在攔截后修改request和response,這樣實現很多開發者想得到的功能。

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

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

·在一個servlet被調用前截獲該調用

·在一個servlet被調用前檢查請求

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

·修改在實際響應中提供了可定制響應對象的響應頭和響應數據

·在一個servlet被調用之后截獲該調用

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

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

2. void destroy();在過濾器執行service后被調用。

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

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

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

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

常見用法

處理全站中文亂碼問題

實現自動登錄

過濾敏感詞匯

壓縮網頁

選擇性讓瀏覽器緩存

這幾種功能的實現采用同樣的原理,那就是使用包裝模式或動態代理增強request或response對象的功能。

Servlet和filter的區別

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

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

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

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="發表評論" />
        </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();
        //獲取評論內容
        String str = request.getParameter("comment");
        //顯示評論內容
        out.println("<h3>評論內容:" + 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;    
    /**
     * 容器刪除過濾器實例之前調用,只執行一次
     */
    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>評論內容已關閉</h3>");
        }else{
            //沒有敏感詞匯則向后處理,交給其他過濾器或Servlet
            chain.doFilter(req, resp);
        }
    }    
    /**
     * 容器啟動之后,創建過濾器實例
     * 然后調用init方法,只會調用一次
     * 容器會將已經創建好的FilterConfig對象作為參數傳入
     * 可以從該參數中獲取初始化的配置信息
     */
    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>

步驟五:部署應用,輸入評論查看結果

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 精品一区视频 | 亚洲精品中文字幕一区 | 草莓视频在线观看精品最新 | 亚洲精品久久久久久动漫剧情 | 香蕉网伊| 国产精品福利久久 | 欧美日日操 | 曰本毛片| 久久久久爽亚洲精品 | 色婷婷精品大视频在线蜜桃视频 | 日韩成人在线视频 | 久久永久免费中文字幕 | 首页 动漫 亚洲 欧美 日韩 | 亚洲欧美综合一区二区三区四区 | 中国一级特黄aa毛片大片 | 香蕉欧美| 国产欧美精品一区二区 | 国产亚洲在线 | 99在线视频网站 | 欧美专区综合 | 亚洲精品中文字幕第一区 | 日韩欧美亚洲在线 | 九色网址 | 香蕉色综合 | 成人免费xxx色视频 成人免费播放视频777777 | 久久国产首页 | 久久性精品 | 国产精品夜色视频一区二区 | 性做久久久久久坡多野结衣 | 日本α级毛片视频免费观看 | 久久久www成人免费精品 | 国产香蕉免费精品视频 | 天堂日韩 | 前任4在线观看 | 亚洲美女视频在线观看 | 欧美视频在线观看免费 | 特级一级毛片视频免费观看 | 国产成人做受免费视频 | 中文字幕曰韩一区二区不卡 | 久草在线中文最新视频 | 色久综合大榴莲 |