5

私は Struts 2 が初めてで、Struts 2(Koushik) のビデオ チュートリアルに従っています。チュートリアルで作成したものと同じように、Struts.xml、アクション クラス、および JSP を作成しました。ただし、次の例外があります。

例外:

Jan 13, 2014 9:30:48 PM org.apache.struts2.dispatcher.Dispatcher warn
WARNING: Could not find action or result: /Struts2Starter/getTutorial.action
There is no Action mapped for namespace [/] and action name [getTutorial] associated with context path [/Struts2Starter]. - [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:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

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>

    <package name="default" extends="struts-default">
        <action name="getTutorial" class="org.koushik.javabrains.action.TutorialAction">
            <result name="success">/success.jsp</result>
            <result name="error">/error.jsp</result>
        </action>

    </package>

</struts>

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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>Struts2Starter</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>

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

TutorialAction.java (私が使用している Action クラス)

package org.koushik.javabrains.action;

public class TutorialAction {


    public String execute(){
        System.out.println("Hello from execute");
        return "success";
    }
}

プロジェクトの構造

アプリケーションの構造

success.jsp と error.jsp は、テキストを含む通常の jsp ファイルです。グーグルでこの問題を解決するために多くのことをしました。しかし、これは何も解決しませんでした。この背後にあるものを知っている人がいたら教えてください。とても感謝しています。:)

4

6 に答える 6

1

エラーからのメッセージは明らかにそれを示しています

コンテキスト パス [/Struts2Starter] に関連付けられた名前空間 [/] およびアクション名 [getTutorial] にマップされたアクションはありません

これは、実行時にアクション構成を使用できないことを意味します。config-browserプラグインを確認して、構成の問題をデバッグしてください。

url をアクションに正しくマップするには、アクション名と名前空間の 2 つのパラメーターが必要です。

Struts は起動時に xml 構成をロードし、.xml の場所を認識している必要がありますstruts.xml。デフォルトでは、クラスパスを調べて、のような既知の名前のファイルを見つけますstruts.xml。次に、ドキュメントを解析し、ランタイム構成を作成します。この構成は、アクション URL の適切な構成要素を見つけるために使用されます。リクエスト中にそのような要素が見つからない場合、次のメッセージとともに 404 エラー コードが返されますThere is no Action mapped for namespace and action name

また、このメッセージには、アクション構成を見つけるために使用される名前空間とアクション名が含まれています。次に、構成設定を で確認できますstruts.xml。に保存されているアクション名と名前空間ActionMappingが間違ったアクションを指している場合があります。これらの値はActionMapper、プラグインによって使用される、実装が異なる可能性がある によって決定されます。

このマッパーとマッピングに影響を与える可能性のある別の設定もありますが、このメッセージが表示された場合、URL が使用され、ランタイム構成でアクション構成がマップされなかった場合も同じです。どの URL を使用すればよいかわからない場合は、config-browserプラグインを試して、使用できる URL のリストを確認してください。

于 2014-01-13T17:21:52.317 に答える
1

Struts.xml命名規則の名前を に変更すると機能しstruts.xmlます。

于 2014-02-10T21:10:55.443 に答える
0

あなたを変更してそれStruts.xmlを入れると、追加のデバッグが可能になり、デバッグ中のコードの下で試すのに役立ちます<constant name="struts.devMode" value="true" />struts.xml Development mode or devMode

   <?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="default" namespace="/" extends="struts-default">

         <action name="getTutorial" class="org.koushik.javabrains.action.TutorialAction">
                <result name="success">/success.jsp</result>
                <result name="error">/error.jsp</result>
            </action>

        </package>
</struts>
于 2014-01-13T17:45:43.700 に答える
0

アクション名がどこでも一定であることを確認する必要があるだけです...名前空間を削除することで解決したのと同じ問題がありましたが、言及していないことがわかり、loginpage.jspとstrutsで異なるアクション名がありました。 xml page..だからあなたのアクション名を見てください

于 2016-06-10T03:15:42.220 に答える
-2

チュートリアルを実行したところ、同じ問題が発生しました。struts.xml ファイルが間違った場所にあったことが問題であることがわかりました。struts.xml ファイルが次の場所にあることを確認してください: /Struts2Starter/src/struts.xml

于 2015-03-24T23:10:32.177 に答える