使用urlrewrite和opensessioninviewfilter注意事项

使用OpenSessionInViewFilter
如果将Spring托管Hibernate的sessionFatory的话,在执行一次数据库操作后,session就会被关闭,如果再执行操作的话,就会抛出延迟加载的异常,如果关闭延迟加载,效率直线下降,显然是不理智的,为解决此问题,Spring提供了OpenSessionInViewFilter,将session的生命周期从一次数据库操作延长到一个request的生命周期,在这个request生命周期中无论你进行多少次数据库操作都没问题。

注意,OpenSessionInViewFilter的生命周期只是一个request,所以要在JSP页面中获取contentExt和contentTxt的话,那么这个JSP必须是通过forward跳转,不能是通过redirect跳转过来的,更加不能把延迟加载的对象放入session中

使用方法很简单
1.在你自己的项目下创建一个OpenSessionInViewFilter类,搜索OpenSessionInViewFilter的源码,复制到你自己的OpenSessionInViewFilter类中,把FlushMode flushMode = FlushMode.NEVER;改成
FlushMode flushMode = FlushMode.AUTO;
2.在web.xml中,struts的filter前加上(这点十分重要,不然OpenSessionInViewFilter不起作用)
<filter> 
    <filter-name>OpenSessionInViewFilter</filter-name>
    <filter-class>com.yourcompany.filters.OpenSessionInViewFilter</filter-class>
    <init-param>
    <!--singleSession应该设置为true,表示一个request只能打开一个 session,
      如果设置为false的话,session可以被打开多个,
      这时在update、delete的时候会出现打开多个session的异常
   -->
    <param-name>singleSession</param-name>
    <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping> 
    <filter-name>OpenSessionInViewFilter</filter-name> 
    <url-pattern>/*</url-pattern>
    <!--如果使用了UrlRewriteFilter的话要配置以下两条,没有就不需要配置-->
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
</filter-mapping>

猜你喜欢

转载自nws12304508.iteye.com/blog/1700318