web.xml配置详解之监听器,过滤器

来源:互联网 发布:sql查询分析器区别 编辑:程序博客网 时间:2024/05/18 22:46
  • 一,context-param
  •  格式定义:
[html] view plain copy
  1. <context-param>  
  2. <param-name>contextConfigLocation</param-name>  
  3. <param-value>contextConfigLocationValue></param-value>  
  4. </context-param>  

作用:该元素用来声明应用范围(整个WEB项目)内的上下文初始化参数。

param-name 设定上下文的参数名称。必须是唯一名称

param-value 设定的参数名称的值

  • 初始化过程:
    1. 在启动Web项目时,容器(比如Tomcat)会读web.xml配置文件中的两个节点<listener>和<contex-param>。
    2. 接着容器会创建一个ServletContext(上下文),应用范围内即整个WEB项目都能使用这个上下文。
    3. 接着容器会将读取到<context-param>转化为键值对,并交给ServletContext。
    4. 容器创建<listener></listener>中的类实例,即创建监听(备注:listener定义的类可以是自定义的类但必须需要继承ServletContextListener)。
    5. 在监听的类中会有一个contextInitialized(ServletContextEvent event)初始化方法,在这个方法中可以通过event.getServletContext().getInitParameter("contextConfigLocation") 来得到context-param 设定的值。在这个类中还必须有一个contextDestroyed(ServletContextEvent event) 销毁方法.用于关闭应用前释放资源,比如说数据库连接的关闭。
    6. 得到这个context-param的值之后,你就可以做一些操作了.注意,这个时候你的WEB项目还没有完全启动完成.这个动作会比所有的Servlet都要早。
    7. 由上面的初始化过程可知容器对于web.xml的加载过程是context-param >> listener  >> fileter  >> servlet

      •  如何使用
      1. 页面中

        ${initParam.contextConfigLocation}

      2. Servlet中
        String paramValue=getServletContext().getInitParameter("contextConfigLocation")

      1. 二,监听器
        1. <listener>
          <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
          </listener>
        2.  

      2. <!-- 监听器的配置:监听器配置完以后,应用系统在启动的时候就会开启这些监听器。  
      3.   
      4.     监听器的理解:监听器好比一个卫兵,卫兵一直站在那里等待长官的命令,当卫兵收到长官的命令以后,立即执行  
      5.   
      6.     之前已经协定好的事件。  
      7.   
      8.     java中的监听器,监听应用的事件,具体有什么事件,以及对每个事件的处理方式都在类中定义了,  
      9.   
      10.     所以,监听器不需要参数、不具有返回值只是一味的等待指令然后执行既定的名利,也就是执行相应的操作,  
      11.   
      12.     也就是说,监听器一旦写完,只是拿过来用就可以,没有方法,没有get set,没有参数,只使用其他什么都没有。  
      13.   
      14.     还是不大理解 以后再了解了解  
      15.   
      16.  -->  
      17.   
      18.     <listener>  
      19.   
      20.        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
      21.   
      22.        <!--使用spring的上下文加载监听器:可能的作用是:在web应用加载系统应用资源文件,也就是加载那些xml文件的时候,  
      23.   
      24.        会建立一些监听器。譬如监听xml文件内容的变化  
      25.   
      26.          -->  
      27.   
      28.     </listener>  
      29.   
      30.     <listener>  
      31.   
      32.         <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>  
      33.   
      34.        <!-- 实例化一个spring的关于请求的上下文的监听器 -->  
      35.   
      36.     </listener>  
      37.   
      38.     <listener>  
      39.   
      40.        <listener-class>org.hdht.commonweb.listener.MyServletContextListener</listener-class>  
      41.   
      42.        <!-- 实例化一个自定义的监听器。监听器主要代码  
      43.   
      44. public class MyServletContextListener implements ServletContextListener {  
      45.   
      46.     public void contextDestroyed(ServletContextEvent arg0) {  
      47.   
      48.     }  
      49.   
      50.     public void contextInitialized(ServletContextEvent arg0) {  
      51.   
      52.        try {  
      53.   
      54.            // 初始化日志处理器  
      55.   
      56.            AppLogService.init();//初始化系统用到的变量,主要是静态变量。  
      57.   
      58.            System.out.println("INFO:数据初始化完毕");//djflag  
      59.   
      60.              
      61.   
      62.        } catch (Exception e) {  
      63.   
      64.            AppLogService.error("系统初始化错误!",e);  
      65.   
      66.        }  
      67.   
      68.     }  
      69.   
      70. }  
      71.   
      72. 这是一个继承了服务器上下文监听器接口的监听器,这个监听器主要有两个必须实现的方法:  
      73.   
      74.     contextInitialized:当web服务器启动时执行的方法,该方法主要用来初始化系统的变量,多半是静态变量。   
      75.   
      76.     contextDestroyed:当web服务器关闭的时候调用的方法,主要是销毁一些内存变量,释放资源。  
      77.   
      78.         -->  
      79.   
      80.     </listener>  
      81.   
      82. 三,过滤器
      83. <filter>  
      84.   
      85.        <filter-name>headerFilter</filter-name>  
      86.   
      87.        <!-- 声明一个过滤器 名字叫:headerFilter 顾名思义是用来过滤文件头部的 -->  
      88.   
      89.        <filter-class>org.hdht.commonweb.filter.HeaderFilter</filter-class>  
      90.   
      91.        <!-- 过滤器的实例化类是自定义的过滤器:关键代码:  
      92.   
      93. public class HeaderFilter implements Filter {  
      94.   
      95.     public void init(FilterConfig arg0) throws ServletException {  
      96.   
      97.     }  
      98.   
      99.     public void doFilter(ServletRequest req, ServletResponse res,  
      100.   
      101.            FilterChain chain) throws IOException, ServletException {  
      102.   
      103.        HttpServletRequest request = (HttpServletRequest) req;  
      104.   
      105.        HttpServletResponse response = (HttpServletResponse) res;  
      106.   
      107.        response.setHeader("Pragma", "no-cache");  
      108.   
      109.        response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");  
      110.   
      111.        response.setHeader("Expires", "-1");  
      112.   
      113.        chain.doFilter(req, res);  
      114.   
      115.     }  
      116.   
      117.     public void destroy() {  
      118.   
      119.   }  
      120.   
      121. }        
      122.   
      123.     通过上边filter的配置:我们配置了一个自定义的过滤器,过滤器的名字是headerFilter,实例化类似自定义的类:HearderFilter,该过滤器的主要作用是对设置页面不采用缓存。  
      124.   
      125.  -->  
      126.   
      127.     </filter>  
      128.   
      129.     <filter-mapping>  
      130.   
      131.        <filter-name>headerFilter</filter-name>  
      132.   
      133.        <!-- 过滤器映射名称 -->  
      134.   
      135.        <url-pattern>*.jsp</url-pattern>  
      136.   
      137.        <!-- 过滤器映射文件:所有的jsp文件。 -->  
      138.   
      139.     </filter-mapping>  
      140.   
      141.     <!-- 通过上边的ffilter-mapping的配置: 我们将过滤器headerFilter映射到所有的jsp文件。  
      142.   
      143. 这样所有的jsp文件的头部就都会设置不适用缓存处理页面。这个过滤器主要用于经常和数据库有交互的页面中。-->  
      144.   
      145.   
      146.     <!-- 权限过滤器:判断用户是否登录的过滤器 -->  
      147.   
      148.     <filter>  
      149.   
      150.       <filter-name>uimfilter</filter-name>  
      151.   
      152.       <!--声明一个过滤器的:uimfilter 主要的作用是检测用户是否登录 -->  
      153.   
      154.       <filter-class>org.hdht.commonweb.filter.PermissionFilter</filter-class>  
      155.   
      156.       <!-- uimfilter过滤器的实例化类 是自定义的过滤器类  
      157.   
      158.         java代码主要是对session进行判断,判断表示用户登录的session变量是否存在,如果不存在就重定向到登陆界面。  
      159.   
      160.       通过上边filter的配置:我们定义了一个名字叫做uimfilter的权限过滤器,这个过滤器的实例化类是自定义的java类,  
      161.   
      162.       主要对用户是否登录做出判断,并根据判断结果作相应的处理:继续操作还是重定向登录  
      163.   
      164.        -->  
      165.   
      166.     </filter>  
      167.   
      168.     <filter-mapping>  
      169.   
      170.       <filter-name>uimfilter</filter-name>  
      171.   
      172.       <url-pattern>*.jsp</url-pattern>  
      173.   
      174.       <!-- 将权限过滤器映射给所有的jsp文件 -->  
      175.   
      176.     </filter-mapping>  
      177.   
      178.     <filter-mapping>  
      179.   
      180.       <filter-name>uimfilter</filter-name>  
      181.   
      182.       <url-pattern>/dwr/*</url-pattern>  
      183.   
      184.       <!-- 将权限过滤器映射给dwr包内的所有文件 -->  
      185.   
      186.     </filter-mapping>  
      187.   
      188.     <filter-mapping>  
      189.   
      190.       <filter-name>uimfilter</filter-name>  
      191.   
      192.       <url-pattern>*.do</url-pattern>  
      193.   
      194.       <!-- 将权限过滤器映射给所有的.do文件 -->  
      195.   
      196.     </filter-mapping>  
      197.   
      198.     <!-- 通过上边filter-mapping的配置:我们将uimfilter过滤器映射给所有的jsp文件,dwr包内的所有文件爱你以及.do文件  
      199.   
      200.     这样,当用户进入到jsp文件或者调用dwr或者有action的操作的时候,系统就会对用户是否登录进行判断。  
      201.   
      202.      -->  
      203.   
      204.   
      205.   
      206.     <!-- 防止出现 Session关闭异常的 过滤器  -->  
      207.   
      208.   
      209.     <filter>  
      210.   
      211.        <filter-name>hibernateFilter</filter-name>  
      212.   
      213.        <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>  
      214.   
      215.     </filter>  
      216.   
      217.     <filter-mapping>  
      218.   
      219.        <filter-name>hibernateFilter</filter-name>  
      220.   
      221.        <url-pattern>/*</url-pattern>  
      222.   
      223.     </filter-mapping>  
      224.   
      225.   
      226.     <!-- Strtus2.0 控制过滤器  -->  
      227.   
      228.     <filter>  
      229.   
      230.        <filter-name>struts</filter-name>  
      231.   
      232.        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>  
      233.   
      234.     </filter>  
      235.   
      236.     <filter-mapping>  
      237.   
      238.        <filter-name>struts</filter-name>  
      239.   
      240.        <url-pattern>/business/*</url-pattern>  
      241.   
      242.        <url-pattern>/common/*</url-pattern>  
      243.   
      244.        <url-pattern>/system/*</url-pattern>  
      245.   
      246.        <url-pattern>/login.jsp</url-pattern>  
      247.   
      248.        <url-pattern>/loginback.jsp</url-pattern>  
      249.   
      250.        <url-pattern>/main.jsp</url-pattern>  
      251.   
      252.        <url-pattern>/index.jsp</url-pattern>  
      253.   
      254.        <url-pattern>*.do</url-pattern>  
      255.   
      256.     </filter-mapping>  

       声明!此博客为整理所得


原创粉丝点击