jsp - 没有为与上下文路径 [/Struts2Test] 关联的命名空间 [/] 和操作名称 [login] 映射的操作

标签 jsp configuration struts2 namespaces action

我是 Struts2 的初学者,我知道这个问题在这里被问过很多次,但我试图解决它并在这里阅读了很多线程,花了 6 个小时仍然无法让它工作。真的需要更多的建议...
这是我的包裹:

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 结果。
    现在我不知道,欢迎任何建议或提示......

    最佳答案

    Issues related to: There is no Action mapped for namespace and action name associated with context path


    如果您使用 URL 来调用操作,请确保此 URL 映射到 Struts 配置。要解决 URL 映射问题,您可以使用 config-browser插入。只需将此插件添加到您的项目依赖项,当它部署时,您就可以访问一个网站,该网站向您显示运行时配置和可用 URL 来调用该操作。例如,如果您在端口 8080 上本地运行 Tomcat 并将您的应用程序部署在 context ,然后您可以访问插件的 URL
    http://localhost:8080/[context]/config-browser/index.action
    
    您可以单击侧边栏命名空间下的操作页面上的任何可用操作。另请注意,如果您的操作未在包裹中找到,它可能在 default 中。包裹。 Struts 在 default 中做额外的搜索不在从 URL 映射的命名空间中的操作的命名空间。

    Check out the config-browser plugin to debug configuration issues.

    To map correctly url to the action two parameters are required: the action name and namespace.

    Struts loads xml configuration on startup and it should know the location of the struts.xml. By default it's looking on classpath to find a file with known name like struts.xml. Then it parses document and creates a runtime configuration. This configuration is used to find appropriate configuration element for the action url. If no such element is found during request, the 404 error code is returned with the message: There is no Action mapped for namespace and action name.

    Also this message contains a namespace and action names used to find the action config. Then you can check your configuration settings in struts.xml. Sometimes the action name and namespace, stored in ActionMapping point to the wrong action. These values are determined by the ActionMapper which could have different implementation, used by plugins.

    There's also another setting that might affect this mapper and mapping, but the point is the same if you get this message then URL is used didn't map any action config in runtime configuration. If you can't realize which URL you should use, you might try config-browser plugin to see the list of URLs available to use.

    关于jsp - 没有为与上下文路径 [/Struts2Test] 关联的命名空间 [/] 和操作名称 [login] 映射的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40650763/

    相关文章:

    java - 在表单中使用 multipart/form-data enctype 时无法将参数传递给 servlet

    android - 向操作栏添加配置选项 - Android 4.0+

    java - struts逻辑标签呈现html格式,JSTL标签不

    java - Struts 2 和 Hibernate 中的异常处理

    java - 执行 'view source' 时隐藏字段丢失

    jsp - jsp中如何将 double 转换为整数

    Java Webapp 在 Eclipse 中运行良好,但在 Tomcat 中运行不佳

    java - 如何修复Hibernate 5找不到映射的异常?

    java - Servlet 的 Servlet.service() 默认抛出异常 java.lang.NullPointerException

    java - 在 Web 上下文根之外动态编译和包含 JSP(X)