Struts2没有为命名空间和与上下文path相关联的操作名称

我是Struts2的初学者,我知道这个问题在这里被问了很多次,但我试图解决这个问题,并在这里读了很multithreading,花了6个小时,仍然无法工作。 真的需要更多的build议…

这是我的包

Struts2Test +Struts2Test/src +tw.com.rrstudio.java.test -TestAction.java +Struts2Test/build +Struts2Test/WebContent +Struts2Test/WebContent/META-INF +Struts2Test/WebContent/WEB-INF/classes +Struts2Test/WebContent/WEB-INF/lib -Struts2Test/WebContent/WEB-INF/spring-context.xml -Struts2Test/WebContent/WEB-INF/spring-mvc.xml -Struts2Test/WebContent/WEB-INF/struts.xml -Struts2Test/WebContent/WEB-INF/struts2-action.xml -Struts2Test/WebContent/WEB-INF/web.xml -Struts2Test/WebContent/error.jsp -Struts2Test/WebContent/index.jsp -Struts2Test/WebContent/TestAction.jsp 

我的web.xml

 <?xml version="1.0" encoding="UTF-8"?> <web-app 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" version="3.0"> <display-name>Struts2Test</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/spring-context.xml /WEB-INF/spring-mvc.xml </param-value> </context-param> <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> <init-param> <param-name>actionPackages</param-name> <param-value>tw.com.rrstudio.java.test</param-value> </init-param> </filter> <jsp-config> <taglib> <taglib-uri>HTTP://java.sun.com/jsp/jstl/core</taglib-uri> <taglib-location>/WEB-INF/lib/tld/c.tld</taglib-location> </taglib> <jsp-property-group> <url-pattern>*.jsp</url-pattern> <page-encoding>UTF-8</page-encoding> </jsp-property-group> </jsp-config> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> <session-config> <session-timeout>10</session-timeout> </session-config> </web-app> 

还有,struts.xml

 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <!-- struts 2.3.16.3 has problem of security,needing to set DynamicMethodInvocation=false --> <constant name="struts.enable.DynamicMethodInvocation" value="false" /> <constant name="struts.devMode" value="false" /> <constant name="struts.objectFactory" value="spring" /> <constant name="struts.action.extension" value="do"/> <constant name="struts.action.excludePattern" value="/jsp/.*?,/image/.*?,/css/.*?,/js/.*?,.*\\.jsp"/> <package name="default" extends="json-default" ></package> <package name="Strut2Test" extends="json-default" > <global-results> <result name="SystemErrorPage">/WebContent/error.jsp</result> </global-results> <action name="login" class="tw.com.rrstudio.java.test.TestAction"> <result name="index">/WebContent/index.jsp</result> <result name="success">/WebContent/TestAction.jsp</result> </action> </package> </struts> 

的index.jsp

 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <%@ taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <META HTTP-EQUIV="Refresh" CONTENT="0;URL=login.action"> <title>Index of Struts2Test</title> </head> <body> <h1>Index of Struts2Test</h1> <form action="testAction" method="post"> <label for="name">Please enter your name</label><br/> <input type="text" name="name"/> <input type="submit" value="Say Hello"/> </form> </body> </html> 

服务器是Tomcat 8.0.38,它从没有错误开始。 但是当我访问

  • http://127.0.0.1:8080/Struts2Test/
  • http://127.0.0.1:8080/Struts2Test/login

它给了我这个(作为标题)错误,如果我访问

  • http://127.0.0.1:8080/Struts2Test/index.jsp

我会得到一个正常的404结果。

现在我不知道,任何build议或提示,欢迎…

与以下相关的问题:没有为与上下文path相关联的名称空间和操作名称映射的操作

如果使用url来调用动作,请确保将此url映射到strutsconfiguration。 要排除URL映射问题,您可以使用config-browser插件。 只需将此插件添加到您的项目依赖关系中,并且在部署时,您可以访问一个网站,向您显示一个运行时configuration,包含可用的URL以调用该操作。 例如,如果您在本地端口8080上运行Tomcat,并在context部署了您的应用程序,那么您可以访问该插件的URL

 http://localhost:8080/[context]/config-browser/index.action 

您可以单击边栏上名称空间下的操作页面上的任何可用操作。 另请注意,如果您的操作未在软件包中find,则可能是default软件包。 Struts在default命名空间中进行额外的search,这个命名空间不在从URL映射的命名空间中。


查看config-browser插件来debuggingconfiguration问题。

要正确地将url映射到操作,需要两个参数:操作名称和命名空间。

Struts在启动时加载xmlconfiguration,它应该知道struts.xml的位置。 默认情况下,它在类path上查找名称类似struts.xml的文件。 然后它parsing文档并创build一个运行时configuration。 该configuration用于为动作urlfind适当的configuration元素。 如果在请求期间没有find这样的元素,404错误代码将返回消息: There is no Action mapped for namespace and action name

此消息还包含用于查找操作configuration的名称空间和操作名称。 然后你可以在struts.xml检查你的configuration设置。 有时存储在ActionMapping的动作名称和命名空间指向错误的动作。 这些值由ActionMapper确定,它可以有不同的实现,被插件使用。

还有另一个可能会影响这个映射器和映射的设置,但是如果你得到这个消息,那么这个点是一样的,那么在运行时configuration中使用的URL不会映射任何动作configuration。 如果你不知道你应该使用哪个URL,你可以尝试使用config-browser插件来查看可用的URL列表。