jsp - Struts2 No hay ninguna acción asignada para el espacio de nombres
configuration namespaces (1)
Soy un principiante de Struts2, sé que esta pregunta se ha hecho aquí muchas veces, pero traté de resolverlo y leer muchos hilos aquí, pasar 6 horas y todavía no puedo hacer que funcione. Realmente necesito más sugerencias ...
Aquí está mi paquete
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
Mi 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>
Y también, 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>
El servidor es Tomcat 8.0.38, comienza sin error. Pero cuando tengo acceso
me da este error (como título) y si tengo acceso
Obtendré un resultado 404 normal.
Ahora no tengo idea, cualquier sugerencia o sugerencia es bienvenida ...
Problemas relacionados con: No hay una acción asignada para el espacio de nombre y el nombre de acción asociados con la ruta de contexto
Si usa la url para llamar a una acción, asegúrese de que esta URL esté asignada a la configuración de struts. Para solucionar el problema con el mapeo de url, puede usar el complemento config-browser. Simplemente agregue este complemento a las dependencias de su proyecto y cuando se implemente, puede acceder a un sitio web que le muestra una configuración en tiempo de ejecución con direcciones URL disponibles para invocar la acción. Por ejemplo, si está ejecutando Tomcat localmente en el puerto 8080 y desplegó su aplicación en el context
, puede acceder a la URL del complemento con
http://localhost:8080/[context]/config-browser/index.action
Puede hacer clic en cualquier acción disponible en la página de acciones debajo del espacio de nombres en la barra lateral. También tenga en cuenta que si su acción no se encuentra en el paquete, podría estar en el paquete default
. Struts realiza una búsqueda adicional en el espacio de nombres default
para la acción que no se encuentra en el espacio de nombres correlacionado con la URL.
Consulte el complemento config-browser para depurar problemas de configuración.
Para asignar correctamente la URL a la acción, se requieren dos parámetros: el nombre de la acción y el espacio de nombres.
Struts carga la configuración xml en el inicio y debe conocer la ubicación de
struts.xml
. De forma predeterminada, busca en classpath para encontrar un archivo con nombre conocido comostruts.xml
. Luego analiza el documento y crea una configuración en tiempo de ejecución. Esta configuración se usa para encontrar el elemento de configuración apropiado para la url de acción. Si no se encuentra dicho elemento durante la solicitud, el código de error 404 se devuelve con el mensaje:There is no Action mapped for namespace and action name
.Además, este mensaje contiene un espacio de nombres y nombres de acción utilizados para encontrar la configuración de acción. Luego puede verificar sus configuraciones en
struts.xml
. A veces, el nombre de la acción y el espacio de nombres, almacenados enActionMapping
apuntan a la acción incorrecta. Estos valores están determinados porActionMapper
que podría tener una implementación diferente, utilizada por los complementos.También hay otra configuración que podría afectar a este correlacionador y al mapeo, pero el punto es el mismo si se recibe este mensaje, luego se usa la URL, no se asignó ninguna configuración de acción en la configuración del tiempo de ejecución. Si no puede saber qué URL debe usar, puede probar el complemento config-browser para ver la lista de URL disponibles para usar.