java web笔记之Filter初识
2015-03-20 21:33
211 查看
1.Filter简介
Filter意为滤镜或者过滤器,用于在Servlet之外对request或者response进行修改。Filter提出了滤镜链(FilterChain)的概念,一个FilterChain包括多个Filter。客户端请求request在抵达Servlet之前会经过FilterChain里的所有Filter,服务器响应response在从Servlet抵达客户端浏览器之前也会经过FilterChain里所有的Filter.2.示例
<span style="font-size:18px;">package com.wang.indentity; import java.io.IOException; 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.annotation.WebFilter; /** * Servlet Filter implementation class myFilter */ @WebFilter("/myFilter") public class myFilter implements Filter { /** * Default constructor. */ public myFilter() { // TODO Auto-generated constructor stub } /** * @see Filter#destroy() */ public void destroy() { // TODO Auto-generated method stub } /** * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain) */ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("request被处理之前"); //一定要执行这句话,否则不会执行Servlet代码 chain.doFilter(request, response); System.out.println("request被处理之后,response抵达客户端之前"); } /** * @see Filter#init(FilterConfig) */ public void init(FilterConfig fConfig) throws ServletException { // TODO Auto-generated method stub } }</span><span style="font-size:24px;"> </span>chain.doFilter(request,response)将request递交给FilterChain中的下一个Filter,如果所有的Filter都走完了则交给Servlet处理。
注意:doFilter()方法中一定要执行chain.doFilter(request,response)。否则request不会交给后面的Filter或者Servlet.
Filter需要配置在web.xml中才能生效。一个Filter需要配置<filter>与<filter-mapping>标签,例如:
<filter> <filter-name>filterName</filter-name> <filter-class>com.wang.indentity.myFilter</filter-class> </filter> <filter-mapping> <filter-name>filterName</filter-name> <url-pattern>*.action</url-pattern> <dispatcher>REQUEST</dispatcher> </filter-mapping><filter>配置Filter名称,实现类以及初始化参数(如果有的话),可同时配置多个初始化参数。<filter-mapping>配置什么规则下使用该Filter。<filter>的filterName与<filter-mapping>的filterName必须匹配。
<url-pattern>配置URL的规则,可以配置多个,可以使用通配符(*).例如"/jsp/*"适用于本contextPath下以"/jsp/"开头的Servlet路径,"*.do"适用于所有以".do"结尾的Servlet路径。
<dispatcher>配置到达Servlet的方式,有4种取值:REQUEST/FORWARD/INCLUDE/ERROR.可以同时配置多个<dispatcher>。如果没有配置任何<dispatcher>,默认为REQUEST。区别如下:
REQUEST:表示仅当直接请求Servlet时才生效
FORWARD:表示仅当某Servlet通过FORWARD到该Servlet时才生效。
INCLUDE:jsp中可以通过<jsp:include/>请求某Servlet。仅这种情况下有效。
ERROR:jsp中可以通过<%@ page errorPage="error.jsp" %>指定错误处理页面。仅在这种情况下才生效。
<url-pattern>与<diapatcher>的关系是"且"的关系。只有满足<url-pattern>的条件,且满足<dispatcher>的条件时,该filter才能生效。
提示:一个web程序可以配置多个Filter,这多个Filter的执行顺序有先后。规则是<filter-mapping>配置在前面的Filter执行要早于配置在后面的Filter.另外要注意,多个Filter可能会相互影响。
相关文章推荐
- Java Web学习笔记——Filter
- java web中Filter防盗链学习笔记
- java web笔记之Filter防盗链
- [原创]java WEB学习笔记44:Filter 简介,模型,创建,工作原理,相关API,过滤器的部署及映射的方式,Demo
- [原创]java WEB学习笔记19:初识MVC 设计模式:查询,删除 练习(理解思想),小结 ,问题
- [原创]java WEB学习笔记53:Struts2学习之路---前奏:使用 Filter 作为控制器的 MVC
- java web笔记之Filter日志记录
- [原创]java WEB学习笔记45:自定义HttpFilter类,理解多个Filter 代码的执行顺序,Filterdemo:禁用浏览器缓存的Filter,字符编码的Filter,检查用户是否登陆过的Filter
- [学习笔记]java web ServletContext.getRealPath(String str)方法的使用
- java Web笔记
- Python学习笔记一(初识Python)
- BREW学习笔记 - 初识Brew
- UrlRewriteFilter 学习笔记
- ExtJS2.0开发与实践笔记[0]——初识ExtJS
- 强大的DataGrid组件[13]_字段过滤(Filter)——Silverlight学习笔记[21]
- 初识PHP--学习笔记一
- MonoRail学习笔记六:Filter功能使用
- [flash and php bible 学习笔记]初识 socket 1
- wpf学习笔记---初识xaml标签语言
- [导入]Linq学习笔记(2.1)——初识 DLinq