Struts2에서는 Annotation(Java1.5 부터 추가된 클래스나 메서드 위에 @기호와 함께 기재된 문자열로, 메타데이터 기능이다.)을 사용하여 struts.xml 파일이 없이 직접 mapping하는 방식을 지원한다. 만약 struts.xml에 수행할 action이 없을 경우에 자체적으로 Annotation을 수행하게 된다. 
 예를 들어 
http://localhost:8989/info/list.action
 으로 들어온다면 struts.xml에서 먼저 검사를 한다음 수행할 액션이 없을 경우, web.xml의 init-param으로 이동하여 Annotation을 수행하게 된다.
 struts.xml을 사용하지 않는다는것은 struts.xml의 actino mapping의 설정을 사용하지 않는 다는 것이고,(struts.xml 있어도 되고, 없어도 되는 옵션이된다는 뜻!)


<struts>
   <!-- include files -->
   <include file="info.xml"/><!-- 사용하지 못한다. -->
</struts>
 
그렇기 때문에 Annotation을 사용한다는 것을 알려줘한다. 그러기 위해서 web.xml에 반드시 설정해줘야 된다. 그리고 Annotation을 사용하면 무조건 default인 ***.action 만 가지고 들어와야 한다.(properties에 설정한 *.do, *.etc등은 안된다.)
 또한, action class의 이름은 list.action을 호출하면 ListAction이 되어야 한다.

list.action => list + action = ListAction 이 되야한다.

이렇게 설정해 주어야만 struts2에서 자동으로 mapping을 해준다.

■ 설정

1. web.xml에서 FilterDispatcher의 파라메터를 설정한다.

 <init-param>
        <param-name>actionPackages</param-name>
        <param-value>info.action</param-value>
<!-- <param-value>com.myhome.anno</param-value> -->
 </init-param>


- actionPackages
은 예약어이므로 변경 할 수 없다.
- info.action 사용할 액션 패키지이다. 콤마(,)로 분류하여 원하는 액션 추가 설정 할 수 있다.(ex. info.action, board.action)
- com.myhome.anno 패키지 이름으로 설정 하면 그 아래 실행될 action class들을 모두 포함한다.

2. Action Class에서 Annotation을 적용한다.

package com.myhome.anno;

import java.util.List;

import com.myhome.info.dao.InfoDAO;
import com.myhome.info.vo.InfoVO;
import org.apache.struts2.config.Result;
import org.apache.struts2.config.Results;
import com.opensymphony.xwork2.ActionSupport;

@SuppressWarnings("serial")
@Results({
            @Result(name="success", value="/WEB-INF/anno/list.jsp"), //(여긴 소문자!)
            @Result(name="input", value="/WEB-INF/anno/fail.jsp") //(여긴 소문자!)
})
public class ListAction extends ActionSupport{

 private List<InfoVO> list;

 @Override
 public String execute() throws Exception {
  list = new InfoDAO().getAllQuery();
  if(list.size() < 1) return INPUT; //대문자, 소문자 구별이 확실해야 한다.(여긴 대문자!)
  return SUCCESS; //대문자, 소문자 구별이 확실해야 한다.(여긴 대문자!)
 }
 
 public List<InfoVO> getList(){
  return list;
 }
 
}

* @Results({})을 사용하기 위해 import org.apache.struts2.config.Results; import 해야한다.
 
 @Result는  ,  로 구분하여 여러값을 설정할 수 있다.

 execute()에서 return 값과 Result의 name 값이 같은 곳이 실행되며 value="/WEB-INF/anno/list.jsp" 로 데이타를 보낸다. 

 위에서도 설명 했지만 return SUCCESS; 여기는 대문자, @Result(name="success", 여기는 소문자로 꼭 써줘야 한다.

3. 실행방법

ListAction을 호출하는 경우, List가 Action이름이 되며 Action은 action이 된다.
                              http://localhost:8989/anno/list.action
그리고 호출시 각 단어는 반드시 소문자로 명시해야 된다.

Annotation 기본 설정 끝!

+ Recent posts