2014-09-13 5 views
3

Struts2를 사용하고 있습니다. 아래는 나의 행동 수업 (TutorialAction)입니다.프로젝트에 여러 개의 struts 설정 파일을 포함하는 경우 흐름 순서는 무엇입니까

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

    } 
} 

이 Action 클래스의 execute 메서드에서 "failure"을 반환합니다.

======================== struts.xml ===== : 아래

제 2 스트럿츠 설정 파일입니다 =========================== 나는 같은 또 다른 스트럿츠 설정 파일 (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">/ErrorPage.jsp</result>   
      </action>  
     </package>  
     <include file="struts2.xml"></include> 
    </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> 

내 프로젝트가 정상적으로 작동 중입니다. 나는 단지 (또는 struts2.xml)에 포함 된 파일이또는 그 이후에 실행되는지 궁금 할 것입니다.

출력 내용 : /SuccessPage.jsp 또는 /ErrorPage.jsp?

+0

나는 항상 패키지 태그 앞뒤에 을 쓰는 경우 위에 게시 한 조건으로 /SuccessPage.jsp 결과를 얻습니다. 흐름이 어떻게 작동하는지 알 수 없습니다. : –

답변

2

Struts 구성은 응용 프로그램 시작시 XML 문서가 구문 분석 된 후에 작성됩니다. 그런 다음 구성 속성을 사용하여 네임 스페이스 아래에서 작업을 매핑합니다. 이 맵핑은 맵인 모든 패키지를 반복하여 작성됩니다. 다른 패키지에서 동일한 네임 스페이스를 사용하면 마지막 매핑이 이전 매핑보다 우선 적용됩니다. 지도를 반복하는 것이 검색된 요소의 순서를 보장하지 않는다는 것을 알아야합니다. HashMap을 참조하십시오.

따라서 네임 스페이스 매핑이 만들어지는 순서는 보장되지 않으며 해당 네임 스페이스는 마지막으로 이터레이터가 넣은 동작 만 포함합니다. 액션 네임 스페이스 매핑은 Struts2가 URL을 파싱 한 후 생성 된 액션 매핑 (액션 프록시를 생성 할 때)에서 액션 설정을 가져올 때 사용됩니다. 그런 다음 해당 작업 구성이 발견되면 계속됩니다. 결과가 조치에 맵핑되고 동일한 이름의 결과가 없습니다.

이해하기 쉽습니다. 동일한 네임 스페이스와 동일한 작업 이름 및 불가능한 것으로 의심되는 동일한 패키지 이름이있는 경우 그러한 구성을 사용할 수 없으며 예기치 않은 결과가 발생할 수 있습니다. 그리고 이것은 패키지가 생성되는 순서에 중요하지 않습니다. 케이스에 패키지가없는 경우 패키지간에 의존성이있는 경우 순서가 중요합니다.

+0

감사합니다.이 아름다운 설명 톤 감사합니다. 완전히 만족. –

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을 가지고 있기 때문에 당신이 정의한 내용을 덮어 쓰기 때문에 항상 구성한 마지막 URL이 /getTutorial입니다. 첫 번째 것은 쓸모가 없으므로 두 가지를 모두 사용하려면 다른 이름을 지정해야합니다.

+0

내가 가진 1 가지 중요한 것은 그 순서가 중요하다는 것입니다.하지만 어쨌든 결과는 무엇입니까? –

+0

패키지 태그 앞 또는 뒤에 나는 흐름이 어떻게 작용하는지 알지 못합니다 : ( –

+0

네, successPage라고합니다. 왜 내 편집 된 대답을 볼 수 있습니까? – user23123412