openSessionInViewFilter配置说明

首先要在工程的web.xml中配置如下:

 <filter>
    <filter-name>openSessionInViewFilter</filter-name>
    <filter-class>org.springframeword.orm.hibernate3.OpenSessionInViewFilter</filter-class>

    <init-param>

            <param-name>singleSession</param-name>

            <param-value>true</param-value>

    </init-param>

    <init-param>

            <param-name>sessionFactoryBeanName</param-name>

            <param-value>sessionFactoryClientManage</param-value>

    </init-param>
</filter>

 

这里配置的时候涉及到两个初始化的参数,其中singleSession为true可保证如果获取当前线程绑定的session没有获取到的话,可以重新创建一个(细节大家可以看下相关API或者是源码)。看网上好多相关的说法突出说明一定要配置singleSession为true,实际上在源码中,这个属性默认就是为true的。

另外还有一个sessionFactoryBeanName这个属性,这个属性是指定通过哪个sessionFactory去获得session的。默认情况下,会在Spring管理的Bean中去查找ID为sessionFactory的sessionFactory配置,如果你在开发的过程中指定了其它的ID名称,那么在这里一定要记住进行配置。要不就会报找不到那个bean的错误。

 

好了,接下来我们就可以用这个拦截器去过滤我们的servlet了

<filter-mapping>

       <filter-name>openSessionInViewFilter</filter-name>

       <servlet-name>这里加入你要过滤的servlet名称</servlet-name>

</filter-mapping>

OK,现在好了,我们可以用了。

用这个的时候经常遇到一些问题如下:

打开的session是否要自己关闭:这个是不用的,上面指定的filter打开session,同时在完成请求之后会把这个session关掉的,所以自己不用关心这个。

通过session.openConnection()方法打开的connection要自己关闭吗,其实一般来说,自己打开的资源是需要自己关闭的,

但是这里的connection并不是自己打开的,如果使用了连接池的话,session用完的connection会回到池中的,这个会由连接池去管理,所以自己也不用操心(这个只是自己的理解,不知道对不对)。

好了,这个就写到这,大家有什么想法一起交流,谢谢!

猜你喜欢

转载自wshuanggang.iteye.com/blog/1574065