学习笔记-轻量级Java EE:Servlet之Filter

Filter主要作用是拦截用户的请求,对其请求进行预处理,然后将请求交给Servlet进行处理并生成响应,再由Filter对服务器响应进行后处理。

1.创建Filter类

   创建 Filter 必须实现 javax.servlet.Filter 接口,在该接口中定义了如下三个方法。
      void init(FilterConfig config):用于完成 Filter 的初始化。
      void destroy():用于 Filter 销毁前,完成某些资源的回收。
      void doFilter(ServletRequest request,ServletResponse response,FilterChain chain):实现过滤功能,该方法就是对每个请求及响应增加的额外处理。

 在实现的Filter类doFilter()方法中在调用了chain.doFilter()方法之前,即对用户请求进行预处理;执行该方法之后,即对服务器响应进行后处理。当然,如在预处理时,发现不合格,亦可直接重定向或转发等操作而不必执行该方法,根据情况而定。

2.配置Filter类

   Filter配置与Servlet相似,一样有俩种方式可实现:

   (1)在 Filter 类中通过 Annotation 进行配置。

   (2)在 web.xml 文件中通过配置文件进行配置。

<!-- 定义Filter -->
<filter>
<!-- Filter的名字,相当于指定@WebFilter
的filterName属性 -->
<filter-name>log</filter-name>
<!-- Filter的实现类 -->
<filter-class>lee.LogFilter</filter-class>
</filter>
<!-- 定义Filter拦截的URL地址 -->
<filter-mapping>
<!-- Filter的名字 -->
<filter-name>log</filter-name>
<!-- Filter负责拦截的URL,相当于指定@WebFilter的urlPatterns属性 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
 Filter使用最多的是置放一些通用代码,或者进行一些在达到处理之前进行一系列的验证等。
3.使用URL Rewrite实现网站的伪静态

  搜索引擎一般都会优先收录html的页面,因此可以将动态页面*.jsp等动态URL伪装成静态的html页面;

  对于web应用来说,可以通过Filter拦截所有*.html请求,然后通过规则,将请求转发forward到实际的*.jsp页面即可。 URL Rewrite开源项目正式使用这种思路。

  可在web.xml中配置启用URL Rewrite:

<!-- 配置Url Rewrite的Filter -->
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>
<!-- 配置Url Rewrite的Filter拦截所有请求 -->
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

然后在Web-inf路径下增加urlrewrite.xml文件,该文件定义其伪静态映射规则,规则基于正则表达式。

例子清单:

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.2//EN"
"http://tuckey.org/res/dtds/urlrewrite3.2.dtd">
<urlrewrite>
<rule>
<!-- 所有配置如下正则表达式的请求 -->
<from>/test-(\w*).html</from>
<!-- 将被forward到如下jsp页面,其中$1代表上面第一个正则表达式所匹配的字符串 -->
<to type="froward">/test.jsp?username=$1</to>
</rule>
</urlrewrite>
这样,地址栏将保留请求的静态html地址,而不是动态的jsp等动态页面地址。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值