interface Filter继承过滤器接口(implements Filter)
三种方法:构造函数:服务器启动时候创建,init():服务器启动时候创建,
获得:getInitParameter(String name);
FilterConfig:配置参数
FilterChain:过滤器链参数:一个一个过滤形成一个执行链
如果post和get提交都有效,需要创建代理对象
三种方法:构造函数:服务器启动时候创建,init():服务器启动时候创建,
doFilter(...):访问的时候执行,destroy():服务器重启或者关闭
doFilter(...){
//放行
System.out.println("servlet处理处理之前");
chain.doFilter(request,response);
System.out.println("servlet处理完后回到过滤器");
}
如果有多个过滤器,则按照xml里面的顺序执行
获得:getInitParameter(String name);
xml里面配置:
<filter>
<filter-name></filter-name>
<filter-class></filter-class>
</filter>
<filter-mapping>
<filter-name></filter-name>
<url-pattern>/*</url-pattern>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter-mapping>
FilterConfig:配置参数
<filter>
<filter-name></filter-name>
<filter-class></filter-class>
</filter>
FilterChain:过滤器链参数:一个一个过滤形成一个执行链
配置的时候拦截指定资源:
<filter-mapping>
<dispatcher>REQUEST</dispatcher>//默认
<dispatcher>FORWARD</dispatcher>//拦截转发
<dispatcher>INCLUDE</dispatcher>//拦截包含:RequestDispatcher.include(/page.jsp)
<dispatcher>ERROR</dispatcher>//拦截声明式异常信息
</filter-mapping>
声明式异常
<error-page>
<error-code>404</error-code>
<exception-type></exception-type>
<location></location>
</error-page>
编码处理:
request.setCharacterEncoding("UTF-8"); //post提交有效
response.setContentType("text/html;charset=UTF-8");
Filter里面的是ServletRequest,Servlet里面是HttpServletRequest
如果Filter里面要调用request的其他方法,可以转型,response同样
HttpServletRequest request=(HttpServletRequest)req;
HttpServletResponse response=(HttpServletResponse)res;
如果post和get提交都有效,需要创建代理对象
Proxy.newProxyInstance(
request.getClass().getClassLoader(),//指定当前使用的累加载器
new Class[]{HttpServletRequest.class},//对目标对象的接口类型
HttpServletRequest http=(强转)new InvocationHandler() {
<span style="white-space:pre"> </span>@Override
<span style="white-space:pre"> </span>public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object returnValue=null;
String meth=request.getName();
if("getParameter".equals(meth)){
String value=request.getParameter(args[0].toString());
String methname=request.getMthod();
if("GET".equals(methname)){
if(value!=null && !"".equals(value.trim()))
value=new String(value.getBytes("ISO8859-1"),"UTF-9");
}
return value;
}else{
returnValue=meth.invoke(request,args);
}
return returnValue;
}
};