`
finally_m
  • 浏览: 67157 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用OpenSessionInViewFilter解决session关闭问题

阅读更多

基于JavaEE平台的软件开发中,使用Spring+Struts+Hibernate三个框架来构建软件项目是目前最为流行的方式。
目前我们已经掌握了Spring+Hibernate 或 Spring+Struts的集成方式,那么spring,Hibernate,Struts三个框架的集成也就不成问题了,但是在集成的过程中,需要注意一些问题:

问题一:使用MyEclipse引入三个框架后有重复JAR包,删除重复的JAR即可。

问题二:在使用HibernateTemplate的load方法查找数据, 需要在页面显示数据时出现Session已关闭异常。

 

问题分析:
因为HibernateTemplate模版类内部已经对Session的关闭进行了封装,这个问题我们可以使用事务管理来解决,但是当事务结束后,依然会关闭Session,从而导致页面获取不到数据。

 

OpenSessionInViewFilter
Session已关闭异常解决方法:
(1) 关闭延迟加载功能(不推荐使用)
(2) 使用Spring提供的OpenSessionInViewFilter类把Session关闭延长至页面加载数据完毕。

 

在web.xml中配置OpenSessionInViewFilter

<filter>
<filter-name>
OpenSessionInViewFilter
</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>
</filter>

<filter-mapping>
   <filter-name>OpenSessionInViewFilter</filter-name>
   <url-pattern>*.do</url-pattern>
</filter-mapping>

 

OpenSessionInViewFilter不起作用问题:
通常在Web应用中初始化Spring的配置,我们会在web.xml里面配置一个Listener,即:

	<listener>
	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			/WEB-INF/dao-config.xml,
			/WEB-INF/service-config.xml,
			/WEB-INF/spring-config.xml
		</param-value>
	</context-param>  

 

如果使用Struts,那么需要在Struts的配置文件struts-config.xml里面配置一个Spring的plugin:ContextLoaderPlugIn。


注意:

要在应用中使用OpenSessionInViewFilter,加载Spring配置文件需要在web.xml中配置,如果是使用Spring提供的插件在struts-config.xml文件里进行配置,将出现获取不到ApplicationContext对象的异常。

原因是,OpenSessionInViewFilter类需要通过ApplicationContext获取sessionFactory对象时得不到ApplicationContext对象,

 

实际上ContextLoaderListener和ContextLoaderPlugIn的功能是重叠的,他们都是进行Spring配置的初始化工作的。因此,如果你不打算使用OpenSessionInView,那么你并不需要在web.xml里面配置ContextLoaderListener。

好了,但是你现在既需要Struts集成Spring,又需要OpenSessionInView模式,问题就来了!

 

由于ContextLoaderListener和ContextLoaderPlugIn功能重叠,都是初始化Spring,你不应该进行两次初始化,所以你不应该同时使用这两者,只能选择一个,因为你现在需要集成Struts,所以你只能使用ContextLoaderPlugIn。

但是令人困惑的是,ContextLoaderListener和ContextLoaderPlugIn有一个非常矛盾的地方!

 

ContextLoaderListener和ContextLoaderPlugIn初始化spring配置后,都把配置对象放在ServletContext对象里面保存,问题在于他们各使用的key是不同的。而OpenSessionInViewFilter是按照ContextLoaderListener初始化后保存使用的key来获取配置对象,所以在使用ContextLoaderPlugIn初始化配置OpenSessionInViewFilter就得不到spring配置对象了。

 

 

这个问题解决办法是:
(1) 修改OpenSessionInViewFilter代码,使之获取配置对象的key与ContextLoaderPlugIn初始化后用于保存的key 一致。


(2) 使用ContextLoaderListener方式初始化配置。

分享到:
评论

相关推荐

    OpenSessionInViewFilter

    OpenSessionInViewFilter个人学习总结

    关于OpenSessionInViewFilter的学习

    NULL 博文链接:https://yanzhenwei.iteye.com/blog/1701164

    Sping 事务管理.doc

    OpenSessionInViewFilter解决Web应用程序的问题

    SSH项目整合示例【OpenSessionInView】所用到的jar包

    SSH项目整合示例【OpenSessionInView】所用到的jar包 包含Struts + Hibernate + Spring所有jar及其依赖的jar

    jar包(struts2.0.8+spring2.0+hibernate3.2)

    struts2.0.8+spring2.0+hibernate3.2 jar包

    spring_note.rar_inversion_spring concept

    课程内容 面向接口(抽象)编程的概念与好处 IOC/DI的概念与好处 inversion of control dependency injection AOP的概念与好处 ...opensessionInviewfilter(记住,解决什么问题,怎么解决) Spring JDBC

    Mac Mysql数据库中文乱码问题解决

    Mac 下MySQL数据库中文乱码解决方案: 当我们用框架进行数据库的存储操作时,经常会遇到中文乱码的问题。 如:在使用Java中得SSH框架时,我们需要在web.xml文件中配置编码的filter,具体代码是: ...

    OA项目SSH整合框架

    3,在web.xml中配置 spring 的 OpenSessionInView 过滤器(解决抛LazyInitializationException的问题) 1,配置 &lt;!-- 配置 spring 的 OpenSessionInView 过滤器 --&gt; &lt;filter-name&gt;OpenSessionInView ...

    spring_demo:Spring MVC示范项目

    Spring MVC Hibernate Demo Hibernate 配置 数据库实体必须设置以下注解 @Entity ... &lt;filter&gt;org.springframework.orm.hibernate4.support.OpenSessionInViewFilter &lt;param&gt;flushMode&lt;/param-nam

    S2SH集成 案例

    该案例实现了一个简单的登录功能,但里面将S2SH集成的所有配置信息都添加进去了。 如,OpenSessionInViewFilter、声明式事务、三层等等

    struts+spring+hibernate整合

    Spring4.0、Struts2.3.15、Hibernate4.2.4、jQuery1.9.1涉及到了诸多开发时的细节:ModelDriven、Preparable 拦截器、编写自定义的类型转换器、Struts2 处理 Ajax、OpenSessionInViewFilter、迫切左外连接、Spring ...

    SPRING API 2.0.CHM

    OpenSessionInViewFilter OpenSessionInViewInterceptor OpenSessionInViewInterceptor OptimisticLockingFailureException OptionsTag OptionTag OptionWriter OracleLobHandler OracleLobHandler....

Global site tag (gtag.js) - Google Analytics