
java基础-filter
我们先看看没有filter的时候,整个web客户端-服务端的一个流程。
接下来我们再看看引入了filter之后的Uml图。尝试分析这两者之间的差别。
filter从哪里来?
是在servlet2.3规范中加入的。
filter的生命周期?
同servlet的生命周期相同。
filter的执行过程?
看到这里有没有想起我们的数据库结构关于栈的描述,filter和栈一样,也是按照先进后出的顺序。
filter的实质(个人之言)
现阶段在我看来,filter其实是对http的请求进行过滤,所以有时候完全可以实现页面拦截的功能。它是一种声明式的服务,具有可插拔的能力。
应用
1.继承filter
package com.bjpowernode.drp.util.filter; 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; /** * 采用Filter统一处理字符集 * @author Administrator * */ public class CharsetEncodingFilter implements Filter { private String encoding; public void destroy() { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.print("刚刚进来"); //设置字符集 request.setCharacterEncoding("GB18030"); //继续执行 chain.doFilter(request, response); System.out.print("好了,结束了"); } /** * @param filterConfig可以用来读取filter里头的参数 */ public void init(FilterConfig filterConfig) throws ServletException { this.encoding = filterConfig.getInitParameter("encoding"); System.out.print("encoding"+encoding); } }
2.在web.xml文件中配置
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name></display-name> <!-- 告诉tomcat去找那个filter --> <filter> <filter-name>CharsetEncodingFilter</filter-name> <filter-class>com.bjpowernode.drp.util.filter.CharsetEncodingFilter</filter-class> <!-- 在filter里头传入参数 --> <init-param> <param-name>encoding</param-name> <param-value>GBK</param-value> </init-param> </filter> <!-- 告诉哪个filter对哪些个servlet起作用 --> <filter-mapping> <filter-name>CharsetEncodingFilter</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping> </web-app>
3.然后在页面加载的时候,就可以看到filter的效果了。