spring filter lister servlet

https://blog.csdn.net/nacey5201/article/details/8547772

https://blog.csdn.net/xwl617756974/article/details/7451773

springboot 配置 Servlet、Filter、Listener

spring 加入了web作用域

    <context-param>
       <param-name>contextConfigLocation</param-name>
       <param-value>/WEB-INF/classes/webAllbean.xml</param-value>
    </context-param>
    <listener>
       <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>




   <listener>  
            <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>  
  </listener>  
    
   #  早期版本的web容器(Servlet2.4以前),那么你要使用一个javax.servlet.Filter的实现
   <filter>  
        <filter-name>requestContextFilter</filter-name>  
        <filter-class>org.springframework.web.filter.RequestContextFilter</filter-class>  
    </filter>  
    <filter-mapping>  
        <filter-name>requestContextFilter</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping>  

基于LocalThread将HTTP request对象绑定到为该请求提供服务的线程上。这使得具有request和session作用域的bean能够在后面的调用链中被访问到。

ContextLoaderListener实现ServletContextListener监听器接口,而ServletContextListener只负责监听Web容器的启动和关闭的事件。RequestContextFilter实现ServletRequestListener监听器接口,该监听器监听HTTP请求事件,Web服务器接收的每次请求都会通知该监听器。


listener -> filter -> servlet

加载顺序与它们在 web.xml 文件中的先后顺序无关

context-param用于向 ServletContext 提供键值对,即应用程序上下文信息。

加载顺序为:context-param -> listener -> filter -> servlet

对于拥有相同 filter-name 的 filter 和 filter-mapping 配置节而言,filter-mapping 必须出现在 filter 之后

web 容器启动时初始化每个 filter 时,是按照 filter 配置节出现的顺序来初始化的,当请求资源匹配多个 filter-mapping 时,filter 拦截资源是按照 filter-mapping 配置节出现的顺序来依次调用 doFilter() 方法的。

https://www.cnblogs.com/Kevin-mao/p/5664056.html
https://blog.csdn.net/J080624/article/details/80758614

Filter 过滤器

Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。

  它主要用于对用户请求进行预处理,也可以对HttpServletResponse 进行后处理。使用Filter 的完整流程:Filter 对用户请求进行预处理,接着将请求交给Servlet 进行处理并生成响应,最后Filter 再对服务器响应进行后处理。

  Filter功能:

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

2、如何实现拦截

  Filter接口中有一个doFilter方法,当开发人员编写好Filter,并配置对哪个web资源进行拦截后,WEB服务器每次在调用web资源的service方法之前,都会先调用一下filter的doFilter方法,因此,在该方法内编写代码可达到如下目的:

调用目标资源之前,让一段代码执行。
是否调用目标资源(即是否让用户访问web资源)。

  web服务器在调用doFilter方法时,会传递一个filterChain对象进来,filterChain对象是filter接口中最重要的一个对象,它也提供了一个doFilter方法,开发人员可以根据需求决定是否调用此方法,调用该方法,则web服务器就会调用web资源的service方法,即web资源就会被访问,否则web资源不会被访问。
  
  web服务器根据Filter在web.xml文件中的注册顺序,决定先调用哪个Filter
  
  https://www.cnblogs.com/CloverSH/p/4531492.html
  

listener

  
  ContextLoaderListener的作用就是启动Web容器时,自动装配ApplicationContext的配置信息。因为它实现了ServletContextListener这个接口,在web.xml配置这个监听器,启动容器时,就会默认执行它实现的方法。

  ContextLoaderListener如何查找ApplicationContext.xml的配置位置以及配置多个xml:如果在web.xml中不写任何参数配置信息,默认的路径是"/WEB-INF/applicationContext.xml",在WEB-INF目录下创建的xml文件的名称必须是applicationContext.xml(在MyEclipse中把xml文件放置在src目录下)。如果是要自定义文件名可以在web.xml里加入contextConfigLocation这个context参数。
 
  

  • 利用HttpSessionListener统计最多在线用户人数

  • Spring使用Log4jConfigListener配置Log4j日志

    org.springframework.web.util.Log4jConfigListener

    动态的改变记录级别和策略,不需要重启Web应用。
    把log文件定在 /WEB-INF/logs/ 而不需要写绝对路径。因为系统把web目录的路径压入一个叫webapp.root的系统变量。这样写log文件路径时不用写绝对路径了。
    可以把log4j.properties和其他properties一起放在/WEB-INF/ ,而不是Class-Path。
    设置log4jRefreshInterval时间,开一条watchdog线程每隔段时间扫描一下配置文件的变化。

    spring默认会以webapp.root为key保存webapp的根路径
    #log4j.appender.logfile.File=${webapp.root}/logs/sys.log
    
    <!--用于获取webapp根路径,普通类中使用System.getProperty("project.root")获取-->
    <context-param>
      <param-name>webAppRootKey</param-name>
      <param-value>project.root</param-value><!-- 用于定位log文件输出位置在web应用根目录下,log4j配置文件中写输出位置:log4j.appender.FILE.File=${project.root}/logs/project.log -->
    </context-param>
    <listener>
      <listener-class>org.springframework.web.util.WebAppRootListener</listener-class>
    </listener>
    

https://www.cnblogs.com/CloverSH/p/4531492.html

猜你喜欢

转载自www.cnblogs.com/antball/p/9993420.html