`

Spring配置之OpenSessionInViewFilter

阅读更多
参考:
OpenSessionInViewFilter作用及配置:http://www.yybean.com/opensessioninviewfilter-role-and-configuration
http://blog.csdn.net/fooe84/article/details/680449

主要涉及类:
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor

一、作用
    说明一下Open Session in View的作用,就是允许在每次的整个request的过程中使用同一个hibernate session,可以在这个request任何时期lazy loading数据。
如果是singleSession=false的话,就不会在每次的整个request的过程中使用同一个hibernate session,而是每个数据访问都会产生各自的seesion,等于没有Open Session in View.
OpenSessionInViewFilter默认是不会对session 进行flush的,并且flush mode 是 never

spring的OpenSessionInViewFilter过滤器,主要是为了实现Hibernate的延迟加载功能,基于一个请求一个hibernate session的原则。

二、配置
它有两种配置方式OpenSessionInViewInterceptor和OpenSessionInViewFilter(具体参看SpringSide),功能相同,只是一个在web.xml配置,另一个在application.xml配置而已。

Open Session In View在request把session绑定到当前thread期间一直保持hibernate session在open状态,使session在request的整个期间都可以使用,如在View层里PO也可以lazy loading数据,如 ${ company.employees }。当View 层逻辑完成后,才会通过Filter的doFilter方法或Interceptor的postHandle方法自动关闭session。
1,web.xml配置OpenSessionInViewFilter
	<!--Hibernate Open Session in View Filte-->
	<filter>
		<filter-name>hibernateFilter</filter-name>
		<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
		<!-- singleSession默认为true,若设为false则等于没用OpenSessionInView -->
		<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>	

2,applicationContext.xml配置openSessionInViewInterceptor
	<bean id="openSessionInViewInterceptor"
		class="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor">
		<property name="sessionFactory" ref="sessionFactory" />
	</bean>


三、注意
尽 管Open Session In View看起来还不错,其实副作用不少。看回上面OpenSessionInViewFilter的doFilterInternal方法代码,这个方法实际上是被父类的doFilter调用的,因此,我们可以大约了解的OpenSessionInViewFilter调用流程:

request(请求)->open session并开始transaction->controller->View(Jsp)->结束transaction并 close session.

一切看起来很正确,尤其是在本地开发测试的时候没出现问题,但试想下如果流程中的某一步被阻塞的话,那在这期间connection就一直被占用而不释放。最有可能被阻塞的就是在写Jsp这步,一方面可能是页面内容大,response.write的时间长,另一方面可能是网速慢,服务器与用户间传输时间久。当大量这样的情况出现时,就有连接池连接不足,造成页面假死现象。

Open Session In View是个双刃剑,放在公网上内容多流量大的网站请慎用
分享到:
评论

相关推荐

    关于OpenSessionInViewFilter的学习

    OpenSessionInViewFilter是Spring框架中一个非常重要的组件,主要用于解决数据访问层(DAO)与视图层(View)之间的事务管理问题。在Web应用中,由于HTTP请求的无状态性,一次请求通常由多个Servlet过滤器、控制器和...

    Spring配置总结

    ### Spring配置总结:深入解析与应用 #### 一、Spring框架概述 Spring是一个开源的Java平台框架,由Rod Johnson创建并由Pivotal Software维护。它提供了全面的基础设施支持,帮助开发者构建健壮的企业级应用。...

    spring框架中常用的配置

    ### Spring框架中常用的配置 #### 一、Spring框架配置概述 Spring框架作为一款非常流行的Java企业级应用开发框架,提供了大量的功能与配置选项来帮助开发者更高效地进行软件开发。在Spring框架中,配置是非常核心...

    spring+struts+hibernate的配置文档

    `struts-config.xml` 是 Struts 框架的核心配置文件之一,用于定义 Action 映射等配置。 - **控制器配置**:通过 `&lt;controller&gt;` 元素配置了 Struts 的默认处理器,这里指定了 `DelegatingRequestProcessor` 类作为...

    SSH2.0配置日记

    涉及到了多个知识点,包括 Spring 配置、Hibernate 配置、Struts2 配置、ConnectionPool 配置、数据库配置、事务管理、OpenSessionInViewFilter 配置、web.xml 配置、依赖注入、Struts2 和 Spring 整合、Hibernate ...

    spring管理struts和hibernate

    - 在`web.xml`中配置`OpenSessionInViewFilter`过滤器,自动管理事务。 #### 三、总结 通过以上步骤,我们不仅可以让Spring有效地管理Struts,实现更灵活的业务逻辑控制,还可以利用Spring的强大功能管理...

    马士兵Spring课堂笔记(超级详细版).pdf

    我们可以通过配置XML文件和注解来实现整合,并使用opensessionInviewfilter来解决会话问题。 Spring JDBC面向接口编程 本节讲解了如何使用Spring JDBC来实现面向接口编程。我们可以通过配置XML文件和注解来实现DAO...

    Struts+hibernate+Spring的整合

    5. **数据源配置**:在Spring配置文件中定义数据源(dataSource)和SessionFactory,这是连接数据库的关键。通过这种方式,可以将Hibernate的配置统一管理,避免在各个DAO中重复配置。 6. **HibernateDAOSupport类*...

    struts2.3+spring3.1.2+hibernate4.1.6 配置说明

    在`web.xml`中,Struts2的配置通过`StrutsPrepareAndExecuteFilter`进行,而Spring与Hibernate的集成则通过`OpenSessionInViewFilter`实现。这些配置保证了请求到达时,Struts2能正确处理请求,同时Spring能够管理和...

    SSH详细配置文件(自己个人经验)

    - **添加Hibernate**:选择Hibernate3.3及其所有Spring库,将Hibernate整合到Spring中,通过Spring配置文件管理。 - **解决Jar包冲突**:删除自动导入的可能冲突的库,手动替换为EShopping示例中的Jar包,确保版本...

    Struts,Spring与hibernate集成

    5. **配置dataSource和SessionFactory**:在Spring配置文件中,你需要配置数据源(dataSource)和SessionFactory,这样可以将Hibernate的配置整合到Spring中,同时可以移除hibernate.cfg.xml文件,让Spring管理...

    Struts+Hibernate+Spring的基本流程

    在Web应用中,为了确保每次请求都能获得新的Session,通常会配置openSessionInViewFilter,保证数据操作的正确性。 整合SSH的步骤如下: 1. 引入SSH相关的jar包,确保版本兼容。Struts和Hibernate的jar包可以从IDE...

    spring面试题大全.doc

    Spring 框架是 Java 开发中的核心组件之一,它为开发者提供了许多强大的功能,包括依赖注入(DI)、控制反转(IOC)、事务管理以及对 ORM 框架的支持。以下是对这些知识点的详细解释: **1. Spring 的优点** - **...

    struts2 spring hibernate整合要点、注意点

    1. **Spring配置Hibernate SessionFactory**:在`applicationContext.xml`中配置`SessionFactory`,并通过Spring的依赖注入机制将数据源注入到SessionFactory中。 2. **Struts2配置Spring插件**:在`struts.xml`中...

    struts_hibernate_spring集成

    Spring配置深入 Spring的配置文件负责管理Bean的生命周期和事务管理。主要包括: - **SessionFactory的配置**:使用`LocalSessionFactoryBean`来读取`hibernate.cfg.xml`,这是Hibernate的核心配置文件,负责建立...

    struts2.1+spring3.0+hibernate3.3整合

    - 在Spring的配置文件中配置Hibernate的SessionFactory,这是Hibernate的核心组件之一,用于创建Session对象。 - 配置Hibernate的连接池、方言等属性。 3. **整合Spring与Hibernate**: - 使用Spring提供的`...

    spring2.5学习PPT 传智博客

    - 设置Spring库并创建第一个Spring应用,包括编写XML配置文件。 - 测试配置环境,确保Spring可以正确初始化和管理Bean。 3. **Spring管理Bean的原理** - 解释Bean的实例化过程,包括单例(Singleton)和原型...

    Struts+Hibernate+Spring的整合方法

    - 配置web.xml:指定Spring的上下文加载监听器`org.springframework.web.context.ContextLoaderListener`,并定义Spring配置文件的位置。 7. **解决中文乱码问题**:Spring提供的CharacterEncodingFilter可以方便...

    struts+spring+hibernate全面整合

    最后,在 Struts 的配置文件中,配置 `DelegatingRequestProcessor` 作为 Struts 的请求处理器,以及 `ContextLoaderPlugIn` 插件,确保 Spring 容器在 Struts 初始化时被加载。`ContextLoaderPlugIn` 的配置中指定...

    Spring面试题大全

    而IoC的方法是只在类A中定义好用于关联接口B的实现的方法,将类A,接口B和接口B的实现C放入IoC的容器(Container)中,通过一定的配置由容器(Container)来实现类A与接口B的实现C的关联。 四、Spring对多种ORM框架...

Global site tag (gtag.js) - Google Analytics