spring中怎么实现过滤器和监听器?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring中怎么实现过滤器和监听器?相关的知识,希望对你有一定的参考价值。

麻烦说具体点,最好有例子,谢谢大家~~

1、延迟加载过滤器

    Hibernate 允许对关联对象、属性进行延迟加载,但是必须保证延迟加载的操作限于同一个 Hibernate Session 范围之内进行。如果 Service 层返回一个启用了延迟加载功能的领域对象给 Web 层,当 Web 层访问到那些需要延迟加载的数据时,由于加载领域对象的 Hibernate Session 已经关闭,这些导致延迟加载数据的访问异常。

    Spring 为此专门提供了一个 OpenSessionInViewFilter 过滤器,它的主要功能是使每个请求过程绑定一个 Hibernate Session,即使最初的事务已经完成了,也可以在 Web 层进行延迟加载的操作。

<filter> 
    <filter-name>hibernateFilter</filter-name> 
    <filter-class> 
    org.springframework.orm.hibernate3.support.OpenSessionInViewFilter 
    </filter-class> 
 </filter> 
 <filter-mapping> 
    <filter-name>hibernateFilter</filter-name> 
    <url-pattern>*.html</url-pattern> 
 </filter-mapping>

2、乱码过滤器

对post乱码的处理,如下

<filter> 
    <filter-name>encodingFilter</filter-name> 
    <filter-class> 
        org.springframework.web.filter.CharacterEncodingFilter ① Spring 编辑过滤器
    </filter-class> 
    <init-param> ② 编码方式
        <param-name>encoding</param-name> 
        <param-value>UTF-8</param-value> 
    </init-param> 
    <init-param> ③ 强制进行编码转换
        <param-name>forceEncoding</param-name> 
        <param-value>true</param-value> 
    </init-param> 
    </filter> 
    <filter-mapping> ② 过滤器的匹配 URL 
        <filter-name>encodingFilter</filter-name> 
        <url-pattern>*.html</url-pattern> 
    </filter-mapping>

3、请求跟踪日志过滤器

    程度调试者可以详细地查看到有哪些请求被调用,请求的参数是什么,请求是否正确返回等信息,需要将log4j设为debug

    org.springframework.web.filter.ServletContextRequestLoggingFilter: 该过滤器将请求的 URI 记录到 Common 日志中


4、WebAppRootListener

    可以将 Web 应用根目录添加到系统参数中,对应的属性名可以通过名为“webAppRootKey”的 Servlet 上下文参数指定,默认为“webapp.root”,配置如下

<context-param> 
    <param-name>webAppRootKey</param-name> 
    <param-value>baobaotao.root</param-value> ① Web 应用根目录以该属性名添加到系统参数中
 </context-param> 

② 负责将 Web 应用根目录以 webAppRootKey 上下文参数指定的属性名添加到系统参数中
 <listener> 
    <listener-class> 
    org.springframework.web.util.WebAppRootListener 
    </listener-class> 
 </listener>

5、Log4jConfigListener 监听器

    包括了 WebAppRootListener 的功能,也就是说,Log4jConfigListener 会自动完成将 Web 应用根目录以 webAppRootKey 上下文参数指定的属性名添加到系统参数中,在log4j.xml可以直接使用


6、Introspector 缓存清除监听器

    负责处理由 JavaBean Introspector 功能而引起的缓存泄露。IntrospectorCleanupListener 监听器在 Web 应用关闭的时会负责清除 JavaBean Introspector 的缓存,在 web.xml 中注册这个监听器可以保证在 Web 应用关闭的时候释放与其相关的 ClassLoader 的缓存和类引用。

参考技术A <?xml version="1.0" encoding="UTF-8" ?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/spring/spring-dao.xml /WEB-INF/classes/spring/spring-service.xml</param-value>
</context-param>

<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
<init-param>
<param-name>singleSession</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>本回答被提问者采纳

以上是关于spring中怎么实现过滤器和监听器?的主要内容,如果未能解决你的问题,请参考以下文章

(020)Spring Boot之Servlet过滤器(Filter)监听器(Listener)

21. Spring Boot过滤器监听器从零开始学Spring Boot

Spring监听器和过滤器的全局配置

Spring MVC ⾼级技术:监听器过滤器和拦截器

Spring MVC ⾼级技术:监听器过滤器和拦截器

Spring MVC ⾼级技术:监听器过滤器和拦截器