Struts 2 에서 struts. xml 의 Action 설정 에 대한 자세 한 설명

Struts 2 에서 struts. xml 의 Action 설정 에 대한 자세 한 설명
package 를 사용 하면 논리 적 으로 관련 된 Action, Result, Interceptor 등 구성 요 소 를 한 그룹 으로 나 눌 수 있 습 니 다. Package 는 대상 과 같 고 다른 Package 를 계승 할 수 있 으 며 다른 package 에 의 해 계승 되 거나 추상 적 인 Package 를 정의 할 수 있 습 니 다.
Package 의 사용 가능 한 속성:
속성
반드시
설명 하 다.
name 은 Package 의 표시 입 니 다. 다른 package 를 참조 하기 위해 서 입 니 다.
extends 가 어떤 패키지 로부터 계승 하 는 지 여부
namespace 에서 Namespace 설정 설명 을 참고 하 시 겠 습 니까?
abstract 부정 적 의미 이 package 는 추상 적 이 며, 이 package 에 서 는 action 을 정의 할 필요 가 없습니다.
struts. xml 파일 은 위 에서 아래로 해석 되 기 때문에 계승 되 는 패 키 지 는 계승 패키지 의 앞 에 놓 아야 합 니 다.Namespace 는 action 을 논리 적 으로 다른 모듈 로 나 누 었 고 모든 모듈 은 독립 된 접 두 사 를 가지 고 있 습 니 다.namespace 를 사용 하면 action 이름 의 충돌 을 효과적으로 피 할 수 있 습 니 다. 예 를 들 어 모든 package 는 독립 된 Menu 와 Help action 이 있 지만 사항 방식 은 각각 다 릅 니 다.Struts 2 탭 은 namespace 옵션 을 가지 고 있 으 며, namespace 에 따라 서버 에 서로 다른 package 의 action 요청 을 제출 할 수 있 습 니 다.
"/" 는 루트 namespace 를 표시 합 니 다. 프로그램 컨 텍스트 환경 에서 직접 요청 (Context) 은 이 패키지 에서 찾 습 니 다.
"" 기본 namespace 를 표시 합 니 다. 모든 namespace 에서 찾 을 수 없 을 때 이 namespace 에서 찾 습 니 다.
예 를 들 어 다음 설정 이 있 습 니 다.
CODE:
<package name="default">
<action name="foo" class="mypackage.simpleAction>
<result name="success" type="dispatcher">
greeting.jsp
</result>
</action>
<action name="bar" class="mypackage.simpleAction">
<result name="success" type="dispatcher">bar1.jsp</result>
</action>
</package>

<package name="mypackage1" namespace="/">
<action name="moo" class="mypackage.simpleAction">
<result name="success" type="dispatcher">moo.jsp</result>
</action>
</package>

<package name="mypackage2" namespace="/barspace">
<action name="bar" class="mypackage.simpleAction">
<result name="success" type="dispatcher">bar2.jsp</result>
</action>
</package>

1. / barspace / bar. action 으로 요청 하면
namespace: / barspace 를 찾 습 니 다. bar 를 찾 으 면 대응 하 는 action 을 실행 합 니 다. 그렇지 않 으 면 기본 namespace 를 찾 습 니 다. 위의 예 에서 barspace 에 bar 라 는 action 이 존재 하기 때문에 이 action 은 실 행 됩 니 다. 결 과 를 success 로 되 돌리 면 화면 은 bar2. jsp 로 정 합 니 다.
2 요청 이 / moo. action 이면
루트 namespace ('/') 를 찾 습 니 다. moo action 이 존재 하면 실행 합 니 다. 그렇지 않 으 면 기본 namespace 를 조회 합 니 다. 위의 예 에서 루트 namespace 에 moo action 이 존재 하기 때문에 이 action 이 호출 되 었 습 니 다. success 로 돌아 가 는 상황 에서 화면 은 moo. jsp,
액 션 설정
struts 2 프레임 워 크 에서 모든 Action 은 하나의 작업 단원 입 니 다.Action 은 하나의 요청 을 하나의 Action 처리 에 대응 하 는 것 을 책임 집 니 다. 하나의 Action 류 가 하나의 요청 과 일치 할 때마다 이 Action 류 는 Struts 2 프레임 워 크 에 호출 됩 니 다.
Action 설정 예제:
CODE:
<action name="Logon" class="tutorial.Logon">
<result type="redirect-action">Menu</result>
<result name="input">/tutorial/Logon.jsp</result>
</action>

모든 Action 은 여러 개의 result, 여러 개의 ExceptionHandler, 여러 개의 Intercepter 를 설정 할 수 있 지만 하나의 name 만 있 을 수 있 습 니 다. 이 name 과 package 의 namespace 는 하나의 Action 을 유일 하 게 구별 할 수 있 습 니 다.
struts 2 프레임 워 크 가 요청 을 받 아들 일 때마다 Host, Application, 접미사 등 정 보 를 제거 하고 Action 의 이름 을 얻 습 니 다. 예 를 들 어 다음 요청 은 Welcome 이라는 Action 을 받 을 수 있 습 니 다.http://www.planetstruts.org/struts2-mailreader/Welcome.action
Struts 2 프로그램 에서 Action 을 가리 키 는 링크 는 보통 Struts 태그 가 있 습 니 다. 이 태 그 는 Action 의 이름 만 지정 하면 Struts 프레임 워 크 는 접미사 와 같은 확장 자 를 자동 으로 추가 합 니 다. 예 를 들 어:
CODE:
<s:form action="Hello">
<s:textfield label="Please enter your name" name="name"/>
<s:submit/>
</s:form>

