将 struts 1.x 应用程序迁移到 struts 2.5.26

问题描述

由于在 struts 1.x 中发现了安全问题,我们正在将我们的一个旧应用迁移到 Struts 2.5.26。在测试时,我注意到当服务器启动时,tile 会抛出异常。

SEVERE: Exception sending context initialized event to listener instance of class org.apache.struts2.tiles.StrutsTilesListener
java.lang.AbstractMethodError: org.apache.tiles.startup.AbstractTilesInitializer.createContainerFactory(Lorg/apache/tiles/TilesApplicationContext;)Lorg/apache/tiles/factory/AbstractTilesContainerFactory;
    at org.apache.tiles.startup.AbstractTilesInitializer.createContainer(AbstractTilesInitializer.java:123)
    at org.apache.tiles.startup.AbstractTilesInitializer.initialize(AbstractTilesInitializer.java:70)
    at org.apache.tiles.web.startup.AbstractTilesListener.contextInitialized(AbstractTilesListener.java:62)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4992)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5490)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:649)
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1083)
    at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1880)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

Apr 21,2021 8:21:29 AM org.apache.catalina.core.StandardContext startInternal
SEVERE: Error listenerStart

我们在 web.xml 中有以下内容

    <context-param>
        <param-name>tilesDefinitions</param-name>
        <param-value>/WEB-INF/tiles-defs.xml</param-value>
    </context-param>
    
    <listener>
        <listener-class>org.apache.struts2.tiles.StrutsTilesListener</listener-class>
    </listener>

我们在 WEB-INF/lib 文件夹中有以下 jars

-rw-r--r-- 1 ryk6mkj 1049089  21175 Apr 20 15:21 tiles-el-2.2.2.jar
-rw-r--r-- 1 ryk6mkj 1049089 161001 Apr 20 15:22 tiles-core-2.2.2.jar
-rw-r--r-- 1 ryk6mkj 1049089  50740 Apr 20 15:22 tiles-jsp-2.2.2.jar
-rw-r--r-- 1 ryk6mkj 1049089  59739 Apr 20 15:22 tiles-servlet-2.2.2.jar
-rw-r--r-- 1 ryk6mkj 1049089  24466 Apr 20 15:22 tiles-template-2.2.2.jar
-rw-r--r-- 1 ryk6mkj 1049089  35898 Apr 20 15:22 tiles-api-2.2.2.jar
-rw-r--r-- 1 ryk6mkj 1049089  71270 Apr 20 15:36 tiles-request-api-1.0.0.jar
-rw-r--r-- 1 ryk6mkj 1049089  32629 Apr 20 15:54 tiles-portlet-2.2.2.jar

我看到 createContainerFactory() 方法在 AbstractTilesInitializer.java 类中是抽象的。不确定为什么不使用 StrutsTilesInitializer.java 或其他实现等实现?

任何线索为什么会发生这种情况?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)