Eclipse中使用Maven的Struts2配置冲突

问题描述 投票:0回答:2

我正在将一些旧的遗留应用程序升级到 Maven。这些应用程序在 WebSphere Application Server 传统 8.5.5 中运行,我使用 Eclipse 4.16.0 来运行 WAS 服务器。

它编译得很好,但是,当我尝试访问使用 Struts 构建的 Web 应用程序时,浏览器中出现以下错误消息:

Error 500: javax.servlet.ServletException: Filter [struts2]: could not be initialized

并且,在服务器日志中,我有以下内容:

[30/05/23 10:37:26:986 BRT] 000000b6 webapp        E com.ibm.ws.webcontainer.webapp.WebApp logServletError SRVE0293E: [Servlet Error]-[com.ibm.ws.webcontainer.extension.DefaultExtensionProcessor]: Unable to load configuration. - bean - wsjar:file:/C:/Users/DouglasCanevarollo/Desktop/ibm/evs/evs-maven/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/evs-ip-upload/WEB-INF/lib/struts2-core-6.1.2.jar!/struts-default.xml:116:72
    at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:566)
    at org.apache.struts2.dispatcher.InitOperations.initDispatcher(InitOperations.java:48)
    at org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:60)
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.init(FilterInstanceWrapper.java:145)
...
Caused by: Bean type class com.opensymphony.xwork2.ObjectFactory with the name struts has already been loaded by bean - wsjar:file:/C:/Users/DouglasCanevarollo/.m2/repository/org/apache/struts/struts2-core/6.1.2/struts2-core-6.1.2.jar!/struts-default.xml:116:72 - bean - wsjar:file:/C:/Users/DouglasCanevarollo/Desktop/ibm/evs/evs-maven/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/evs-ip-upload/WEB-INF/lib/struts2-core-6.1.2.jar!/struts-default.xml:116:72
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.register(XmlConfigurationProvider.java:263)
    ... 34 more

如何解决这个冲突?

这些是我的 Struts 配置文件:

struts.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 6.0.//EN"
    "http://struts.apache.org/dtds/struts-6.0.dtd">
 <struts>
    ...
 
    <!-- Package -->
    <package name="default" namespace="/protect" extends="struts-default">
    
        <!-- Action Mappings -->
        <action name="uploadIpDb" method="runInit" class="com.ibm.comexp.ipupload.action.IPUploadAction" >
            <result>/home.jsp</result>
        </action>
        ...
    </package>

 </struts>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="3.0" 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_3_0.xsd">
    
    ...
    
    <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>
eclipse maven configuration struts2
2个回答
1
投票

原因:名称为struts的Bean类型类com.opensymphony.xwork2.ObjectFactory已被加载

不要在类路径上两次使用同一个库

struts2-core-6.1.2.jar
。 struts 配置包含在这个库中的
struts-default.xml
中。它应该只在 struts2 过滤器初始化时加载一次。部署应用程序后,从类路径中删除重复的库。


0
投票

使用罗马答案,我设法通过将库放入 WEB-INF/lib 文件夹而不是 EAR lib 目录中来解决我的问题。

© www.soinside.com 2019 - 2024. All rights reserved.