Нет действия, сопоставленного для пространства имен [/] и имени действия [], связанного с путем контекста

Я просмотрел все подобные вопросы на stackoverflow, но это не помогло, извините. Основное отличие у меня от всех них в том, что я получил ПУСТОЕ имя действия в сообщении об ошибке. Поиск в Google не помог :( Надеюсь, кто-то просто подскажет, где искать источник проблемы. Спасибо.

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)

веб.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>

Страницы: 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>

Успех.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>

Неудача.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";
}
}

хорошо.. изображение невозможно, поэтому структура проекта:

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

person pinkesh    schedule 08.08.2014    source источник
comment
Ошибка именно то, о чем говорится в сообщении: вы пытаетесь получить доступ к /, по-видимому, например, нет имени действия. Там не настроено действие, все ваши действия имеют имена, например /login и /validateLogin. Кроме того, страницы JSP должны располагаться под WEB-INF, чтобы избежать прямого доступа клиента. И, пожалуйста, подумайте о лучшей гигиене отступов.   -  person Dave Newton    schedule 08.08.2014
comment
Большое спасибо, Дэйв. Не могли бы вы предложить, какие изменения я должен внести в struts.xml, чтобы исправить это. Я попытался поместить страницы JSP в WEB-INF, но все равно получил ту же ошибку.   -  person pinkesh    schedule 08.08.2014
comment
Вы используете затмение?   -  person prem30488    schedule 08.08.2014
comment
Какой URL вы вводите, кажется http://localhost:8080/Struts-Example?   -  person Roman C    schedule 08.08.2014
comment
Роман: Я использую localhost:8080/LoginApplication/login.action   -  person pinkesh    schedule 08.08.2014
comment
Парт: Я использую Eclipse. Я исправил спецификацию класса, но у меня все еще та же проблема.   -  person pinkesh    schedule 08.08.2014


Ответы (8)


Я также получал аналогичную ошибку. Решение заключалось в том, что файл «struts.xml» находился в папке «web».

Он ДОЛЖЕН находиться в исходной папке «src».

Внесите изменения и перезапустите сервер.

person happy    schedule 18.06.2015

По умолчанию программа найдет index.jsp.
Если в вашем каталоге [/] нет index.jsp, произойдет эта ошибка.
Или вам нужно выбрать другой файл в web.xml

Решение.
В web.xml добавьте этот код под filter-mapping

<welcome-file-list>
        <welcome-file>/Pages/HomePage.jsp</welcome-file>
</welcome-file-list>
person thangdc94    schedule 27.01.2016

Спасибо всем. Я изменил свой struts.xml, как показано ниже, исправив упомянутые ошибки и соглашение об именах, и смог решить проблему.

<?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>
person pinkesh    schedule 11.08.2014

Я не знаю, есть ли у кого-нибудь эта проблема, но это то, что я сделал:

измените имя вашего пакета в классе «helloaction.java»

Большинство людей, включая меня, просто пишут, как показано в учебнике, поэтому после нескольких часов отладки я наконец понял проблему.

package com.tutorialspoint.struts2;

Я написал указанную выше строку в своем классе действий (.java). который создал пакет "com.tutorialspoint" в папке src. Но синтаксис на самом деле означает, что внутри пакета com есть пункт tutorialspoint. Итак, что в основном было в учебнике, было

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

Поэтому, не получив решения от всех поисков, я изменил имя своего пакета на «практика» как в классе .java, так и в struts.xml, и он работал нормально.

src->practice->helloaction.java

Надеюсь, если кто-то совершал ту же ошибку, что и я... это помогло. Это может быть не решение, но это сработало для меня, когда все остальное не сработало.

person Natasha    schedule 17.02.2016

Сначала узнайте, как указать класс в struts.xml

class="/LoginApplication/src/ValidateLogin" неправильный способ указать

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

Вы должны исправить это и написать class="ValidateLogin", если имя файла ValidateLogin.java

Если файл класса java находится в каком-то пакете, он должен быть

class="yourPackageName.ValidateLogin"
person prem30488    schedule 08.08.2014

Я также получал ту же ошибку. Проблема решена путем перемещения местоположения struts.xml в корневой каталог папки src в проекте eclipse.

person Lukman    schedule 31.01.2016

внесите изменения в файл struts.xml, <package name="default" namespace="/" extends="struts-default"> добавьте атрибут namespace="/" в пакет

person Karthik Kompelli    schedule 07.07.2016

Файл struts.xml должен находиться в папке «WebContent/WEB-INF/classes/».

person Parth Patel    schedule 08.02.2017