Filter过滤器
到达请求资源之前执行的一段代码。
实现Filter接口
1. 创建过滤器类
- @WebFilter("/*")
“/ * ”:无论是jsp还是servlet都会执行 - @WebFilter("/index.jsp")
表示在到达web组件index.jsp之前执行此代码
2.过滤器:处理表单和响应对象的中文
3. 生命周期方法
- init(FilterConfig config) 初始化参数
- doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
doFilter方法:继续执行请求 - destory()
4. 初始化参数的配置
- 配置文件方式:
< filter>
< filter-name>filter3< /filter-name>
< filter-class>cn.tedu.filter.DemoFilter3< /filter-class>
< init-param>
< param-name>name</ param-name>
< param-value>admin</ param-value>
< /init-param>
< /filter>
< filter-mapping>
< filter-name>filter3< /filter-name>
< url-pattern>/HelloServlet< /url-pattern>
< /filter-mapping> - 注解方式:
@WebFilter(urlPatterns= {"/HelloServlet"},
initParams= {
@WebInitParam(name=“name”,value=“admin”),
@WebInitParam(name=“pw”,value=“123”)
})
获取初始化参数的值
fConfig.getInitParameter(“name”)
4. 其他情况过滤器处理方式
- 默认filter是request请求时执行的一段代码
- 请求转发或出现错误404或者请求包含时,怎样执行过滤器?
- 配置文件方式:
< filter-mapping>
< filter-name>filter3< /filter-name>
< url-pattern>/HelloServlet< /url-pattern>
< dispatcher>INCLUDE< /dispatcher>
< dispatcher>REQUEST< /dispatcher>
< dispatcher>ERROR< /dispatcher>
< dispatcher>FORWARD< /dispatcher>
< dispatcher>ASYNC< /dispatcher>
< /filter-mapping> - 注解方式:
@WebFilter(urlPatterns= {"/*"},
initParams= {
@WebInitParam(name=“name”,value=“admin”)
},
dispatcherTypes= {
DispatcherType.REQUEST,
DispatcherType.INCLUDE,
DispatcherType.ERROR,
DispatcherType.FORWARD
})
- 配置文件方式:
5. 多个过滤器执行的先后顺序
- xml配置文件的方式:按照< filter-mapping > 的先后顺序
- 注解:按照过滤器名的字母先后顺序(从小到大)