zoukankan      html  css  js  c++  java
  • Servlet、Filter、Listener

    1.Servlet

    1.1servlet接口

    All Known Implementing Classes:GenericServletHttpServlet

    GenericServlet:与协议无关的Servlet

    HttpServlet:http协议相关的servlet,我们一般开发servlet都去继承这个servlet

    Servlet默认是单例,多线程方式来工作的。因此Servlet是线程非安全的。那么,如何开发线程安全的Servlet,避免使用实例变量

    1.2 Servlet生命周期

    加载和实例化:Servlet容器负责加载和实例化Servlet。加载和实例化可以发生在容器启动时,或者延迟初始化直到容器决定有请求需要处理时。

    初始化

          容器通过调用Servlet实例的init方法完成初始化,主要是为了让Servlet对象在处理客户端请求前可以完成一些初始化的工作,例如:建立数据库连接、获取配置信息等。对于每一个Servlet实例,init()方法只能被调用一次。

          init(ServletConfig config)

    请求处理

        容器调用service()方法来处理客户端请求。要注意,在Servlet方法被容器调用之前,必须确保init()方法正确完成。容器会构造一个表示客户端请求信息的请求对象(类型为ServletRequest)和一个用于对客户端进行响应的响应对象(类型为ServletResponse)作为参数传递给service()方法。在service方法中,Servlet对象通过ServletRequest对象得到客户端的相关信息和请求信息,在对请求进行处理后,调用ServletResponse对象的方法设置响应信息。

           service(ServletRequest req, ServletResponse res)

    终止

      servlet容器确定从服务中移除servlet时,可以通过调用destroy()方法将释放servlet占用的任何资源和保存的持久化状态等。调用destroy方法之前必须保证当前所有正在执行service方法的线程执行完成或者超时; 
    之后servlet实例可以被垃圾回收,当然什么时候回收并不确定,因此destroy方法是十分必要的。

            destroy()

    2.Filter

      Filter,过滤器,能够对目标资源的请求和响应进行截取。这里的目标资源可以是静态资源html文件,也可以是动态资源jsp。

    Servlet过滤器在Servlet被调用之前检查Request对象,修改Request Header和Request内容;在Servlet被调用之后检查Response对象,修改Response Header和Response内容。

    过滤器的核心概念是包装请求或响应。

    Filter的功能是:

    在HttpServletRequest到达 Servlet 之前,拦截客户的HttpServletRequest 。根据需要检查HttpServletRequest,也可以修改HttpServletRequest 头和数据。
    在HttpServletResponse到达客户端之前,拦截HttpServletResponse 。根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和数据。

    2.1 过滤器的应用场景

           过滤器常用于权限控制与验证、数据压缩过滤、加密过滤、资源访问触发事件过滤、日记记录

    2.2 Filter生命周期

    实例化:web容器对其实例化

    初始化:实例化完成之后,马上进行初始化工作,Web容器调用此方法一次。init(FilterConfig filterConfig)

    过滤: doFilter(ServletRequest request,ServletResponse response,FilterChain chain)

    销毁:释放过滤器占用的资源  destroy()

     2.3 Filter执行流程

    2.4 一个Filter开发例子

       开发人员编写一个实现Filter接口的过滤器类,EncodingFilter

       在web.xml文件中对编写的filter类进行注册,并设置它所能拦截的资源。

    <!-- 编码过滤器 -->    
        <filter>    
            <filter-name>setCharacterEncoding</filter-name>    
            <filter-class>com.weijia.filterservlet.EncodingFilter</filter-class>    
            <init-param>    
                <param-name>encoding</param-name>    
                <param-value>utf-8</param-value>    
            </init-param>    
        </filter>    
        <filter-mapping>    
            <filter-name>setCharacterEncoding</filter-name>    
            <url-pattern>/*</url-pattern>    
        </filter-mapping>    

     3 Listener监听器

    3.1 概述

     事件监听器是在部署web应用时,实例化并注册到web容器中的。

    也就是servlet事件监听器的注册和调用过程都是由web容器自动完成的,当发生被监听对象被创建,修改,销毁等事件时,web容器将调用与之相关的servlet事件监听器对象的相应方法,开发人员在这些方法中编写的事件处理代码即被执行。

    3.2 监听器类型

    Servlet事件监听器支持在ServletContext、HttpSession和ServletRequest状态改变时进行事件通知。

    Servlet上下文监听器用来管理应用的资源或JVM级别持有的状态。

    Http会话监听器用来管理从相同客户端或用户进入web应用的一系列请求关联的状态或资源。

    Servlet请求监听器用来管理整个Servlet生命周期的状态

    异步监听器是用来管理异步事件,例如超时和完成异步处理

    servlet事件监听器的注册和调用过程都是由web容器自动完成的,当发生被监听对象被创建,修改,销毁等事件时,web容器将调用与之相关的servlet事件监听器对象的相应方法,开发人员在这些方法中编写的事件处理代码即被执行。

     

                          

  • 相关阅读:
    PHP的注释规范
    IP地址与,域名,DNS服务器,端口号的联系与概念
    转: CentOS上安装LAMP之第一步:Apache环境及安装过程报错解决方案(纯净系统环境)
    转:VMware中CentOS配置静态IP进行网络访问(NAT方式和桥接模式)
    虚拟主机详细的配置
    PHP操作MySQL
    【优化】EXPLAIN--type
    数据库范式
    【优化】碎片OPTIMIZE
    【原理】原理与优化(二)
  • 原文地址:https://www.cnblogs.com/whx7762/p/7744012.html
Copyright © 2011-2022 走看看