私は、stackoverflowで同様のQをすべて調べましたが、それでも解決しませんでした。それらすべてとの主な違いは、エラーメッセージにEMPTYアクション名が表示されることです。グーグルは役に立たなかった:(誰かが問題の原因を探すためのヒントを与えることを願っています。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>
ページ: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";
}
}
まあ..画像は不可能なので、プロジェクトの構造は次のとおりです:
src/
----ValidateLogin.Java
WenCOntent
-----+User
--------+Pages
------------+HomePage.jsp
------------+Success.jsp
------------+Failure.jsp
-----+web.xml
-----+struts.xml
同様のエラーが発生しました。解決策は、「struts.xml」ファイルが「web」フォルダにあることでした。
「src」ソースフォルダーに存在する必要があります。
変更を加え、サーバーを再起動します。
デフォルトでは、プログラムはindex.jsp
を検出します。
[/]ディレクトリにindex.jsp
がない場合、そのエラーが発生します。
または、web.xml
で別のファイルを選択する必要があります
ソリューション:web.xml
のfilter-mapping
にこのコードを追加します
<welcome-file-list>
<welcome-file>/Pages/HomePage.jsp</welcome-file>
</welcome-file-list>
ありがとうございます。 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>
それでも誰かがこの問題を抱えているかどうかはわかりませんが、これは私がやったことです-
「helloaction.Java」クラスでパッケージ名を変更します
私を含むほとんどの人は、チュートリアルがどのように表示されるかを書くだけなので、何時間ものデバッグの後、ようやく問題が発生しました。
package com.tutorialspoint.struts2;
上記の行をaction(.Java)クラスに記述しました。これにより、srcフォルダーに「com.tutorialspoint」パッケージが作成されました。しかし、構文は実際にはcomパッケージ内にtutorialspointパッケージがあることを意味します。だから基本的にチュートリアルが持っていたのは
src->com->tutorialspoint->helloaction.Java
したがって、すべての検索から解決策が得られなかった後、.Javaクラスとstruts.xmlの両方でパッケージの名前を「practice」に変更したところ、問題なく動作しました。
src->practice->helloaction.Java
うまくいけば、誰かが私のように同じ過ちを犯していたとしたら...それは助けになりました。それは解決策ではないかもしれませんが、他のすべてがうまくいかなかったときに私にとってはうまくいきました。
最初に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"
struts.xmlファイル、<package name="default" namespace="/" extends="struts-default">
追加 namespace="/"
パッケージ内の属性
私も同じエラーが出ていました。 struts.xmlの場所をEclipseプロジェクトのsrcフォルダーのルートディレクトリに再配置することで問題を解決しました
struts.xmlファイルは、「WebContent/WEB-INF/classes /」フォルダーにある必要があります。