filter用法

来源:互联网 发布:如何投诉广电网络 编辑:程序博客网 时间:2024/06/18 08:10

Filter功能一般用于:

1.字符编码转换

2.session管理

Filter好比一个门卫过滤进来的人。而且在实现Filter接口的类的dofilter方法中,一定要执行chain.dofilter(request,response)才能继续执行。例如在web.xml设置filter-mapping中的url-pattern为/admin/*,则表明访问该工程下的admin目录下的代码才会执行设置好的filter实现类,执行别的页面则不执行。

根据filter功能1字符编码转换功能:

比如:建立一个带default表单的html页面(charset=UTF-8),建立个LoginServlet的servlet页面,从login.html传递到LoginServlet的username参数名"张三",由于html页面charset=utf-8,request读不到汉字,结果为乱码。修改方法:html修改charset=gbk,request.setCharacterEncoding("gbk"),response.setCharacterEncoding("gbk")。

      或者更为简便的方法是使用Filter,代码如下

public void doFilter(ServletRequest request, ServletResponse response,
   FilterChain chain) throws IOException, ServletException {
  // TODO Auto-generated method stub
  request.setCharacterEncoding("gbk");
  response.setCharacterEncoding("gbk");
  chain.doFilter(request, response);
  
 }

在web.xml中添加

<filter>
   <filter-name>ef</filter-name>
   <filter-class>EncodingFilter</filter-class>
  </filter>
  <filter-mapping>
   
   <filter-name>ef</filter-name>
   <url-pattern>/*</url-pattern>

而页面的字符集编码都不用管了。

Filter第二个功能是session管理:

比如:工程下webroot包含一个pages文件夹里含有业务页面,webroot根目录下还有一个Login.jsp,则需要设置filter过滤pages文件夹中的页面,可以设置sessionfilter类来判别每个页面是否在session中是否存有用户名,如果没有则跳转到Login.jsp并提示下您没有输入用户名。如果有则继续执行。另外要注意的是,在dofilter类中的参数是servletrequest 和servletresponse。一般我们要用到的session是从httpservletrequest获取到的,所以必须要把dofilter的servletrequest转型

0 0
原创粉丝点击