功能介绍
filter简单来说可以改变用户操作界面请求的数据或界面返回的数据。改变Servlet的request和response。
大家可以可以看一下图可能就更能明白了。
说明:
1. 在servlet被调用之前截获;
2. 在servlet被调用之前检查servlet request;
3. 根据需要修改request头和request数据;
4. 根据需要修改response头和response数据;
5. 在servlet被调用之后截获.
实际应用
就拿大家经常遇到的一个问题,就是如果我们不设置编码格式的时候往往输入汉字存入到数据库会是乱码的格
式,所以我们经常设置编码格式在JSP调用添加,修改等操作时。所以我们就利用Filter过滤器,在调用JSP之
前先设置一下编码格式对所有的JSP页面起作用。
1.建立一个java类实现javax.servlet.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统一处理字符集
* 作者: 宋笑
* 日期: 2015-10-22 下午06:32:06
*
*/
public class CharsetEncodingFilter implements Filter {
//定义一个变量存入编码格式
private String endcoding;
//销毁
@Override
public void destroy() {
}
//修改request,response操作,把编码格式改为GBK
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
//开始进入Filter------设置字符集
request.setCharacterEncoding(endcoding);
//设置继续往JSP中走------结束filter
chain.doFilter(request, response);
}
//用来读取配置文件中设置的参数
@Override
public void init(FilterConfig filterConfig) throws ServletException {
//获取web.xml里面配置的字符集格式参数
this.endcoding = filterConfig.getInitParameter("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">
<filter>
<!-- 设置filter的类名 -->
<filter-name>CharsetEncodingFilter</filter-name>
<!-- 设置filter的包名 -->
<filter-class>com.bjpowernode.drp.util.filter.CharsetEncodingFilter</filter-class>
<!-- 设置filter里面的参数 用CharsetEncodingFilter类里面的init方法取-->
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<!-- 配置filter对哪些Servlet或jsp起作用 -->
<filter-mapping>
<filter-name>CharsetEncodingFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
</web-app>
其中。配置filter对哪些Servlet或JSP起作用(url-pattern)有好多种方式。
( 1 )精确匹配,不用任何修饰符,如:
<filter-mapping>
<filter-name>CharsetEncodingFilter</filter-name>
<url-pattern>/user_maint.jsp</url-pattern>
</filter-mapping>
这样就可以精确到哪个jsp上。
(2)扩展匹配,由星号“*”和扩展名组成,如:
<filter-mapping>
<filter-name>CharsetEncodingFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
对所有的以jsp为后缀的起作用。
(
3
)路径前缀匹配,包含一个目录和一个
/*
<filter-mapping>
<filter-name>CharsetEncodingFilter</filter-name>
<url-pattern>/sysmgr/*</url-pattern>
</filter-mapping>
对sysmg这个文件夹下的jsp起作用。
(4)全部匹配,一般使用/*
<filter-mapping>
<filter-name>CharsetEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
对所有的都匹配。
结束语
Filter也是一种面向切面编程,降低了与业务之间的耦合性,主要用于解决中文乱码,用户权限验证等等问题。。还有待研究。