HTTP Status 404 - There is no Action mapped for namespace [/] and action name [login] associated with context path [/struts2]

user2940073 picture user2940073 · Dec 17, 2013 · Viewed 19.9k times · Source

I have learned theory of Struts2 and now practicing. Facing problems while executing project.I searched in Google in many ways but could not find result.Please help me. Below is the code.Please help me friends...

Project structure:

Project structure

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>

Answer

Lijo picture Lijo · Dec 17, 2013

change your code like this

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

your action name in form is action.login and in struts.xml is login both should be same and also add the namespace