Spring(3)——过滤器和监听器

来源:互联网 发布:windows 子进程 监控 编辑:程序博客网 时间:2024/05/22 04:36

延迟加载过滤器

    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> 


 

乱码过滤器

    对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>


 

请求跟踪日志过滤器

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

    org.springframework.web.filter.ServletContextRequestLoggingFilter: 该过滤器将请求的 URI 记录到 Common 日志中(如通过 Log4J 指定的日志文件);

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> 


 

    使用场景是在第三方工具的配置文件中通过 ${baobaotao.root} 引用 Web 应用的根目录。比如以下的 log4j.properties

Log4jConfigListener 监听器

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

Introspector 缓存清除监听器

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

参考文档

         http://www.ibm.com/developerworks/cn/java/j-lo-spring-utils1/index.html