Chinaunix

标题: JSP中Filter的简单应用 [打印本页]

作者: aoxer    时间: 2006-12-30 09:42
标题: JSP中Filter的简单应用
   Servlet API的2.3版本中最重要的一个新功能就是能够为servlet和JSP页面定义过滤器。过滤器提供了某些早期服务器所支持的非标准“servlet链接”的一种功能强大且标准的替代品。
   过滤器是一个程序,它先于与之相关的servlet或JSP页面运行在服务器上。过滤器可附加到一个或多个servlet或JSP页面上,并且可以检查进入这些资源的请求信息。在这之后,过滤器可以作如下的选择:
  • 以常规的方式调用资源(即,调用servlet或JSP页面)。
  • 利用修改过的请求信息调用资源。
  • 调用资源,但在发送响应到客户机前对其进行修改。
  • 阻止该资源调用,代之以转到其他的资源,返回一个特定的状态代码或生成替换输出。

    filter-mapping元素
    filter-mapping元素位于web.xml文件中filter元素之后serlvet元素之前。它包含如下三个可能的子元素::
    l filter-name 这个必需的元素必须与用filter元素声明时给予过滤器的名称相匹配。
    l url-pattern 此元素声明一个以斜杠(/)开始的模式,它指定过滤器应用的URL。所有filter-mapping元素中必须提供url-pattern或servlet-name。但不能对单个filter-mapping元素提供多个url-pattern元素项。如果希望过滤器适用于多个模式,可重复整个filter-mapping元素。
    l servlet-name 此元素给出一个名称,此名称必须与利用servlet元素给予servlet或JSP页面的名称相匹配。不能给单个filter-mapping元素提供多个servlet-name元素项。如果希望过滤器适合于多个servlet名,可重复这个filter-mapping元素。
    基于以上的原理,在项目中遇到这样一个问题,用户只有登陆之后才能浏览resource目录下的资源,而这些resource的地址都是静态地址,这时候就用到了过滤器,
    public void doFilter(ServletRequest req, ServletResponse res,
       FilterChain chain) throws IOException, ServletException {
       HttpServletRequest request = (HttpServletRequest) req;
       HttpServletResponse response = (HttpServletResponse) res;
       HttpSession session=request.getSession();
       ServletContext application=session.getServletContext();
       
          if(session.getAttribute("userSession")==null)
          {
           response.sendRedirect("error/priv_error.jsp");
           return;
          }
          else
          {
           chain.doFilter(request, response);
          }
    }
    web.xml中如下配置:
          PrivFilter
          com.myPriv.filter.PrivFilter
       
        PrivFilter
        /resource/*
    在过滤器程序中判断到resource目录下的请求的用户session是否为空,如果空的话就跳转出去;


    本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/25667/showart_223483.html




    欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2