黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

Servlet教程

Java Servlet Filter映射

使用 MyEclipse 創(chuàng)建 Filter 后,在 web.xml 中的對應(yīng)配置信息就是 Filter 映射。Filter 的映射方式可分為兩種。

1、使用通配符*攔截用戶的所有請求

Filter的元素用于配置過濾器攔截的資源信息,如果想讓過濾器攔截所有的請求,那么可以使用通配符*實(shí)現(xiàn),具體實(shí)現(xiàn)方式如下:

<filter>
    <filter-name>MyFilter</filter-name>
    <filter-class>com.mengma.filter.MyFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>MyFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

2、攔截不同方式的訪問請求

在 web.xml 文件中,每一個(gè) <filter-mapping>元素都可以配置一個(gè) Filter 所負(fù)責(zé)攔截的資源。在 <filter-mapping> 元素中有一個(gè)特殊的子元素<dispatcher> ,該元素用于指定過濾器所攔截的資源被 Servlet 容器調(diào)用的方式。<dispatcher>元素的值共有四個(gè),如表 1 所示。

表 1 <dispatcher>元素的值

名稱

功能描述

REQUEST

當(dāng)用戶直接訪問頁面時(shí),Web 容器將會(huì)調(diào)用過濾器。如果目標(biāo)資源通過 RequestDispatcher 的 include() 或 forward() 方法訪問,那么該過濾器將不會(huì)被調(diào)用

INCLUDE

如果目標(biāo)資源通過 RequestDispatcher 的 include() 方法訪問,那么該過濾器將會(huì)被調(diào)用。除此之外,該過濾器不會(huì)被調(diào)用

FORWARD

如果目標(biāo)資源通過 RequestDispatcher 的 forward() 方法訪問,那么該過濾器將會(huì)被調(diào)用。除此之外,該過濾器不會(huì)被調(diào)用

ERROR

如果目標(biāo)資源通過聲明式異常處理機(jī)制調(diào)用,那么該過濾器將會(huì)被調(diào)用。除此之外,該過濾器不會(huì)被調(diào)用

為了讓讀者更好地理解表 1 中的四個(gè)值的作用,下面以 FORWARD 為例,分步驟演示 Filter 對轉(zhuǎn)發(fā)請求的攔截效果。

① 創(chuàng)建ForwardServlet

在 filterDemo01 項(xiàng)目的 com.mengma.filter 包中創(chuàng)建一個(gè)名為 ForwardServlet 的 Servlet 類,該類用于將請求轉(zhuǎn)發(fā)給 first.jsp 頁面,如下所示。

package com.mengma.filter;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ForwardServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.getRequestDispatcher("/first.jsp").forward(request, response);
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
}

② 創(chuàng)建 first.jsp

在項(xiàng)目的 WebContent 目錄中創(chuàng)建一個(gè)名稱為 first.jsp 的頁面,該頁面用于輸出內(nèi)容,編輯代碼如下所示。

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
    first.jsp
</body>
</html>

③ 創(chuàng)建并編輯過濾器 ForwardFilter

在 com.mengma.filter 包中創(chuàng)建一個(gè)名稱為 ForwardFilter 的過濾器,該過濾器專門用于對 first.jsp 頁面進(jìn)行攔截。需要注意的是,在填寫配置信息時(shí),需要將 Edit Filter Mapping 窗口中 Select dispatchers 下的 Forward 復(fù)選框選中,如圖 1 所示。

圖 1 配置攔截信息

創(chuàng)建完成后,編輯 ForwardFilter 類。編輯后的實(shí)現(xiàn)代碼如下所示。

package com.mengma.filter;
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;
public class ForwardFilter implements Filter {
    public void init(FilterConfig fConfig) throws ServletException {
        // 過濾對象在初始化時(shí)調(diào)用,可以配置一些初始化參數(shù)
    }
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        // 用于攔截用戶的請求,如果和當(dāng)前過濾器的攔截路徑匹配,該方法會(huì)被調(diào)用
        PrintWriter out = response.getWriter();
        out.write("Hello FilterTest");
    }
    public void destroy() {
        // 過濾器對象在銷毀時(shí)自動(dòng)調(diào)用,釋放資源
    }
}

此時(shí)需在 web.xml 文件中添加 ForwardFilter 的映射信息。代碼中增加了一個(gè) <dispatcher> 子元素,并且該元素的值為 FORWARD,如下所示:

<filter>
    <filter-name>ForwardFilter</filter-name>
    <filter-class>com.mengma.filter.ForwardFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>ForwardFilter</filter-name>
    <url-pattern>/first.jsp</url-pattern>
    <dispatcher>FORWARD</dispatcher>
</filter-mapping>

④ 運(yùn)行項(xiàng)目并查看結(jié)果

啟動(dòng) Tomcat 服務(wù)器,在瀏覽器的地址欄中輸入地址 http://localhost:8080/filterDemo01/ForwardServlet 訪問 ForwardServlet,瀏覽器顯示的結(jié)果如圖 2 所示。

圖 2 運(yùn)行結(jié)果

從圖 2 中可以看出,瀏覽器窗口顯示的是 ForwardFilter 類中的內(nèi)容,而 first.jsp 頁面的輸出內(nèi)容沒有顯示。由此可見,F(xiàn)orwardServlet 中通過 forward() 方法轉(zhuǎn)發(fā)的 first.jsp 頁面被成功攔截。

全部教程
主站蜘蛛池模板: 欧美在线观看视频网站 | 亚洲人色大成年网站在线观看 | 色婷婷99综合久久久精品 | 亚洲欧美日韩中字综合 | 久久亚洲热 | 亚洲欧美国产中文 | 欧美一级精品 | 亚洲第一视频网 | 欧美成人免费观看久久 | 一级大片免费 | 18无删减羞羞网站动漫 | 一个人看的www高清在线观看 | 看片网站在线 | 在线视频天堂 | 久久精品国产亚洲高清 | 福利三级| 性片网址 | 日韩人成 | 国产精品国产三级在线专区 | 欧美成人激情视频 | 国产黄视频网站 | 中文字幕欧美一区 | 欧美午夜影视 | 免费观看www视频 | 中文在线日本免费永久18近 | 开心激情综合 | 久久a 热6 | 国产在线成人一区二区 | www.天堂网.com| 怡红院在线观看视频 | 天天夜天干天天爽 | 成人国产在线视频 | 91久久天天躁狠狠躁夜夜 | 国产日产欧产精品精品推荐在线 | 久久免费视频网 | 日韩一区二区三区在线 | 日本成人福利视频 | 成人福利在线免费观看 | 5g影院天天爽天天 | 狠狠躁日日躁人人爽 | 亚洲人成在线播放网站岛国 |