1.Filter的创建
定义一个类让其实现Filter接口
2.Filter的设置
在doFilter()方法中加入相应的拦截代码,加入了相应的拦截代码之后需要使用chain.doFilter(req,resp)让请求继续走
3.Filter的配置
在web.xml中进行配置
<filter>
<filter-name>TestFilter</filter-name>
<filter-class>org.itat.filter.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>TestFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
url-pattern表示要拦截哪些请求:/
·/* :表示拦截所有请求
·/01/1.jsp : 表示仅仅只对01/1.jsp文件进行拦截
·/01/* : 表示拦截01/这个文件夹中的所有信息
特别注意:/01/*.jsp这种方式是不允许的,只允许以上三种方式
4.使用过滤器解决字符编码
定义一个CharacterEncodingFilter,在doFilter中使用request.setCharacterEncoding(xxx);来解决
注意:当有多个Filter被定义的时候会每一个filter都执行,执行顺序按照web.xml中配置先后执行
为了让一些常量在配置文件中定义,可以使用
<filter>
<filter-name>CharacterFilter</filter-name>
<filter-class>org.itat.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>Char</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
init-param就是用来定义相应的初始化参数,需要在Filter的init中通过config来获取
@Override
public void init(FilterConfig config) throws ServletException {
charEncoding = config.getInitParameter("Char");//获取初始化参数
if(charEncoding==null||"".equals(charEncoding)) {
charEncoding = "UTF-8";
}
}
charEncoding需要在doFilter中使用,所以将charEncoding定义成成员变量。
request.setCharacterEncoding(charEncoding);
chain.doFilter(request,response);
使用过滤器根据正则表达式过滤访问地址
1、在初始化参数中传递一个正则表达式
<init-param>
<param-name>pattern</param-name>
<param-value>.*\.jsp|.*Servlet</param-value>
</init-param>
.*.jsp|.*Servlet表示匹配.jsp结尾和Servlet结尾的所有字符串
2、获取浏览器的访问地址
HttpServletRequest req = (HttpServletRequest)request;
String url = req.getRequestURI();//获取浏览器的访问地址
//参数中是ServletRequest,ServletRequest中没有getRequestURI方法,getRequetURL方法是在HttpServletRequest中,所以需要进行强制类型转换(HttpServletRequest req = (HttpServletRequest)request;)。
3、判断是否匹配
if(url.matches(pattern)) {
System.out.println(url);
System.out.println(url.matches(pattern));
request.setCharacterEncoding(charEncoding);//修改字符编码
}