3

Struts2 を使用しています。以下は私のアクション クラス ( TutorialAction) です。

public class TutorialAction {
    public String execute() {
        System.out.println("Hello from Execute!");
        return "failure";

    }
}

"failure"この Action クラスの execute メソッドに戻ります。

以下は私の2つのストラット構成ファイルです:

======================== 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" namespace="/tutorials" extends="struts-default">        
            <action name="getTutorial" class="com.tushar.action.TutorialAction">
                <result name="failure">/ErrorPage.jsp</result>        
            </action>       
        </package>    
        <include file="struts2.xml"></include> 
    </struts>

struts2.xml上記の構成ファイルには、同じ名前空間の別の struts 構成ファイル( ) が含まれています。

======================== struts2.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" namespace="/tutorials" extends="struts-default">

        <action name="getTutorial" class="com.tushar.action.TutorialAction">
            <result name="failure">/SuccessPage.jsp</result>        
        </action>
    </package>
</struts>

私のプロジェクトは順調に進んでいます。struts.xmlに含まれるファイル(これはstruts2.xml) が main の後struts.xmlまたは前に実行されるかどうかを知りたいだけです。

または、出力は次のようになります:/SuccessPage.jspまたは/ErrorPage.jsp?

4

2 に答える 2

2

Struts 構成は、アプリケーションの起動時に xml ドキュメントが解析された後に構築されます。次に、構成プロパティを使用して、名前空間の下にアクションをマップします。このマッピングは、マップでもあるすべてのパッケージを反復することによって作成されます。他のパッケージに同じ名前空間がある場合、最後のマッピングが前のマッピングをオーバーライドします。マップを反復しても、取得された要素の順序が保証されないことを知っておく必要があります。HashMapを参照してください。

そのため、名前空間マッピングが作成される順序は保証されず、その名前空間には、イテレータによって最後に配置されたアクションのみが含まれます。名前空間からアクションへのマッピングは、Struts2 が URL の解析後に作成されたアクション マッピング (アクション プロキシの作成時) からアクション構成を取得するときに使用されます。その後、そのようなアクション構成が見つかった場合に続行します。結果はアクションにマップされ、同じ名前の結果はありません。

理解しやすいことを願っています。名前空間とアクション名が同じで、パッケージ名も同じであるとは思えませんが、そのような構成は使用できず、予期しない結果につながる可能性があります。これは、パッケージが作成される順序は重要ではありません。ケースに存在しないパッケージ間に依存関係がある場合は、順序が重要であることに注意してください。

于 2014-09-13T18:57:55.673 に答える
1

このようなstruts2構成がある場合。

   <struts>    
        <package name="default" namespace="/tutorials" extends="struts-default">        
            <action name="getTutorial" class="com.tushar.action.TutorialAction">
                <result name="failure">/ErrorPage.jsp</result>        
            </action>       
        </package>    
        <include file="struts-module2.xml"></include> 
    </struts>

また

    <struts>    
      <include file="struts-module1.xml">   
        <include file="struts-module2.xml"></include> 
    </struts>

Practical Apache Struts 2 Web 2.0 Projectsによると。

ファイルを含める場合、順序は非常に重要です。インクルード ファイル間の依存関係は自動的に決定および解決されないため、struts-module1.xml が struts-module2.xml で提供される構成に依存している場合 (および struts-module2.xml が struts-module1.xml の後に構成されている場合)、例外がスローされます。 . 解決策は、依存構成が含まれているファイルを変更するか、インクルード ファイルの順序を変更することです。

ただし、最後に構成した URL が同じである/getTutorialため、定義を上書きしているため、常に優先されます。したがって、最初のものは役に立たないため、両方を使用する場合は別の名前を付ける必要があります。

于 2014-09-13T13:50:50.997 に答える