【Head First Servlets and JSP】笔记 28: 过滤器与包装器

1、过滤器的执行顺序: <url-pattern> 为第一梯队, <servlet-name> 为第二梯队,梯队内的执行顺序和 DD 里的声明顺序相同。

When the container recives a request, it first finds all the filter mappings with a <url-pattern> that matches the request URI. This becomes the first set of filters in the filter chain.Next it finds all the filter mappings with a <servlet-name> that matches the request URI. This becomes the second set of filters in the filter chain.In both the sets the filters are executed in the order in which they are declared in the D.D.

2、可以对服务器中传递的请求进行过滤。

    <filter>
        <filter-name>BeerRequest</filter-name>
        <filter-class>sample.BeerRequestFilter</filter-class>
        <init-param>
            <param-name>LogFileName</param-name>
            <param-value>Userlog.txt</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>BeerRequest</filter-name>
        <url-pattern>*.do</url-pattern>
        <servlet-name>jack</servlet-name>
        <dispatcher>REQUEST</dispatcher> <!-- 当一个也没有设置时,它是默认值 -->
        <dispatcher>INCLUDE</dispatcher>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>ERROR</dispatcher>
    </filter-mapping>

3、过滤器应用实例

package sample;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class Servlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        PrintWriter printWriter = resp.getWriter();
        printWriter.println("calls doGet(req, resp)");
        printWriter.println("测试能否输出中文");
        printWriter.close();
    }
}

filter :

package sample;

import javax.servlet.*;
import java.io.IOException;

public class Filter implements javax.servlet.Filter{

    private int visited;

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        servletResponse.setContentType("text/html");
        servletResponse.setCharacterEncoding("utf-8");
        visited ++;
        filterChain.doFilter(servletRequest, servletResponse);
        System.out.println("visited = " + visited);
    }

    @Override
    public void destroy() {

    }
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <servlet>
        <servlet-name>servlet</servlet-name>
        <servlet-class>sample.Servlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>servlet</servlet-name>
        <url-pattern>/do</url-pattern>
    </servlet-mapping>

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

    <filter-mapping>
        <filter-name>filter</filter-name>
        <servlet-name>servlet</servlet-name>
    </filter-mapping>

</web-app>

4、包装器略。

时间: 2024-08-10 15:10:22

【Head First Servlets and JSP】笔记 28: 过滤器与包装器的相关文章

《Head First Servlets & JSP》-13-过滤器和包装器

过滤器是什么 与servlet非常类似,过滤器就是java组件,请求发送到servlet之前,可以用过滤器截获和处理清求,另外 servlet结束工作之后,在响应发回给客户之前,可以用过滤器处理响应. 容器根据DD中的声明来确定何时调用过滤器.在DD中,部署人员要建映射.明确对于哪个请求URL模式要调用哪些过滤器.所以,要由部署人员(而不是程序员)来确定哪些请求或响应应当由哪些过滤器处理. 过滤器要做的事情 只有一个过滤器接口:Filter,根据使用方式,可完成诸如以下工作: 请求过滤器可以完成

过滤器与包装器

过滤器允许你拦截请求,也允许你控制响应.Filter很像Servlet,容器管理过滤器的生命周期.和Servlet类似,过滤器也有init()和destroy()方法,对应于servlet的doGet()/doPost(),过滤器则有一个doFilter()方法.过滤器也需要在DD中声明,过滤器的运行顺序也将在DD中声明. 1.过滤器中的生命周期 首先要有一个inti(),最常见的实现是在inti()中保存一个FilterConfig的引用,以备过滤器以后使用(获取过滤器参数等). 真正的工作在

[Java] JSP笔记 - Filter 过滤器

一.什么是Web过滤器 Servlet API 很久以前就已成为企业应用开发的基石,而 Servlet 过滤器则是对 J2EE 家族的相对较新的补充. Servlet 过滤器是可插入的 Web 组件,它允许我们实现 Web 应用程序中的预处理和后期处理逻辑.过滤器支持 servlet 和 JSP 页面的基本请求处理功能,比如日志记录.性能.安全.会话处理.XSLT 转换,等等. 过滤器最初是随 Java Servlet 2.3 规范发布的. Servlet 过滤器是什么?Servlet 过滤器是

【Head First Servlets and JSP】笔记23:Expression Language(EL) 完全攻略

基本上是<Head First Servlets and JSP>内容的整理.扩充.顺便推荐一个供参考的JSP教程:JSP Tutorial内容很全面,还有一些有趣的实例. 完整代码参考 EL隐式对象汇总 pageContext使用参考 EL表达式的基本规则 关于EL的一些细节 通过EL获得request参数 从request得到更多信息 获得Request Method? xxxxScope有意义吗? 通过EL调用函数 EL与数学运算 1.EL隐式对象汇总.如下所示: 更详细的内容可以参考 

jQuery学习笔记之过滤器三(向上查找兄弟元素、向下查找兄弟元素)

向上查找兄弟元素的方法:prev方法.prevAll方法.prevUntil方法 向下查找兄弟元素:next方法.nextAll方法.nextUntil方法 向上查找兄弟元素 1.prev方法 2.prevAll方法 3.prevUntil方法 向下查找兄弟元素 1.next方法 2.nextAll方法 3.nextUntil方法 jQuery学习笔记之过滤器三(向上查找兄弟元素.向下查找兄弟元素)

【Head First Servlets and JSP】实践记录01:从有脚本到无脚本

试图章节式的阅读<Head First Servlets and JSP>总感觉不对劲,这本书前后的联系性很强,有点类似于“连续剧”,而不是通常的“知识清单”. 可以建立多态的bean引用吗 使用type,但没有class scope属性默认为“page” 从有脚本到无脚本 1.快速搭建一个测试环境:输入用户名,返回“Hello, 用户名” index.html <!DOCTYPE html> <html lang="en"> <head>

笔记28 mssql的update :from语法

原文:笔记28 mssql的update :from语法 笔记28 mssql的update :from语法 1 --mssql的update :from语法 2 --a表 b表 结构分别 id ,name , id,memo 3 4 5 --b表的memo需要对照a表 关键ID相同就可以更新,语句如下 6 7 8 update b 9 set memo = a.name 10 from a,b 11 where a.id = b.id 12 --这个就是只更新from内的b结果集,等效于下面的

过滤器和拦截器的区别

---------------------siwuxie095 过滤器和拦截器的区别 过滤器:过滤器理论上能过滤任何内容,如:HTML.JSP.Servlet.图片路径 拦截器:拦截器只能拦截 Action 附: Servlet 和 Action 的区别 Servlet:默认第一次访问时创建,创建一次,是单实例对象 Action:每次访问时都创建,创建多次,是多实例对象 [made by siwuxie095]

(转)过滤器和拦截器的区别

1.拦截器是基于java的反射机制的,而过滤器是基于函数回调 2.过滤器依赖与servlet容器,而拦截器不依赖与servlet容器 3.拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用 4.拦截器可以访问action上下文.值栈里的对象,而过滤器不能 5.在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次 拦截器 :是在面向切面编程的就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法比如动态代理就是拦截器的