There is no Action mapped for namespace [/] and action name [] associated with context path [duplicate]

≡放荡痞女 提交于 2019-11-29 10:24:44

问题


This question already has an answer here:

  • Struts2 There is no Action mapped for namespace [/] and action name [login] associated with context path [/Struts2Test] 3 answers

I've looked through all similar Q's on stackoverflow but it didn't help, sorry. The main difference I have from all of them is that I got EMPTY action name in error message. Googling didn't help :( Hope someone just could give a hint where to look for the source of the problem. thx

Error:

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

--------------------------------------------------------------------------------

type Status report

message There is no Action mapped for namespace [/] and action name [] associated with context path [/LoginApplication].

description The requested resource (There is no Action mapped for namespace [/] and action name [] associated with context path [/LoginApplication].) is not available.

WARNING: Could not find action or result: /LoginApplication/
There is no Action mapped for namespace [/] and action name [] associated with context path [/LoginApplication]. - [unknown location]
    at com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:185)
    at org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:63)
    at org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:37)
    at com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58)
    at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:552)
    at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
    at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

web.xml

<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
<display-name>Struts 2 Web Application</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>

</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>
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<constant name="struts.devMode" value="true" />

<constant name="struts.custom.i18n.resources" value="ApplicationResources" />

<package name="user" namespace="/" extends="struts-default">
<!-- http://localhost:8080/Struts-Example/User/Login.action -->
<action name="login">
<result>/Pages/HomePage.jsp</result>
</action>

<action name="validatelogin" class="/LoginApplication/src/ValidateLogin"
method="execute">
<result name="Success">/Pages/Success.jsp</result>
<result name="Failure">/Pages/Failure.jsp</result>

</action>
</package>
</struts>

Pages: HomePage.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ 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>
<title>Validate Login</title>
</head>
<body>
<s:form action="login" method="execute">
<s:textfield name="username" key="Username" size="20" />
<s:password name="password" key="Password" size="20" />
<s:submit />
</s:form>
</body>
</html>

Success.jsp

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>

<head>
<title>Login Application - Authorized</title>
</head>

<body>
Congratulations, <s:property value="username" />!
Welcome to Struts 2 world.
</body>
</html>

Failure.jsp

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>

<head>
<title> Login Application - Unauthorized</title>
</head>

<body>
Sorry, You have entered an invalid Username / Password
</body>
</html>

ValidateLogin.java

public class ValidateLogin 
{
public String username;
public String password;

public String getUsername() 
{
    return username;
}

public void setUsername(String username) 
{
    this.username = username;
}

public String getPassword() 
{
    return password;
}

public void setPassword(String password) 
{
    this.password = password;
}

public String execute() 
{
    if (this.username.equals("pinkesh") &&    
this.password.equals("pinkesh"))//((this.username.equals("pinkesh")) &   
(this.password.equals("pinkesh")))
        return "Success";
    else
        return "Failure";
}
}

well..image is impossible so the project structure is:

src/
----ValidateLogin.Java
WenCOntent
-----+User
--------+Pages
------------+HomePage.jsp
------------+Success.jsp
------------+Failure.jsp
-----+web.xml
-----+struts.xml

回答1:


I was also getting similar error. The resolution was that "struts.xml" file was in "web" folder.

It MUST be in the "src" source folder.

Make the change and restart the server.




回答2:


By default, the program will find index.jsp.
If you don't have index.jsp in your [/] directory, that error will happen.
Or you have to choose another file in web.xml

Solution:
In your web.xml add this code under filter-mapping

<welcome-file-list>
        <welcome-file>/Pages/HomePage.jsp</welcome-file>
</welcome-file-list>



回答3:


Thanks to all. I changed my struts.xml as below correcting the errors mentioned and the naming convention and was able to solve the issue.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
<constant name="struts.devMode" value="true" />

<package name="user" namespace="/User" extends="struts-default">
    <action name="login">
        <result>pages/HomePage.jsp</result>
    </action>

    <action name="ValidateLogin" class="com.user.struts.ValidateLogin" method="execute">
        <result name="SUCCESS">pages/Success.jsp</result>
        <result name="FAILURE">pages/Failure.jsp</result>
    </action>

</package>  
</struts>



回答4:


I don't know if anyone still has this problem but this is what i did-

change your package name in "helloaction.java" class

Most of the people, including me just write how a tutorial shows so after hours of debugging i finally got the problem.

package com.tutorialspoint.struts2;

I had written the above line in my action(.java) class. which made a package "com.tutorialspoint" in src folder. But the syntax actually means there is a package tutorialspoint inside com package. So what basically the tutorial had was

src->com->tutorialspoint->helloaction.java

So after getting no solution from all the search i changed the name of my package to "practice" in both .java class & struts.xml and it worked fine.

src->practice->helloaction.java

Hopefully if anyone was doing the same mistake like me...it helped. It may not be the solution but it worked for me when everything else didn't.




回答5:


First learn how to specify a class in struts.xml

class="/LoginApplication/src/ValidateLogin" is wrong way to specify

<action name="validatelogin" class="/LoginApplication/src/ValidateLogin" <- this is wrong 
  method="execute">
     <result name="Success">/Pages/Success.jsp</result>
     <result name="Failure">/Pages/Failure.jsp</result>
</action>

You should correct it and write class="ValidateLogin" if the file name is ValidateLogin.java

If the java class file is in some package then it should be

class="yourPackageName.ValidateLogin"



回答6:


I was also getting the same error. Solved the issue by relocating the struts.xml location to the root directory of src folder in eclipse project




回答7:


make the changes on struts.xml file, <package name="default" namespace="/" extends="struts-default"> add namespace="/" attribute in package




回答8:


struts.xml file must in : "WebContent/WEB-INF/classes/" folder.



来源:https://stackoverflow.com/questions/25207816/there-is-no-action-mapped-for-namespace-and-action-name-associated-with-c

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!