Struts 2 에서 자주 사용 하 는 몇 가지 주해

Struts 2 에서 가장 많이 사용 하 는 주해 몇 개 공 부 를 시작 합 시다.
@Action
  • @Action 주 해 를 사용 하여 Convention plug 가 약속 한 action 과 url 간 의 매 핑 관 계 를 변경 합 니 다

  • 잔말 말고 코드 얘 기 하지 마.
    package com.ponpon.actions;  
     
    import org.apache.struts2.convention.annotation.Action;  
      
    import com.opensymphony.xwork2.ActionSupport;  
      
    public class myAction extends ActionSupport {  
      
      
        @Action("/v1/url")  
        public String execute() {  
      
            return SUCCESS;  
        }  
    }

    이 예******tring execute()방법 에@Action("/v1/url")을 사 용 했 습 니 다.Action 과 Action URL 간 의 매 핑 관 계 를 바 꾸 었 습 니 다.이러한 변 화 는"OverWrite"가 아니 라 원래 약속 한 토대 에서 다른 호출 방식 을 추 가 했 습 니 다.
    원래@Action("/v1/url")주석 이 없 는 상태 에서 저 희 는 브 라 우 저 에 http:/응용 서버 ip:포트/응용/my action 을 입력 하면 com.ponpon.actions.my Action 에 접근 할 수 있 고 http:/응용 서버 ip:포트/응용/my action.jsp 페이지 를 최종 적 으로 표시 할 수 있 습 니 다.(물론 여기 도 html 등 페이지 일 수 있 습 니 다.
    @Action("/v1/url")주해 의 경우 상기 접근 방식 을 제외 하고 브 라 우 저 에 http:/응용 서버 ip:포트/응용 을 입력 할 수 있 습 니 다.
    /v1/url,com.ponpon.actions.myaction 에 도 접근 할 수 있 지만 http://응용 서버 ip:포트/응용/v1/url.jsp 페이지 가 표 시 됩 니 다.
  • @Action 주 해 를 사용 하여 하나의 ACTION 중의 한 방법 을 해결 하고 여러 개의 서로 다른 URL 에 응답 합 니 다
  • 실제 프로젝트 개발 과정 에서 Action 의 처리 가 같 을 확률 이 높 지만 최종 적 으로 넘 어 가 는 페이지 는 다르다.@Actions 와@Action 을 조합 해서 사용 하면 이러한 수 요 를 해결 할 수 있 습 니 다.
    코드 를 먼저 올 리 는 게 좋 을 것 같 아 요.
    package com.ponpon.actions;  
      
    import org.apache.struts2.convention.annotation.Action;  
    import org.apache.struts2.convention.annotation.Actions;  
      
    import com.opensymphony.xwork2.ActionSupport;  
      
    public class myaction1 extends ActionSupport {  
      
        private String message;  
      
        public String getMessage() {  
            return message;  
        }  
      
        @Actions( { @Action("/one/url"), @Action("/another/url") })  
        public String execute() {  
            message = "myaction1 execute()";  
            return SUCCESS;  
        }  
    }

    이 예******tring execute()방법 에@Actions 와@Action 주 해 를 사 용 했 습 니 다.그 중에서@Actions 주 해 는@Action("/one/url")과@Action("/another/url")주 해 를 포함한다.이러한 주 해 는 http://응용 서버 ip:포트/응용/my action 1 을 통 해 com.ponpon.actions.my action 1 을 방문 하고 http:/응용 서버 ip:포트/응용/my action.jsp 를 최종 적 으로 표시 하 는 것 외 에 두 가지 접근 방식 이 있 습 니 다.
    즉:
    http://응용 서버 ip:포트/응용/one/url 을 통 해 com.ponpon.actions.myaction 1 을 방문 하고 http:/응용 서버 ip:포트/응용/one/url.jsp 를 최종 적 으로 표시 합 니 다.
    http://응용 서버 ip:포트/응용/another/url 을 통 해 com.ponpon.actions.myaction 1 을 방문 하고 http:/응용 서버 ip:포트/응용/another/url.jsp 를 최종 적 으로 표시 합 니 다.이렇게 하면 하나의 ACTION 중의 한 방법 으로 여러 개의 서로 다른 URL 에 응답 하 는 효 과 를 얻 을 수 있다.
  • @Action 주 해 를 사용 하여 하나의 ACTION 중의 여러 가지 방법 을 해결 합 니 다.그 중에서 각 방법 은 서로 다른 URL 에 응답 합 니 다
  • 이것 은 실제 프로젝트 개발 과정 에서 가장 자주 사용 되 는 것 이다.다음 코드 예제:
    package com.ponpon.actions;  
      
    import org.apache.struts2.convention.annotation.Action;  
      
    import com.opensymphony.xwork2.ActionSupport;  
      
    public class myaction2 extends ActionSupport {  
      
        private String message;  
      
        public String getMessage() {  
            return message;  
        }  
      
        @Action("/v1/url")  
        public String execute() {  
            message = "myaction2 execute()!";  
            return SUCCESS;  
      
        }  
      
        @Action("url")  
        public String doSomething() {  
            message = "myaction2 doSomething()!";  
            return SUCCESS;  
        }  
    }

    이 예*******tring execute()방법 에@Action(v1/url)주 해 를 사 용 했 습 니 다.StringdoSomething()방법 에@Action("url")을 사 용 했 습 니 다.전 자 는 http://응용 서버 ip:포트/응용/v1/url 을 통 해 com.ponpon.actions.my cation 2 의 execute()방법 을 방문 하고 http:/응용 서버 ip:포트/응용/v1/url.jsp 를 최종 적 으로 표시 할 수 있 습 니 다.후 자 는 http://응용 서버 ip:포트/응용/url 을 통 해 com.ponpon.actions.my action 2 의 doSomething()방법 을 방문 하고 http:/응용 서버 ip:포트/응용/url.jsp 를 최종 적 으로 표시 합 니 다.
    이 예 에서 주의해 야 할 것 은@Action("/v1/url")과@Action("url")의 차이 점 입 니 다."url"전에"/"가 없다 는 것 은"url"이 my action 2 의 네 임 스페이스 를 기반 으로 한 것 임 을 의미 합 니 다.myaction 2 가 있 는 가방 이 com.ponpon.actions.aaa 라 고 가정 하면 http://응용 서버 ip:포트/응용/aaa/url 을 통 해서 만 com.ponpon.actions.aaa.myaction 2 에 접근 할 수 있 고 http:/응용 서버 ip:포트/응용/aaa/url.jsp 를 최종 적 으로 표시 합 니 다.한편,'/v1/url'은'/'네 임 스페이스 를 바탕 으로 한다.
    위의 글 에서 결과 페이지 에 대해 서 는 Convention Plugin 의 약속 을 사용 하지만 이 절 은@Results 와@Result 를 이용 하여 이 약속 을 바 꿔 야 합 니 다.그리고@Results 와@Result 가 클래스 와 방법 을 주석 한 후에 발생 하 는 효과 입 니 다.아니면 코드 를 먼저 볼 까요?
    package com.ponpon.actions;  
      
    import org.apache.struts2.convention.annotation.Action;  
    import org.apache.struts2.convention.annotation.Result;  
    import org.apache.struts2.convention.annotation.Results;  
      
    import com.opensymphony.xwork2.ActionSupport;  
      
    @Results( { @Result(name = "global", location = "/global.jsp") })  
    public class myaction3 extends ActionSupport {  
      
        @Action(value = "/v1/url", results = { @Result(name = SUCCESS, location = "/v1/success.jsp"),  
                @Result(name = "failure", location = "/v1/fail.jsp") })  
        public String execute() {  
            if (System.currentTimeMillis() % 3 == 0) {  
                return "failure";  
            } else if (System.currentTimeMillis() % 3 == 1) {  
                return SUCCESS;  
            } else {  
                return "global";  
            }  
        }  
      
        @Action("globalTest")  
        public String global() {  
            return "global";  
        }  
      
        @Action(value = "globalOverWrite", results = { @Result(name = "global", location = "/v1/globalOverWrite.jsp") })  
        public String globalOverWrite() {  
            return "global";  
        }  
      
    }
  • @Result 주 해 를 사용 하여 Convention Plugin 의 약속 페이지 를 바 꿉 니 다

  • 코드 의 String execute()방법 에서 진행 되 었 습 니 다.    @Action(value = "/v1/url", results = { @Result(name = SUCCESS, location = "/H5/success.jsp"),            @Result(name="failure",location="/H5/fail.jsp")}주석.만약@Action(...)에 results 가 없다 면={@Result(name=SUCCESS,location="/v1/success.jsp"),            @Result(name="failure",location="/H5/fail.jsp")}은 Convention Plugin 의 약속 에 따라 결과 페이지 는/v1/url.jsp 입 니 다.빨간색 글꼴 의 부분 을 추가 하면 execute()방법 이 실 행 된 후 빨간색 글꼴 의 설정 에 따라 결 과 를 해당 페이지 로 이동 합 니 다.
  • Action 류 에@Result 주 해 를 추가 하고@Result 는 Action 류 의 모든 방법 에 공 유 됩 니 다

  • 상기 코드 를 자세히 살 펴 보고 Hello World 5 에서@Result({@Result(name="global",location="/global.jsp")}주 해 를 진행 하 였 습 니 다.이 클래스 와 하위 클래스 의 모든 방법 이'global'이라는 결과 페이지 로 돌아 갈 수 있다 는 뜻 이다.이 페이지 는'/global.jsp'입 니 다.이 때문에'/global.jsp'로 이동 하 는 모든 방법 에서@Result(name='global',location='/global.jsp')주 해 를 하지 않 아 도 됩 니 다.이것 은 실제 업무 에서 도 매우 흔히 볼 수 있 는 상황 이다.자세히 관찰 할 수 있 는 execute()방법 과 global()방법.그들 은 모두'global'이라는 결과 페이지(즉,location 속***정 의 된'/global.jsp'페이지)로 이동 할 수 있 습 니 다.
  • Action 류 의 방법 에@Result 주 해 를 추가 하고@Result 는 추 가 된 방법 에 만 적 용 됩 니 다.Action 클래스 방법 에 추 가 된@Result 우선 순 위 는 Action 클래스 에 추 가 된@Result 보다 높 습 니 다.(전 자 는 후 자 를 덮는다)
  • 상기 코드 의 globalOverWrite()방법 을 자세히 살 펴 보면 이 방법 도'global'이라는 페이지 로 넘 어 갑 니 다.그러나 이 방법 에는@Action(value="globalOverWrite",results={@Result(name="global",location="/v1/globalOverWrite.jsp")}주 해 를 사 용 했 습 니 다.또한@Result(...)주석 에 도'global'이라는 결과 페이지 정의 가 있 습 니 다.이 경우 이 방법의 결과 페이지 는 클래스 에 주석 을 달 때'/global.jsp'페이지 가 아 닌/H5/globalOverWrite.jsp 페이지 로 넘 어 갑 니 다.

    좋은 웹페이지 즐겨찾기