Head First Servlets&Jsp 读书摘记11——【过滤器的威力】
2010-07-03 22:59
519 查看
接近尾声,还来点实用的技术活儿——过滤器的威力!
124、与servlet非常类似,过滤器就是Java组件,请求发送到servlet之前,可以用过滤器截获和处理请求,另外servlet结束工作之后,在响应发回给客户之前,可以用过滤器处理响应。(P672);
125、过滤器是模块化的,而且可以在DD中配置,容器根据DD中声明来确定何时调用过滤器。(P672~673);
126、过滤器不知道谁来调用它们,也不知道过滤器链中下一个是谁!(675);
127、过滤器的生命周期:
首先要有一个init();
真正的工作在doFilter(ServletRequest req, ServletResponse rsp, FilterChain chain)中完成;
最后来个destroy()。
128、过滤器可以应用于直接来自客户的请求,这当然很棒。但是如果请求来自转发或包含、请求分派和/或错误处理器呢?
Servlet规范2.4提供了解决办法。(P679);
129、过滤器声明规则:
1)必须要有<filter-name>;
2)必须要有<url-pattern>或<servlet-name>元素其中之一;
3)可以有0~4个<dispatcher>元素;
4)REQUEST值表示对客户请求启用过滤器。如果没有指定<dispatcher>元素,则默认为REQUEST;
5)INCLUDE值表示对由一个include()调用分派来的请求启用过滤器;
6)FORWARD值表示对由一个forward()调用分派来的请求启动过滤器;
7)ERROR值表示对错误处理器调用的资源启动过滤器。
(P679too);
130、Rachel这样介绍doFilter()方法中代码的基本结构——首先,完成与请求相关的工作,然后调用chain.doFilter(),最后,当Servlet(以及链中当前过滤器之后的所有其他过滤器)工作结束,而且控制返回到原先的doFilter()方法时,可以对响应在做点工作。(P682);
131、
public void doFilter(request, response, chain){
//请求处理放在这里
chain.doFilter(request, response);
//这里完成压缩逻辑
}
chain.doFilter()调用返回,过滤器希望拿到输出,并开始处理点什么……不过,已经太晚了!输出已经发送给客户!容器并没有为过滤器把输出缓存起来。等到过滤器自己的doFilter()方法至于(概念)栈的栈顶时,过滤器再想影响输出已为时已晚。
(P683);
132、建立一个自己的响应实现,并把它通过chain.doFilter()调用传递到Servlet。而且这个定制响应实现还必须包含一个定制的输出流(处理),因为这是我们的目标,在Servlet写输出之后并且在输出返回给客户之前,过滤器就能拿到这个输出。(P685, 689);
133、包装器包装了实际的请求或响应对象,而且调用委托给(传给)实际的对象,还允许你对定制请求或响应做所需的额外处理。(P687);
124、与servlet非常类似,过滤器就是Java组件,请求发送到servlet之前,可以用过滤器截获和处理请求,另外servlet结束工作之后,在响应发回给客户之前,可以用过滤器处理响应。(P672);
125、过滤器是模块化的,而且可以在DD中配置,容器根据DD中声明来确定何时调用过滤器。(P672~673);
126、过滤器不知道谁来调用它们,也不知道过滤器链中下一个是谁!(675);
127、过滤器的生命周期:
首先要有一个init();
真正的工作在doFilter(ServletRequest req, ServletResponse rsp, FilterChain chain)中完成;
最后来个destroy()。
128、过滤器可以应用于直接来自客户的请求,这当然很棒。但是如果请求来自转发或包含、请求分派和/或错误处理器呢?
Servlet规范2.4提供了解决办法。(P679);
129、过滤器声明规则:
1)必须要有<filter-name>;
2)必须要有<url-pattern>或<servlet-name>元素其中之一;
3)可以有0~4个<dispatcher>元素;
4)REQUEST值表示对客户请求启用过滤器。如果没有指定<dispatcher>元素,则默认为REQUEST;
5)INCLUDE值表示对由一个include()调用分派来的请求启用过滤器;
6)FORWARD值表示对由一个forward()调用分派来的请求启动过滤器;
7)ERROR值表示对错误处理器调用的资源启动过滤器。
(P679too);
130、Rachel这样介绍doFilter()方法中代码的基本结构——首先,完成与请求相关的工作,然后调用chain.doFilter(),最后,当Servlet(以及链中当前过滤器之后的所有其他过滤器)工作结束,而且控制返回到原先的doFilter()方法时,可以对响应在做点工作。(P682);
131、
public void doFilter(request, response, chain){
//请求处理放在这里
chain.doFilter(request, response);
//这里完成压缩逻辑
}
chain.doFilter()调用返回,过滤器希望拿到输出,并开始处理点什么……不过,已经太晚了!输出已经发送给客户!容器并没有为过滤器把输出缓存起来。等到过滤器自己的doFilter()方法至于(概念)栈的栈顶时,过滤器再想影响输出已为时已晚。
(P683);
132、建立一个自己的响应实现,并把它通过chain.doFilter()调用传递到Servlet。而且这个定制响应实现还必须包含一个定制的输出流(处理),因为这是我们的目标,在Servlet写输出之后并且在输出返回给客户之前,过滤器就能拿到这个输出。(P685, 689);
133、包装器包装了实际的请求或响应对象,而且调用委托给(传给)实际的对象,还允许你对定制请求或响应做所需的额外处理。(P687);
相关文章推荐
- Head First Servlets&Jsp 读书摘记3——【作为Web应用】
- Head First Servlets&Jsp 读书摘记5——【作为JSP】
- Head First Servlets&Jsp 读书摘记9——【部署】
- Head First Servlets&Jsp 读书摘记10——【Web应用安全】
- Head First Servlets&Jsp 读书摘记1——【Web应用体系结构 & 迷你MVC】
- Head First Servlets&Jsp 读书摘记4——【会话状态】
- Head First Servlets&Jsp 读书摘记7——【JSTL】
- Head First Servlets&Jsp 读书摘记8——【自定义标签】
- Head First Servlets&Jsp 读书摘记12——【模式和Struts】
- Head First Servlets&Jsp 读书摘记2——【作为Servlet】
- Head First Servlets&Jsp 读书摘记6——【没有脚步的页面】
- Head First Servlets&JSP知识体系
- HeadFirst Jsp 11 (部署WEB应用)
- My first thought of reading this book-《Head First sServlets & JSP》
- 《Head First Servlets & JSP(中文版)》书摘
- 【Head First Servlets and JSP】笔记24:include指令与include动作 & param动作 & foward动作
- 【Head First Servlets and JSP】笔记6:什么是响应首部 & 快速搭建一个简单的测试环境
- Head First Servlet&JSP 读书笔记(一)
- Head-First Servelts&JSP reading note 5
- Head First Servlets & JSP 学习心得(一)