严重: 配置应用程序监听器[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目录下