servlet requerido recurso not found está estado error disponible java struts2 struts2-namespace action-mapping

java - requerido - estado http 404 – not found eclipse tomcat



Estado de HTTP 404: no hay ninguna acción asignada para el espacio de nombres (6)

Aprendí la teoría de Struts2 y ahora practico. Enfrentando problemas durante la ejecución del proyecto. Busqué en Google de muchas maneras, pero no pude encontrar el resultado. Por favor, ayúdeme. A continuación está el código. Por favor, ayúdenme amigos ...

Estructura del proyecto:

web.xml

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>struts2</display-name> <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>login.jsp</welcome-file> </welcome-file-list>

struts.xml

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="resources" value="ApplicationResources" /> <constant name="struts.devMode" value="true" /> <package name="default" extends="struts-default"> <action name="login" class="com.practice.structs.actions.LoginAction" method="validateUser"> <result name="success">pages/homepage.jsp</result> <result name="error">pages/login.jsp</result> </action> </package>

LoginAction.java

package com.practice.structs.actions; import com.opensymphony.xwork2.ActionSupport; public class LoginAction extends ActionSupport { private String userName; private String password; public String validateUser(){ if(this.userName.equalsIgnoreCase("abc") && this.password.equalsIgnoreCase("abc")) { return "success"; }else{ addActionError(getText("error.login")); return "error"; } } /** * @return the userName */ public String getUserName() { return userName; } /** * @param userName the userName to set */ public void setUserName(String userName) { this.userName = userName; } /** * @return the password */ public String getPassword() { return password; } /** * @param password the password to set */ public void setPassword(String password) { this.password = password; } }

login.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib prefix="s" uri="/struts-tags" %> <html> <head> <title>Login page</title> </head> <body> <H1><I>Login Page</I></H1> <s:actionerror /> <s:form action="login.action" method="post"> <s:textfield name="uname" key="label.username" size="20"/> <s:password name="password" key="label.password" size="20"/> <s:submit method="execute" key="label.login" align="center"/> </s:form> </body> </html>

homepage.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@taglib prefix="s" uri="/struts-tags" %> <html> <head> <title>Home Page</title> </head> <body> <H2><I>Welcome</I></H2> </body> </html>


Sé que esta pregunta está un poco desactualizada, pero también pensé que vale la pena mencionarla, a los que terminan tropezando con esta publicación nuevamente y todavía experimentan el problema; suponiendo que esté 100% seguro de que sus asignaciones son correctas y que su web.xml contiene el filtro apropiado, intente lo siguiente:

  1. Detenga su servidor Tomcat
  2. Crea una carpeta de "clases" en tu carpeta "WEB-INF"
  3. Mueva su archivo struts.xml a la carpeta "classes" recién creada
  4. Haga clic con el botón derecho en su Servidor Tomcat y seleccione "Limpiar": no es obligatorio, pero lo recomendaría.
  5. Pon en marcha Tomcat nuevamente y espera lo mejor :-)

Como ayuda visual, su WEB-INF debería terminar luciendo algo como esto:

Si sigues experimentando el problema, vuelve a verificar tus asignaciones de struts, así como a tu web.xml


realice los cambios en el archivo struts.xml, agregue el namespace="/" en el atributo <package name="default" namespace="/" extends="struts-default">


cambia tu código así

<package name="default" namespace="/" extends="struts-default"> <action name="login" class="com.practice.structs.actions.LoginAction" method="validateUser"> <result name="success">pages/homepage.jsp</result> <result name="error">pages/![enter image description here][1]login.jsp</result> </action> </package> <s:form action="login" method="post"> <s:textfield name="uname" key="label.username" size="20"/> <s:password name="password" key="label.password" size="20"/> <s:submit method="execute" key="label.login" align="center"/> </s:form>

su nombre de acción en la forma es action.login y en struts.xml es el inicio de sesión ambos deben ser iguales y también agregar el espacio de nombres


En sus propiedades de LoginAction.java que tomó son

private String userName; private String password;

Pero en ti login.jsp escribiste como

<s:textfield name="uname" key="label.username" size="20"/> <s:password name="password" key="label.password" size="20"/>

Cambio

<s:textfield name="uname" key="label.username" size="20"/> a

<s:textfield name="userName" key="label.username" size="20"/>

Espero que esta respuesta resuelva tu problema ...


No tengo suficientes puntos para responder el comentario de Ryan ni calificarlo, pero lo que él dice es una solución válida en casos concretos, y voy a decir por qué.

A veces, las carpetas que creas en un proyecto no se toman como recursos de la aplicación y tienes que configurarlo.

Permítanme explicarme con un ejemplo práctico que puede haber ocurrido a algunos compañeros que pidieron este problema:

Cuando está desarrollando con Eclipse, tal vez elija otro explorador de proyectos distinto del "Explorador de proyectos" predeterminado de Eclipse, como el "Navegador", por ejemplo. Con la vista "Navegador", puede crear carpetas, pero estas carpetas no son recursos de paquete (como lo son cuando se crean "recursos de paquete" con el "Explorador de proyectos" predeterminado), por lo que Struts2 no puede encontrar el archivo "struts.xml" para configurar las acciones. Por lo tanto, las únicas carpetas que procesará su proyecto como "recursos de paquete" son las que están en WEB-INF como lo hace Eclipse en "Proyectos web dinámicos" de forma predeterminada.

Entonces, asegúrese de tener todos los archivos de configuración en un "recurso de paquete".


Para resolver este problema, tuve que crear una carpeta de clases en WEB-INF y colocar allí el archivo struts.xml . Luego puse los archivos .jsp en la carpeta web y coloqué ''/'' antes de los archivos /x.jsp , por ejemplo /x.jsp