在使用struts1 + hibernate(Struts2没有这问题)过程中,经常要访问lazy="true"的集合类型属性,可是这时候报session已经关闭的现象。
要解决这个问题我们要分析OpenSessionInViewFilter这个类。 OpenSessionInViewFilter是按照WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE这个key去获取spring配置信息的! 所以,我们在使用过程中配置OpenSessionInViewFilter就不起作用。
解决方法: 修改ContextLoaderPlugIn代码,在getServletContext().setAttribute(attrName, wac);这个地方加上一行代码: getServletContext().setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, wac);
或者
修改OpenSessionInViewFilter,让它按照attrName去取得spring配置。
我们按照第一种方法来配置
1.重写struts的插件继承自spring的ContextLoaderPlugIn 的类。
package com.test.plugIn;
import org.springframework.beans.BeansException;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import org.springframework.web.struts.ContextLoaderPlugIn;
public class MyContextLoaderPlugIn extends ContextLoaderPlugIn {
protected WebApplicationContext initWebApplicationContext()
throws BeansException, IllegalStateException {
WebApplicationContext parent = WebApplicationContextUtils
.getWebApplicationContext(getServletContext());
WebApplicationContext wac = createWebApplicationContext(parent);
String attrName = getServletContextAttributeName();
getServletContext().setAttribute(attrName, wac);
getServletContext().setAttribute(
WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,
wac);
return wac;
}
}
2.配置web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="2.5"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>
com.navinfo.telematics.roadmap.web.filter.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<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>*.do</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>3</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>3</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
3.更改struts-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
<form-beans>
........
</form-beans>
<global-exceptions />
<global-forwards />
<action-mappings>
.......
</action-mappings>
<message-resources parameter="i18n.ApplicationResources" />
<plug-in
className="com.test.plugIn.MyContextLoaderPlugIn">
<set-property property="contextConfigLocation"
value="/WEB-INF/classes/spring/applicationContext.xml" />
</plug-in>
</struts-config>
分享到:
相关推荐
在Hibernate中,可以通过在实体的映射配置文件中设置`lazy="true"`来启用实体对象的延迟加载。 例如,对于一个User实体: ```xml <hibernate-mapping> <class name=...
在Hibernate中,实体对象的延迟加载可以通过在映射文件中设置`lazy="true"`来启用。例如,对于名为`com.neusoft.entity.User`的实体类,映射配置如下: ```xml <Hibernate-mapping> <class name=...
这有助于避免因Session关闭而导致的异常。但是,如果设置为`false`,则每次执行数据库操作时都会创建一个新的Session,这可能导致性能问题以及难以管理的Session生命周期。 #### 总结 综上所述,`...
这可以通过在数据库中添加一个“isDeleted”字段来实现,当该字段被设置为true时,表示该记录已被删除。在Hibernate中,我们可以使用`@SQLDelete`和`@Where`注解来实现这个功能。 ```java // 在学生实体类中添加...
### Struts+Spring+Hibernate快速入门 #### 一、引言 在当今的企业级Web应用程序开发中,Struts、Spring 和 Hibernate 这三大框架被广泛应用于构建高效、可维护的应用程序。本文旨在介绍如何利用这三种技术搭建一个...
2. **查看Hibernate生成的SQL**:在`applicationConfig.xml`中设置`hibernate.show_sql`为`true`,即可在控制台查看执行的SQL。但要注意,这可能会影响性能优化。 3. **Hibernate缓存策略**: - **只读(Read-only...
在本文中,我们将深入探讨Hibernate框架中的一对多关系处理,这是对象关系映射(ORM)的一个关键概念。Hibernate作为Java领域内的一个流行ORM工具,它允许开发者将数据库操作转化为对象模型的操作,简化了数据库应用...
通过将`hibernate.show_sql`属性设置为`true`,可以查看Hibernate执行的所有SQL语句,这对于调试和性能调优非常有帮助。不过需要注意的是,在生产环境中应谨慎使用此选项,以免影响性能。 #### 十、综合优化技术栈 ...
16.3.2 延迟检索(lazy属性为默认值“true”) 16.3.3 增强延迟检索(lazy属性为“extra”) 16.3.4 批量延迟检索和批量立即检索(使用batch-size属性) 16.3.5 用带子查询的select语句整批量初始化orders...
WebWork+Spring+Hibernate是早期比较流行的一种技术组合,它们各自解决的问题域不同,但结合起来可以形成一个强大的企业级开发框架。接下来我们将详细介绍如何实现这三种框架的结合。 #### 第一步:构建Java Web ...
16.3.2 延迟检索(lazy属性为默认值“true”) 16.3.3 增强延迟检索(lazy属性为“extra”) 16.3.4 批量延迟检索和批量立即检索(使用batch-size属性) 16.3.5 用带子查询的select语句整批量初始化orders...
可以通过设置`lazy="true"`来实现延迟加载。 - 集合(Collection):同样地,集合也可以设置为延迟加载。 - **Hibernate 3 属性的延迟加载:** 当Hibernate查询数据时,并不会立即将数据加载到内存中,而是等到...
在给定的文件"28-Hibernate数据关联实现〖1VS1〗_Struts + DAO + Hibernate(2)"中,可能包含了一个完整的示例,涵盖了使用Struts、DAO模式和Hibernate实现1对1关联的代码。这个例子可能展示了如何在Action类中处理...
2. **Hibernate的session问题**: "no session or session was closed"提示可能是因为在Hibernate配置文件中,外键的lazy属性设置为"true"。若需要立即加载关联对象,应将其改为"false"。 3. **Struts的checkbox使用...
16.3.2 延迟检索(lazy属性为默认值“true”) 16.3.3 增强延迟检索(lazy属性为“extra”) 16.3.4 批量延迟检索和批量立即检索(使用batch-size属性) 16.3.5 用带子查询的select语句整批量初始化orders...
16.3.2 延迟检索(lazy属性为默认值“true”) 16.3.3 增强延迟检索(lazy属性为“extra”) 16.3.4 批量延迟检索和批量立即检索(使用batch-size属性) 16.3.5 用带子查询的select语句整批量初始化orders...
以上是Spring+Hibernate将文件二进制数据持久化到数据库的解决方案,而Struts通过将表单中file类型的组件映射为ActionForm中类型为org.apache.struts.upload. FormFile的属性来获取表单提交的文件数据。 工程...
- **实体对象**: 可以通过设置`lazy="true"`属性来实现对实体对象的延迟加载。 - **集合(Collection)**: 类似实体对象,集合也可以通过`lazy="true"`属性来实现延迟加载。 **2.3 Hibernate 3的延迟加载功能** 在...
它结合了MVC(Model-View-Controller)设计模式的优势,提供了灵活的数据访问层(Hibernate)、业务逻辑处理(Spring)以及表现层(Struts)的支持。 在本文档中,我们将详细介绍如何在SSH框架中进行事务管理配置,...
1,对于集合属性,默认是lazy="true"的,在第一次使用时才加载。 2,但在加载时,如果Session已经关掉了就会抛LazyInitializationException异常 二,集成 Spring 与 Struts2.1.8.1 1,在web.xml配置监听器...