`

懒加载问题

SSH 
阅读更多

 

 在进行OA系统中用户管理的相关部署,配置到服务器后发现访问报异常

 

异常情况如下:

org.apache.jasper.JasperException: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.jxust.oa.domain.User.roles, no session or session was closed

    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:556)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:477)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:748)
    org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:486)
    org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:411)
    org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:338)
    org.apache.struts2.dispatcher.ServletDispatcherResult.doExecute(ServletDispatcherResult.java:164)
    org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:191)
    com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:369)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:273)
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.jxust.oa.domain.User.roles, no session or session was closed

    org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:383)
    org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:375)
    org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:368)
    org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:111)
    org.hibernate.collection.PersistentSet.iterator(PersistentSet.java:186)
    org.apache.struts2.util.MakeIterator.convert(MakeIterator.java:82)
    org.apache.struts2.components.IteratorComponent.start(IteratorComponent.java:269)
    org.apache.struts2.views.jsp.ComponentTagSupport.doStartTag(ComponentTagSupport.java:54)
    org.apache.jsp.WEB_002dINF.jsp.userAction.list_jsp._jspx_meth_s_005fiterator_0

 

 

通过异常的描述和在网上查资料后发现这个是懒加载异常,就是在查询时没有加载关联表的对象,你读取这个关联对象的时候,hibernate的session已经关闭,所以无法获取对象。

 

解决办法是在web.xml中配置Spring的

<!-- 配置Spring的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>*.action</url-pattern>
	</filter-mapping>

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
	<!--在启动Web容器时,自动装配Spring applicationContext.xml的配置信息。自动的将其中的bean初始化 -->
	<!-- 容器初始化在这步完成 -->

	<!-- 配置spring的监听器用于初始化ApplicationContext对象 -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:applicationContext*.xml</param-value>
	</context-param>

	<!-- 配置Spring的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>*.action</url-pattern>
	</filter-mapping>

	<!-- 配置struts2的主过滤器 -->
	<filter>
		<filter-name>struts2</filter-name>
		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
	</filter>

	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

</web-app>

 

 

问题解决,成功得到预期效果大笑

分享到:
评论

相关推荐

    解决fragment懒加载问题的项目

    然而,随着应用复杂性的增加,Fragment的懒加载问题逐渐凸显,尤其是在处理多Tab、多Fragment场景时。本项目针对这一问题进行了解决,旨在优化用户体验,提高应用性能。 一、Fragment懒加载原理 懒加载(Lazy ...

    ViewPager+Fragment懒加载问题

    3. **解决懒加载问题**:为了解决预加载问题,我们可以自定义ViewPager或者使用已有的库如`androidx.viewpager.widget.PagerAdapter`,重写`isViewFromObject()`和`destroyItem()`方法,来控制何时加载和销毁...

    Android中ViewPager+Fragment懒加载问题解决方案.zip

    Android中ViewPager+Fragment取消(禁止)预加载延迟加载(懒加载)问题解决方案 方案是为解决特定问题或达成特定目标而制定的一系列计划或步骤。它的作用是提供一种系统性的方法,以有效地应对挑战、优化流程或实现目标...

    有问题的懒加载,框架还可以使用

    从压缩包子文件的文件名称`SpringHibLAZYTest20161003`来看,这可能是一个测试用例,可能是用来复现懒加载问题或测试优化方案的。分析这个文件的内容可以帮助我们更具体地了解问题所在,找出最佳的解决方案。但在...

    vue-router懒加载速度缓慢问题及解决方法

    本文将详细介绍Vue-router中懒加载速度缓慢问题及其解决方案。 首先,需要理解什么是懒加载。懒加载,也称作延迟加载,其核心思想是在实际需要某个资源时才进行加载,而并非在应用启动之初就把所有的资源都加载好。...

    懒加载案例lazyload

    懒加载(Lazy Load)是一种优化网页性能的技术,它主要用于图片、视频或JavaScript等资源的加载。在网页初次加载时,并不立即加载所有内容,而是只加载用户可视区域内的元素,当用户滚动页面到某一位置或者触发特定...

    layui图片懒加载.txt

    ### 图片懒加载技术在LayUI中的应用 #### 一、引言 在现代Web开发中,用户体验是至关重要的。对于包含大量图片的网站来说,优化页面加载速度显得尤为重要。图片懒加载(Lazy Loading)是一种提高网页性能的技术,...

    Android实现WebView懒加载

    "Android实现WebView懒加载"这一技术就是为了优化这个问题,通过延迟加载部分资源,提升应用的启动速度和响应性。 首先,我们要理解什么是懒加载(Lazy Loading)。懒加载是一种优化策略,它推迟非关键资源的加载,...

    Spring Boot 全局懒加载机制.docx

    Spring Boot 2.2及更高版本引入了一个全局懒加载机制,允许用户通过配置开启整个应用的bean懒加载,以优化启动时间和资源利用。 在传统的Spring应用中,我们可以通过在bean定义上添加`@Lazy`注解来实现单个bean的懒...

    Fragment实现懒加载

    "Fragment实现懒加载"是指在Fragment中采用一种策略,使得其内容只有在真正需要显示时才进行加载,从而提高应用性能和用户体验。这种方式特别适用于处理大量数据或者需要网络请求的情况,避免一次性加载所有内容导致...

    懒加载异常解决.docx

    通过配置OpenSessionInViewFilter,可以在很大程度上解决懒加载异常的问题,尤其是在Java Web应用中使用Hibernate等ORM框架时。当然,还需要根据实际项目的具体情况,灵活调整和优化配置,以达到最佳的性能和稳定性...

    java swing tree树的懒加载

    当我们处理大量数据时,一次性加载所有节点可能会导致性能问题,这时就需要用到“懒加载”(Lazy Loading)技术。 懒加载是一种优化策略,它只在需要时才加载数据,而不是一次性加载所有数据。对于Java Swing的`...

    select懒加载组件

    在Vue.js框架中,"select懒加载组件"是一种优化大量数据下选择列表性能的策略。这类组件通常用于处理数据量过大的下拉菜单,避免一次性加载所有选项导致页面卡顿或加载时间过长。Vue.js提供了强大的数据绑定和组件化...

    懒加载版本表格树

    而懒加载(也称为按需加载或延迟加载)解决了这个问题,它只在用户滚动到或需要查看某一部分数据时才加载相应的数据块。 这种技术在"表格树"中特别实用,因为表格树不仅需要处理大量数据,还涉及到层级结构,每一层...

    bootstrap-treeview树节点实现动态加载(懒加载)

    在官方版本中,虽然提供了丰富的功能,但并未直接支持动态加载或懒加载。动态加载(也称为懒加载)是一种优化性能的技术,只在用户需要时才加载数据,而不是一次性加载所有数据,这对于处理大量数据或层级结构尤其...

    jquery懒加载版本表格树GridTree.zip

    为解决这一问题,"jQuery懒加载版本表格树GridTree"应运而生。这个开源项目通过引入懒加载机制,实现了在表格中展示树形结构数据的同时,有效提升了大数据量场景下的显示效率。 首先,我们来了解什么是懒加载(Lazy...

    DIV懒加载demo

    在网页开发中,为了提高页面加载速度和用户体验,懒加载技术被广泛应用。"DIV懒加载demo"是一个关于如何实现非图片元素(如div)的懒加载技术实例,它模仿了天猫和京东等电商平台的滚动加载效果。这个示例旨在帮助...

    JQuery实现页面图片懒加载效果仅需两行代码

    在网页设计中,为了提高页面加载速度和用户体验,懒加载(Lazy Load)技术被广泛应用。尤其是在图片密集型的网站上,非首屏的图片可以延迟加载,直到用户滚动到相应位置时才开始加载,这样可以显著减少首屏加载时间...

    详解性能更优越的小程序图片懒加载方式

    懒加载或者可以说是延迟加载,针对非首屏或者用户”看不到”的地方延迟加载,有利于页面首屏加载速度快、节约了流量,用户体验好 实现方式 传统H5的懒加载方式都是通过监听页面的scroll事件来实现的,结合viewport的...

    懒加载代码案例

    懒加载,也称为延迟加载或按需加载,是一种优化网页性能的技术。在电脑端的应用中,懒加载尤其重要,因为它可以显著减少页面初次加载时的数据量,提高用户体验,特别是对于内容丰富的网页,如图片、视频或者长滚动...

Global site tag (gtag.js) - Google Analytics