struts2自定义模板内存溢出 java.lang.OutOfMemoryError: Java heap space(问题已解决)

博主在整合Struts2和Spring时遇到内存溢出问题,经过排查发现是由于struts.ui.theme设置为sample并在src下创建了对应的模板文件夹导致的死循环。解决方案是将struts.ui.theme改为xhtml并删除自定义模板文件夹。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

两天了,我还没有解决,贴出来,大侠们帮我看看(现在已经解决了,请看下面)

 

错误信息如下:

org.apache.jasper.JasperException: An exception occurred processing JSP page /form/login.jsp at line 13

10: </title>
11: </head>
12: <body>
13: <s:form namespace="/main" action="login" method="post" >
14: <s:textfield key="login.page.username" name="fchrUsername"/>
15: <s:password key="login.page.password" name="fchrPassword"/>
16: <s:submit key="login.page.login"/>

 

Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:505)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:398)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:389)
com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129)
com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77)
org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:102)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)

 

root cause

javax.servlet.ServletException: java.lang.OutOfMemoryError: Java heap space
	org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:862)
	org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:791)
	org.apache.jsp.form.login_jsp._jspService(login_jsp.java:101)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:389)
	com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129)
	com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77)
	org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:102)
	org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
	org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)

 

root cause

java.lang.OutOfMemoryError: Java heap space
	java.util.Arrays.copyOf(Arrays.java:2760)
	java.util.Arrays.copyOf(Arrays.java:2734)
	java.util.ArrayList.ensureCapacity(ArrayList.java:167)
	java.util.ArrayList.add(ArrayList.java:351)
	org.apache.struts2.components.template.Template.getPossibleTemplates(Template.java:72)
	org.apache.struts2.components.template.FreemarkerTemplateEngine.renderTemplate(FreemarkerTemplateEngine.java:92)
	org.apache.struts2.components.UIBean.mergeTemplate(UIBean.java:559)
	org.apache.struts2.components.ClosingUIBean.start(ClosingUIBean.java:59)
	org.apache.struts2.views.jsp.ComponentTagSupport.doStartTag(ComponentTagSupport.java:53)
	org.apache.jsp.form.login_jsp._jspx_meth_s_005fform_005f0(login_jsp.java:179)
	org.apache.jsp.form.login_jsp._jspService(login_jsp.java:91)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:389)
	com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129)
	com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77)
	org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:102)
	org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
	org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)


struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.1.7.dtd">

<struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />
    <constant name="struts.action.extension" value="do" />
   
    <package name="main" extends="struts-default">
     <action name="login" class="loginAction">
      <result name="success">/form/index.jsp</result>
      <result name="input">/form/login.jsp</result>
     </action>
    </package>
</struts>

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans
 xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:p="http://www.springframework.org/schema/p"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">


 <bean id="dataSource"
  class="org.apache.commons.dbcp.BasicDataSource">
  <property name="driverClassName"
   value="com.mysql.jdbc.Driver">
  </property>
  <property name="url"
   value="jdbc:mysql://localhost:3306/spring">
  </property>
  <property name="username" value="root"></property>
  <property name="password" value=""></property>
 </bean>
 <bean id="sessionFactory"
  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="dataSource">
   <ref bean="dataSource" />
  </property>
  <property name="hibernateProperties">
   <props>
    <prop key="hibernate.dialect">
     org.hibernate.dialect.MySQLDialect
    </prop>
    <prop key="hibernate.hbm2ddl.auto">update</prop>
   </props>
  </property>
  <property name="mappingResources">
   <list>
    <value>com/study/hibernate/beans/User.hbm.xml</value>
   </list>
  </property>
 </bean>
 
 <bean id="transactionManager"
  class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory">
   <ref local="sessionFactory" />
  </property>
 </bean>
 
 <!-- config hibernate dao -->
 <bean id="UserDAO" class="com.study.hibernate.dao.UserDAO">
  <property name="sessionFactory">
   <ref bean="sessionFactory" />
  </property>
 </bean>
 <!-- config userDAO proxy -->
 <!--
 <bean id="UserDAOProxy"
  class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
  <property name="transactionManager">
   <ref bean="transactionManager" />
  </property>
  <property name="target">
   <ref local="UserDAO" />
  </property>
  <property name="transactionAttributes">
   <props>
    <prop key="insert*">PROPAGATION_REQUIRED</prop>
    <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
   </props>
  </property>
 </bean> 
  -->
 <!-- config Struts action -->
 <bean name="loginAction" class="com.study.struts2.actions.LoginAction">
  <property name="userDAO">
   <ref local="UserDAO" />
  </property>
 </bean>
 
 <!-- config logger -->
 <bean name="logger" class="com.study.spring.aop.LoggingInterceptor"></bean>
 
 <!-- config proxy -->
 <bean name="loggingAutoProxy"
  class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
  <property name="beanNames">
   <list>
    <value>/login</value>
   </list>
  </property>
  <property name="interceptorNames">
   <list>
    <value>logger</value>
   </list>
  </property>
 </bean>
 
</beans>

 

 

那里配置的不对吗,这个问题太难了!谢谢

 

问题:咋一看是内存溢出,左看右看也没有写什么占内存的地方呀,本以为是struts2和spring的配置文件没配置好,死循环?。。。

 

原因:在检查了无数次的struts2和spring的配置后,我确定原因不是这里

 

出问题的自定义模板struts.properties设置(看了这个帖子http://xiezuoming.javaeye.com/blog/410545)

struts.ui.theme=sample

在src下新建template/sample文件夹,存放fielderror.ftl

并新建theme.properties,添加内容parent = simple

 

偶然间,我修改了struts.properties文件的struts.ui.theme=xhtml,页面就可以正常显示了,于是我删除了template/sample文件夹,问题就解决了!

 

总结:应该是parent = simple造成了死循环了吧.希望对大家有帮助!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值