• 哈尔滨市“拔钉子”严查露天烧烤 21家冒烟摊位将被依法处罚 2018-05-24
  • 新濠天地娱乐城官网 2018-05-24
  • “澳门368足球博彩公司”足球比分及时直播李国英主持召开省深化医药卫生体制改革领导小组会议 2018-05-23
  • 马来大选92岁前总理改写政治版图 60年来政党首轮替 2018-05-23
  • 科技创新技能挑战赛聚焦冬奥主题 2018-05-23
  • 泰国试管婴儿bnh医院技术怎么样,是最好的吗?—海口论坛 2018-05-23
  • 置业指南:买高层要注意这些问题 2018-05-22
  • い羛琩矪堵旧笴眏い瓣笴潦ㄆン 2018-05-22
  • 有力有序有效防范化解煤电产能过剩风险 2018-05-22
  • 美好生活的价值追求和实现路径-社会关注-理论频道-中工网 2018-05-21
  • 保罗亲手为自己圆梦 火箭勇士双双会师西部决赛 2018-05-21
  • Floating production, storage and offloading vessel delivered in Qingdao 2018-05-20
  • 汽車定位跟蹤官員意圖敲詐 追蹤器該怎麼管 2018-05-20
  • 工作队精准发力助力贫困村“摘帽” 2018-05-20
  • 中消协发布榨汁机比较试验结果 2018-05-20
  • 【jsp教程】JSP 过滤器

    栏目: JSP 发布于: 2014-11-25 13:53:10

    JSP 过滤器

    Servlet和JSP中的过滤器都是Java类,它们存在的目的如下:

    • 在请求访问后端资源时拦截它
    • 管理从服务器返回给客户端的响应

    下面列出了多种常用的过滤器类型:

    • 认证过滤器
    • 数据压缩过滤器
    • 加密过滤器
    • 触发资源访问事件的过滤器
    • 图像转换过滤器
    • 登录和验证过滤器
    • MIME类型链过滤器
    • 令牌过滤器
    • 转换XML内容的XSL/T过滤器

    过滤器将会被插入进web.xml文件中,然后映射servlet、JSP文件的名字,或URL模式。部署描述文件web.xml可以在 <Tomcat-installation-directory>\conf 目录下找到。

    当JSP容器启动网络应用程序时,它会创建每一个过滤器的实例,这些过滤器必须在部署描述文件web.xml中声明,并且按声明的顺序执行。


    Servlet过滤器方法

    一个过滤器就是一个Java类,它实现了javax.servlet.Filter 接口。javax.servlet.Filter接口定义了三个方法:

    序号 方法 &描述
    1 public void doFilter (ServletRequest, ServletResponse, FilterChain)

    每当 request/response要通过过滤链时容器会调用这个方法,因为客户端请求链尾的资源
    2 public void init(FilterConfig filterConfig)

    容器调用这个方法来表明一个过滤器被安置在服务中
    3 public void destroy()

    容器调用这个方法来表明一个过滤器正在从服务中移除

    JSP过滤器示例

    这个例子将会打印IP地址和每次访问JSP文件的日期时间。当然,这只是个简单的例子,让您了解一些简单的过滤器用法,但是可以使用这些概念来自行构造更复杂的程序。

    //  引入Java包
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.util.*;
     
    // 实现 Filter 类
    public class LogFilter implements Filter  {
       public void  init(FilterConfig config) 
                             throws ServletException{
          // 获取初始化参数
          String testParam = config.getInitParameter("test-param"); 
     
          //打印初始化参数
          System.out.println("Test Param: " + testParam); 
       }
       public void  doFilter(ServletRequest request, 
                     ServletResponse response,
                     FilterChain chain) 
                     throws java.io.IOException, ServletException {
     
          // 获取客户端ip地址  
          String ipAddress = request.getRemoteAddr();
     
          // 输出ip地址及当前时间
          System.out.println("IP "+ ipAddress + ", Time "
                                           + new Date().toString());
     
          // 传递请求道过滤器链
          chain.doFilter(request,response);
       }
       public void destroy( ){
          /* 在Filter实例在服务器上被移除前调用。*/
       }
    }
    

    编译LogFilter.java文件,然后将编译后的class文件放在<Tomcat安装目录>/webapps/ROOT/WEB-INF/classes目录下。


    web.xml文件中的JSP过滤器映射

    过滤器被定义,然后映射成一个URL或JSP文件名,与servlet被定义然后映射的方式差不多。在部署描述文件web.xml中,使用<filter>标签来进行过滤器映射:

    <filter>
       <filter-name>LogFilter</filter-name>
       <filter-class>LogFilter</filter-class>
       <init-param>
    	  <param-name>test-param</param-name>
    	  <param-value>Initialization Paramter</param-value>
       </init-param>
    </filter>
    <filter-mapping>
       <filter-name>LogFilter</filter-name>
       <url-pattern>/*</url-pattern>
    </filter-mapping>
    

    上述过滤器将会应用在所有servlet和JSP程序中,因为我们在配置中指定了" /*"。您也可以指定一个servlet或JSP路径,如果您只想要将过滤器应用在少数几个servlet或JSP程序中的话。

    现在,像平常一样访问servlet或JSP页面,您就会发现服务器日志中产生了关于此次访问的记录。您也可以使用Log4J记录器来把日志记录在其它文件中。


    使用多重过滤器

    您的网络应用程序可以定义很多不同的过滤器。现在,您定义了两个过滤器,AuthenFilter和LogFilter,其它的步骤与前面讲的一样,除非要创建一个不同的映射,就像下面这样:

    <filter>
       <filter-name>LogFilter</filter-name>
       <filter-class>LogFilter</filter-class>
       <init-param>
    	  <param-name>test-param</param-name>
    	  <param-value>Initialization Paramter</param-value>
       </init-param>
    </filter>
     
    <filter>
       <filter-name>AuthenFilter</filter-name>
       <filter-class>AuthenFilter</filter-class>
       <init-param>
    	  <param-name>test-param</param-name>
    	  <param-value>Initialization Paramter</param-value>
       </init-param>
    </filter>
     
    <filter-mapping>
       <filter-name>LogFilter</filter-name>
       <url-pattern>/*</url-pattern>
    </filter-mapping>
     
    <filter-mapping>
       <filter-name>AuthenFilter</filter-name>
       <url-pattern>/*</url-pattern>
    </filter-mapping>
    

    过滤器的应用顺序

    在web.xml中<filter>元素的映射顺序决定了容器应用这些过滤器的顺序。要反转应用的顺序,您只需要反转web.xml中<filter>元素的定义顺序就行了。

    比如,上面的例子会首先应用 LogFilter然后再应用AuthenFilter,但是下面这个例子将会反转应用的顺序:

    <filter-mapping>
       <filter-name>AuthenFilter</filter-name>
       <url-pattern>/*</url-pattern>
    </filter-mapping>
     
    <filter-mapping>
       <filter-name>LogFilter</filter-name>
       <url-pattern>/*</url-pattern>
    </filter-mapping>
    

    本文转载自:w3cschool
    本站文章除注明转载外,均为本站原创或编译?;队魏涡问降淖?,但请务必注明出处。
    转载请注明:文章转载自 七星彩票平台
    本文标题:【jsp教程】JSP 过滤器
    IT技术书籍推荐:
    UNIX环境高级编程(第3版)
    UNIX环境高级编程(第3版)
    史蒂文斯 (W.Richard Stevens) (作者), 拉戈 (Stephen A.Rago) (作者), 戚正伟 (译者), 张亚英 (译者), 尤晋元 (译者)
    本书是被誉为UNIX编程“圣经”的Advanced Programming in the UNIX Environment一书的第3版。在本书第2版出版后的8年中,UNIX行业发生了巨大的变化,特别是影响UNIX编程接口的有关标准变化很大。本书在保持前一版风格的基础上,根据最新的标准对内容进行了修订和增补,反映了最新的技术发展。书中除了介绍UNIX文件和目录、标准I/O库、系统数据文件和信息、进程环境、进程控制、进程关系、信号、线程、线程控制、守护进程、各种I/O、进程间通信、网络IPC、伪终端等方面的内容,还在此基础上介绍了众多应用实例,包括如何创建数据库函数库以及如何与网络打印机通信等。此外,还在附录中给出了函数原型和部分习题的答案。