Filter过滤器介绍

5 篇文章 0 订阅
4 篇文章 0 订阅

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);//修改字符编码
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值