【问题标题】:The Struts dispatcher cannot be found while deploy部署时找不到 Struts 调度程序
【发布时间】:2014-07-29 11:51:17
【问题描述】:

当我尝试在 WL Server 9.2 上运行我的 Spring + Struts 2 项目时(我必须使用这个版本,所以请不要让我使用更新版本的 WL Server),我遇到了这个错误。

浏览器中的URL地址是:

http://localhost:7003/SpringStrust2/

完整的堆栈跟踪:

The Struts dispatcher cannot be found.  This is usually caused by using Struts tags without the associated filter. Struts tags are only usable when the request has passed through its servlet filter, which initializes the Struts dispatcher needed for this tag. - [unknown location]
at org.apache.struts2.views.jsp.TagUtils.getStack(TagUtils.java:60)
at org.apache.struts2.views.jsp.StrutsBodyTagSupport.getStack(StrutsBodyTagSupport.java:44)
at org.apache.struts2.views.jsp.ComponentTagSupport.doStartTag(ComponentTagSupport.java:48)
at jsp_servlet.__user._jsp__tag0(__user.java:115)
at jsp_servlet.__user._jspService(User.jsp:12)
at weblogic.servlet.jsp.JspBase.service(JspBase.java:34)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:283)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:175)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3269)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2019)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:1925)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1394)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:181)

这是我的 web.xml:

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

<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>

<welcome-file-list>
    <welcome-file>User.jsp</welcome-file>
</welcome-file-list>

struts.xml:

<struts>
<constant name="struts.enble.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<constant name="struts.custom.i18n.resources" value="myapp" />

<package name="default" extends="struts-default">
    <action name="user" class="user">
        <result name="success">/success.jsp</result>
        <result name="input">/User.jsp</result>
    </action>
</package>
</struts>

user.jsp:

<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Spring + Struts2</title>
</head>

<body>
    <s:form action="user" method="addUser">
        <s:textfield name="username" key="user.name" />
        <s:submit key="submit" />
    </s:form>
</body>
</html>

我非常确定将文件放在正确的文件夹中,包括 lib 文件夹中的 jar 库...

这是我正在使用的 jar 列表:

antlr-runtime-3.0.jar 
commons-fileupload-1.2.1.jar
commons-io-1.3.2.jar
commons-lang3-3.1.jar
commons-logging-1.1.jar
freemarker-2.3.13.jar 
junit-3.8.1.jar 
ornl-2.6.11.jar 
org.springframework.asm-3.9.9.M3.jar
org.springframework.beans-3.0.0.M3.jar
org.springframework.context-3.0.0.M3.jar
org.springframework.core-3.0.0.M3.jar
org.springframework.web-3.0.0.M3.jar
org.springframework.web.servlet-3.0.0.M3.jar
struts2-convention-plugin-2.1.6.jar 
struts2-core-2.1.6.jar
struts2-spring-plugin-2.1.6.jar
xwork-2.1.2.jar

【问题讨论】:

  • 您认为您在此处发布的信息是否足够?并且您的 Struts 版本已经过时,如果您需要帮助,请尽快升级到最新版本。

标签: java spring jsp struts2 weblogic


【解决方案1】:

您正在访问 User.jsp 文件(带有其 S2 标签),而没有执行错误所述的操作。

您可以:

  • 从欢迎文件重定向到 Struts 操作(一种常见的技术,而且很简单)
  • 配置容器以允许操作作为欢迎文件
  • 从欢迎文件中删除 S2 标签

【讨论】:

  • 好的,我确实注释了 web.xml 文件中的welcome-file-list 部分。当我尝试部署它时,出现错误:“
  • 您缺少一个依赖项。这是一个新错误,也是一个新问题。
【解决方案2】:

我遇到了同样的问题。我的 Struts 2 应用程序像黄油刀一样在 localhost 上运行,但在 VPS 上却失败了。最后解决方案是项目中的Web-Inf文件夹与Tomcat的web-inf文件夹冲突。

所以将你的 project/web-inf/web.xml 内容移动到 usr/local/easy/share/easy-tomcat7/conf(用于 Cent 操作系统)

并将您的 jar 从 youtproject/web-inf/lib 移动到 usr/local/easy/share/easy-tomcat7/lib(用于 Cent 操作系统)

对于其他操作系统,在各自的路径上做同样的事情..

希望这会有所帮助..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-24
    • 2015-09-28
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-09
    • 1970-01-01
    相关资源
    最近更新 更多