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>
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Pytest 테스트 프레임워크 기본 사용 방법 상세 정보pytest 소개 2. 매개 변수화를 지원하여 테스트할 테스트 용례를 세밀하게 제어할 수 있다. 3. 간단한 단원 테스트와 복잡한 기능 테스트를 지원할 수 있고selenium/appnium 등 자동화 테스트, 인터페...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.