过滤器是用来拦截请求的,而不是处理请求的
当用户请求某个Servlet时,会先执行部署在这个请求上的filter, 如果filter放行,才会执行用户请求的servlet
即,当用户请求某个Servlet时,Tomcat会去执行注册在这个请求上的filter,然后再调用servlet,当执行完成Servlet皇后,还会执行filter后面的代码
image.png
<filter>
<filter-name>helloFilter</filter-name>
<filter-class>com.rl.filter.HelloFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>helloFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
生命周期:
init(FilterConfig): 服务器启动时创建filter实例,从此不再创建
doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
在每次访问目标资源时执行,需要放行,调用FilterChain的doFilter()方法,
destroy(), 会在服务器关闭时销毁Filter对象,
FilterConfig
功能与ServletConfig相似,与web.xml文件中的配置信息对应,下面是FilterConfig的功能介绍
ServletContext getServletContext(): 获取ServletContext的方法
String getFilterName(): 获取Filter的配置名称,与<filter-name>元素对应
String getInitParameter(String name) 获取Filter的初始化配置,与<init-param>元素对应
Enumeration getInitParameterNames() 获取所有初始化参数的名称
过滤器有四种拦截方式,REQUEST, FORWARD, INCLUDE,ERROR
REUQEST:直接访问目标资源时执行过滤器。包括:在地址栏中直接访问,表单提交,超链接,重定向等
FORWARD:转发访问执行过滤器。包括RequestDispatcher#forward()方法,<jsp:forward>标签都是转发访问
INCLUDE:包含访问执行过滤器。包括RequestDispatcher#include()方法,<jsp:include>标签
ERROR:当目标资源在web.xml中配置为<error-page>中时
//处理post请求乱码问题
request.setCharacterEncoding(this.encoder);
//post方式相应页面乱码处理
response.setCharacterEncoding(this.encoder);
response.setContentType("text/html;charset="+this.encoder);
网友评论