다음 링크 를 요청 합 니 다:
http://Hostname:post/appname/Hello.action
Action 의 이름 을 정의 할 때 사용 하지 마 세 요.
Action 의 방법
Action 의 기본 입구 방법 은 xwork 2 의 Action 인터페이스 에서 정의 합 니 다. 코드 목록 은:
CODE:
public interface Action {

public String execute() throws Exception;

}

어떤 때 우 리 는 Action 의 여러 가지 방법 을 지정 하고 싶 습 니 다. 우 리 는 다음 과 같은 두 단 계 를 할 수 있 습 니 다.
1. execute 서명 과 같은 방법 을 만 듭 니 다. 예 를 들 어:
Public String forward() throws Exception

2 Action 설정 시 method 속성 을 사용 합 니 다. 예 를 들 어:
<action name="delete" class="example.CrudAction" method="delete">

Action 의 방법 어댑터
어떤 때 는 Action 에서 의 방법 호출 에 대해 일정한 규칙 을 만족 시 킬 수 있 습 니 다. 예 를 들 어 edit Action 대응 edit 방법, delete Action 대응 delete 방법 등 이 있 습 니 다. 이 럴 때 우 리 는 방법 어댑터 를 사용 할 수 있 습 니 다. 예 를 들 어:
< action name = "* Crud" class = "example. crud" method = "{1}" 이 때 editCrud Action 의 인용 은 edit 방법 을 호출 합 니 다. 마찬가지 로 deleteCrud Action 의 인용 은 delete 방법 을 호출 합 니 다.
다른 비교적 자주 사용 하 는 방식 은 밑줄 로 분할 하 는 것 이다. 예 를 들 어:
<action name="Crud_*" class="example.Crud" method="{1}">

이렇게 하면 다음 호출 을 만 났 을 때 대응 하 는 방법 을 찾 을 수 있다.
"action=Crud_input" => input  
"action=Crud_delete" => delete  

어댑터 와 일반적인 설정 은 같은 위 치 를 가지 고 프레임 워 크 를 사용 하 는 모든 다른 기능 을 결합 할 수 있 습 니 다.
기본 Action
Action 의 class 속성 을 지정 하지 않 았 을 때, 예 를 들 어:
<action name="Hello">

우 리 는 기본적으로 com. opensymphony. xwork. ActionSupport 를 사용 합 니 다.
Action Support 는 input 와 execute 두 가지 방법 이 있 는데 모든 방법 은 간단하게 SUCCESS 로 돌아 갑 니 다.
일반적인 상황 에서 요청 한 Action 이 존재 하지 않 는 상황 에서 Struts 2 프레임 워 크 는 Error 화면 을 되 돌려 줍 니 다. "404 - Page not found". 어떤 때 는 제어 이외 의 오류 화면 이 나타 나 고 싶 지 않 을 수도 있 습 니 다. 우 리 는 기본 Action 을 지정 할 수 있 습 니 다. 요청 한 Action 이 존재 하지 않 는 상황 에서 기본 Action 을 호출 하고 다음 설정 을 통 해 요구 에 도달 할 수 있 습 니 다.
CODE:
<package name="Hello" extends="action-default">
<default-action-ref name="UnderConstruction">
<action name="UnderConstruction">
<result>/UnderConstruction.jsp</result>
</action>

기본 어댑터
CODE:
<action name="*" >
<result>/{1}.jsp</result>
</action>

모든 Action 은 자신의 이름 을 딴 JSP 에 매 핑 됩 니 다.
struts 2 에서 동적 방법의 호출
DMI (Dynamic Method Invocation, 동적 방법) 호출 을 통 해 이러한 요청 을 처리 할 수 있 습 니 다. 동적 방법 호출 은 폼 요소 의 action 이 특정한 Action 의 이름 과 직접적인 것 이 아니 라 다음 과 같은 형식 으로 Form 의 action 속성 을 지정 하 는 것 을 말 합 니 다.
<!-- action   actionName!methodName    -->
action="ActionName!methodName.action"
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd" >
<struts>
<!--include   struts2                      xml        include     -->
<include file="struts-default.xml"></include>
<!--package      Action          
package          package        package   
   package  package               package
    package    package   
name:package  
extends:    package  
abstract:  package          package    action  true:false
namespace:  package            url   ,        /test         http://localhost:8080/struts2/test/XX.action
-->
<package name="com.kay.struts2"extends="struts-default"namespace="/test">
<interceptors>
<!--     
name:     
class:      
-->
<interceptor name="timer"class="com.kay.timer"></interceptor>
<interceptor name="logger"class="com.kay.logger"></interceptor>
<!--       -->
<interceptor-stack name="mystack">
<interceptor-ref name="timer"></interceptor-ref>
<interceptor-ref name="logger"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!--           Action      
  Action                     -->
<default-interceptor-ref name="mystack"></default-interceptor-ref>
<!--  results   -->
<global-results>
<result name="input">/error.jsp</result>
</global-results>
<!--Action     Action       (  action    name  )
name:action  
class:        
method:   Action     
-->
<action name="hello"class="com.kay.struts2.Action.LoginAction">
<!--     
name:            
-->
<interceptor-ref name="timer"></interceptor-ref>
<!--    
name : result    Action       
type : result        superpackage type struts-default.xml     dispatcher
-->
<result name="success"type="dispatcher">/talk.jsp</result>
<!--    
name:  Action  get/set  
-->
<param name="url">http://www.sina.com</param>
</action>
</package>
</struts>

좋은 웹페이지 즐겨찾기