struts1.2升级struts2.5.30问题汇总

文章列举了在配置Struts2应用程序时遇到的一系列错误,包括类找不到、类转换错误、过滤器问题、ognl和freemarker库冲突、tiles和struts标签库解析问题等,并提供了相应的解决方案,如修改web.xml配置、添加或更新jar包、调整Struts配置等。
摘要由CSDN通过智能技术生成

  1. 严重: 配置应用程序监听器[org.apache.struts2.tiles.StrutsTilesListener]错误

java.lang.NoClassDefFoundError: org/apache/tiles/web/startup/AbstractTilesListener

at java.lang.ClassLoader.defineClass1(Native Method)

at java.lang.ClassLoader.defineClass(ClassLoader.java:763)

----------注释掉web.xml中以下就解决
 <!--  <listener>
  <listener-class>org.apache.struts2.tiles.StrutsTilesListener</listener-class>
 </listener> -->
   <!--<context-param>
  <!-- <param-name>definitions-config</param-name>
  <param-name>org.apache.tiles.definition.DefinitionsFactory.DEFINITIONS_CONFIG</param-name>
  <param-value>/WEB-INF/tiles.xml</param-value>
 </context-param> -->

2 . java.lang.ClassCastException:

org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter cannot be cast to jakarta.servlet.Filterat org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:250)at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:103)

----需要下载Jakarta Servlet.jar包,因为tomcat10使用的不再是javax.servlet.jar包 -------直接切换到tomcat9即可

3.这个必须添加,否则启动tomcat会报错

<listener>

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

从Struts2.1.3起废弃了ActionContextCleanUp过滤器,其相关功能在StrutsPrepareAndExecuteFilter实现,所以需要在web.xml中添加新过滤器---如下:

<filter>
   <filter-name>struts2</filter-name>
   <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
4. java.lang.NoSuchMethodError: ognl.SimpleNode.isEvalChain(Lognl/OgnlContext

--------因为ognl.jar冲突, 把低版本删除 使用struts-core.jar自带的就行

5. 但删除ognl.jar之后又报错:NoClassDefFoundError: ognl/PropertyAccessor

------下载新版本ognl.jar 再放回去解决

6. ClassNotFoundException: javassist.ClassPool

-----添加javassist-3.28.0-GA.jar 即可

7. java.lang.NoClassDefFoundError: ognl/DefaultMemberAccess

----不要使用新版的 ognl,从 3.2 开始,会报各种乱七八糟的错误。建议使用 3.1.x 版本的

8. java.lang.NoClassDefFoundError: freemarker/template/Version

----换freemarker.2.3.31.jar 解决

9. org.apache.jasper.JasperException: 无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://tiles.apache.org/tags-tiles]

-----jsp中引入了<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>,当访问这个页面时就会报上面这个错,

打开tiles-jsp-版本.jar在META-INF目录中找到了tld文件复制到WEB-INF目录下

10. org.apache.jasper.JasperException: 找不到URI:[/struts-tags]的taglib[s]

---同上, 打开struts2-core-2.5.30.jar找到了struts-tags.tld文件复制到WEB-INF目录下

11. javax.servlet.jsp.JspException: TilesContainer not initialized

-----添加以下到web.xml中即可

<context-param>
<param-name>org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG</param-name>
<param-value>/WEB-INF/tiles.xml</param-value>
</context-param>  
<listener>
<listener-class>org.apache.tiles.web.startup.TilesListener</listener-class>
</listener>
12. org.apache.tiles.definition.DefinitionsFactoryException: I/O Error reading definitions

-----tiles.xml的头文件版本不对,我的jar包是tiles-core-3.0.8.jar,头文件需要修改为以下(2.0修改成3.0即可):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tiles-definitions PUBLIC
       "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"
       "tiles-config_3_0.dtd">
13. java.lang.NoClassDefFoundError: org/objectweb/asm/ClassVisitor

--------添加asm-3.3.1.jar即可

所有*struts*.xml配置的extends="struts-default"改成extends="json-default"

14. [main] ERROR org.apache.struts2.dispatcher.Dispatcher - Dispatcher initialization failed

com.opensymphony.xwork2.inject.DependencyException: com.opensymphony.xwork2.inject.ContainerImpl$MissingDependencyException: No mapping found for dependency [type=com.opensymphony.xwork2.factory.ConverterFactory, name='default'] in public void com.opensymphony.xwork2.ObjectFactory.setConverterFactory(com.opensymphony.xwork2.factory.ConverterFactory).

----升级后的struts中配置的action出错,

升级struts2.5.30之后struts.xml不再默认从src下面读了,而是需要放到resource文件夹下,否则无法访问action

15. struts.xml中配置的<result name="xxx" type="redirect-action">需要改成redirectAction
16. Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.springframework.orm.hibernate3.HibernateTransactionManager$HibernateTransactionObject

[http-nio-8080-exec-3] ERROR org.apache.struts2.dispatcher.DefaultDispatcherErrorHandler - Exception occurred during processing request: null

com.opensymphony.xwork2.XWorkException: null

---所有*validators.xml文件头的修改

原始内容:

<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator Config 1.0//EN" "" target="_blank">http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd">

修改后内容:

<!DOCTYPEvalidatorsPUBLIC "-//ApacheStruts//XWork Validator Config 1.0//EN" "" target="_blank">http://struts.apache.org/dtds/xwork-validator-config-1.0.dtd">

17. 打开使用了<s:datetimepicker>标签的页面,报错信息:用前缀[s]导入的标记库中未定义标记[datetimepicker]

----解决办法:

1、将struts2-dojo-plugin-2.3.37拷贝到/web-inf/lib下,并解压把struts-dojo-tags.tld拷贝到/web-inf/下

2、在jsp文件中加入<%@ taglib uri="/struts-dojo-tags" prefix="sx"%>

3、将<s:datetimepicker 标签改成上面设置的前缀<sx:datetimepicker

struts框架访问页面国际化乱码,是因为.globalMessages文件未被扫描到

--------需要把该文件放到src目录下

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

往事不堪回首..

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值