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

20,150

Solution 1

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

Solution 2

I know this question is a bit outdated, but I also thought it's worth mentioning, to those who happen to end up stumbling onto this post again and still experiencing the issue; assuming you're 100% sure that your mappings are correct and that your web.xml contains the appropriate filter, try the following:

  1. Stop your Tomcat server
  2. Create a "classes" folder in your "WEB-INF" folder
  3. Move your struts.xml file into the newly created "classes" folder
  4. Right click on your Tomcat Server and select "Clean" - not required, but would recommend doing so.
  5. Start up Tomcat again and hope for the best :-)

As a visual aid, your WEB-INF should end up looking something like this:

enter image description here

If you're still experiencing the issue, double check your struts mappings again, as well as your web.xml

Solution 3

I don't have enough points to respond Ryan's comment nor rate him, but what he says is a valid solution in concrete cases, and I am going to tell why.

Sometimes the folders you create in a project are not taken as resources of the application, and you have to configure it.

Let me explain myself with a practical example that may have occurred to some mates who asked for this problem:

When you are developing with Eclipse, maybe you choose another project explorer than the Eclipse's default "Project Explorer", as the "Navigator", for example. Using "Navigator" view, you can create folders, but this folders are not package resources (as they are when you create "package resources" with the default "Project Explorer"), so Struts2 cannot find "struts.xml" file to configure the actions. So, the only folders that your project will process as "package resources" are the ones under WEB-INF as Eclipse do in "Dynamic Web Projects" by default.

So then, be sure of having all the configuration files in a "package resource".

Share:
20,150
user2940073
Author by

user2940073

Updated on July 09, 2022

Comments

  • user2940073
    user2940073 almost 2 years

    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>