Java Struts 2应用程序在通过管理控制台部署时出错

Java Struts 2应用程序在通过管理控制台部署时出错,java,spring,struts2,weblogic-10.x,action-mapping,Java,Spring,Struts2,Weblogic 10.x,Action Mapping,我正在使用mavenized struts 2/spring应用程序运行weblogic 10.3.5。当通过eclipse发布到服务器时,应用程序运行良好,但当我将应用程序导出到.war文件并通过管理控制台部署并运行它时,会出现以下stacktrace错误 [[ACTIVE]ExecuteThread:'8'用于队列:'weblogic.kernel.Default' (自调整)“]WARN org.apache.struts2.dispatcher.dispatcher-可能 找不到操作或结

我正在使用mavenized struts 2/spring应用程序运行weblogic 10.3.5。当通过eclipse发布到服务器时,应用程序运行良好,但当我将应用程序导出到.war文件并通过管理控制台部署并运行它时,会出现以下stacktrace错误

[[ACTIVE]ExecuteThread:'8'用于队列:'weblogic.kernel.Default' (自调整)“]WARN org.apache.struts2.dispatcher.dispatcher-可能 找不到操作或结果:/eServices/login.action没有操作 映射了与关联的命名空间[/]和操作名称[login] 上下文路径[/e服务]。-[未知位置]位于 com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:185) 在 org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:63) 在 org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:37) 在 com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58) 在 org.apache.struts2.dispatcher.dispatcher.serviceAction(dispatcher.java:552) 在 org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) 在 org.apache.struts2.dispatcher.ng.filter.strutspreadexecutefilter.doFilter(strutspreadexecutefilter.java:99) 在 weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56) 在 oracle.security.jps.ee.http.JpsAbsFilter$1.run(JpsAbsFilter.java:111) 位于java.security.AccessController.doPrivileged(本机方法) oracle.security.jps.util.jpssObject.doAsPrivileged(jpssObject.java:313) 在 oracle.security.jps.ee.util.JpsPlatformUtil.runJaasMode(JpsPlatformUtil.java:413) 在 oracle.security.jps.ee.http.JpsAbsFilter.runJaasMode(JpsAbsFilter.java:94) 在 oracle.security.jps.ee.http.JpsAbsFilter.doFilter(JpsAbsFilter.java:161) 位于oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:71) 在 weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56) 在 oracle.dms.servlet.DMSServletFilter.doFilter(DMSServletFilter.java:136) 在 weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56) 在 weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3715) 在 weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3681) 在 weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) 在 weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120) 在 weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2277) 在 weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2183) 在 weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1454) 在weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)的 weblogic.work.ExecuteThread.run(ExecuteThread.java:178)

我发现有几篇帖子建议在我的类路径中添加struts.properties文件和以下配置,但没有解决我的问题

struts.convention.action.mapAllMatches=true struts.convention.action.includeJars=.?/eServices.?jar(!/)? struts.convention.action.fileProtocols=jar,zip

任何有助于理解或解决此问题的帮助都将非常有用!:)

下面是我的struts.xml,我使用了基于注释的配置将操作映射到结果

<!-- Struts Constants that override the struts.properties file -->
<constant name="struts.devMode" value="false" />
<constant name="struts.custom.i18n.resources" value="global" />
<constant name="struts.ui.theme" value="simple" />
<!-- <constant name="struts.ui.theme" value="css_xhtml" /> -->


以下是web.xml文件:

<display-name>eServices</display-name>
<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

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

    <!-- Needed to manage the Java based @Configuration classes for Spring -->
    <context-param>
        <param-name>contextClass</param-name>
        <param-value>
         org.springframework.web.context.support.AnnotationConfigWebApplicationContext
        </param-value>
    </context-param>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>com.ceiwc.es.config</param-value>
    </context-param>

    <!-- Handles Strut2 URL requests -->
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
e服务
index.jsp
org.springframework.web.context.ContextLoaderListener
上下文类
org.springframework.web.context.support.AnnotationConfigWebApplicationContext
上下文配置位置
com.ceiwc.es.config
支柱2
org.apache.struts2.dispatcher.ng.filter.strutspreadexecutefilter
支柱2
/*

这是最终奏效的解决方案!我添加了以下Struts2属性:

<constant name="struts.convention.action.includeJars" value=".*?\.jar(!/|/)?" />
<constant name="struts.convention.action.fileProtocols" value="jar,zip" />

这是基于我在这里发现的

此外,将此属性添加到weblogic.xml也可能有所帮助:

<wls:container-descriptor>
    <wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes>
</wls:container-descriptor>

真的

我已经用struts.xml更新了这篇文章。我想重复一下,我使用了基于注释的配置,所以我没有太多关于这个文件的内容@AndreaLigiosPlease,也显示您的web.xml。。。以及login.java/.class在目录中的位置tree@AndreaLigios我再次更新了web.xml。Login.java位于src/main/java-->com.packagename-->Login.java内。一定有某种weblogic配置,因为通过eclipse部署应用程序时运行良好。我不清楚您是否试图使用约定插件(Struts2注释)或Spring工具来实例化操作。在这两种情况下,都可能会缺少一些内容:按照惯例,您可能需要一个名为struts、struts2、action或actions的包作为注释扫描的根文件夹;对于Spring,我总是看到Spring以另一种方式管理struts2操作,并最终以另一种方式进行实例化。。。(你可以在上面找到它们)。请澄清问题以获得更好的帮助+1对于工作btwhello@AndreaLigios,所有操作都由spring实例化和管理。据我所知,唯一使用的struts2注释是定义操作及其相应结果的
@action
@results
,以及定义操作名称空间的
@Namespace