Struts 2 Annotation 예제
Struts 2에서 지원하는 Annotation 을 이용하여 액션을 설정하기 위해서는 우선 프로젝트에 다음 라이브러리가 포함되어야 한다.
스트러츠를 다운로드하고 압축을 해제하면 포함되어 있는 jar 파일이며 버전에 따라 파일명은 약간 달라질 수도 있다
struts2-convention-plugin-2.3.16.3.jar
Reference : http://struts.apache.org/release/2.3.x/docs/convention-plugin.html#ConventionPlugin-Actionannotation
LoginAction.java (클래스 레벨에 Annotation 을 적용한 경우)
package org.kdea.struts.actions; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.convention.annotation.*; import com.opensymphony.xwork2.ActionSupport; /** * Struts 2에서 struts.xml 설정파일을 사용하지 않고 Annotation을 이용하여 * 액션과 Result 페이지를 설정하기 위해서는 액션 클래스가 다음과 같은 패키지 안에 * 존재해야 한다. struts, struts2, action or actions * 아래의 액션을 웹브라우저에서 호출하기 위해서는 다음과 같은 URL을 사용해야 한다 * http://localhost:8080/myProject/mem/login.action * 이 경우에는 struts.xml 파일에 패키지나 액션, result 등을 설정하지 않아도 된다 */ @Namespace("/mem") @Action(value="login") @ResultPath(value="/") @Results({ @Result(name="input",location="mem/login.jsp"), @Result(name="success",location="hello.jsp"), }) public class LoginAction extends ActionSupport implements ServletRequestAware { private HttpServletRequest request; private String id; private String pwd; public String execute() throws Exception { request.setAttribute("loginResult", "ok"); System.out.println("로그인 액션"); return SUCCESS; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } @Override public void setServletRequest(HttpServletRequest request) { this.request = request; } }
메소드 레벨에 Annotation 을 적용한 경우
package org.kdea.struts.actions; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.convention.annotation.*; import com.opensymphony.xwork2.ActionSupport; /** * Struts 2에서 struts.xml 설정파일을 사용하지 않고 Annotation을 이용하여 * 액션과 Result 페이지를 설정하기 위해서는 액션 클래스가 다음과 같은 패키지 안에 * 존재해야 한다. struts, struts2, action or actions * 아래의 액션을 웹브라우저에서 호출하기 위해서는 다음과 같은 URL을 사용해야 한다 * http://localhost:8080/myProject/mem/login.action * 이 경우에는 struts.xml 파일에 패키지나 액션, result 등을 설정하지 않아도 된다 */ @Namespace("/mem") @ResultPath(value="/")/*result의 경로가 상대경로일 경우 /(루트) 안의 mem 안에서 페이지를 찾음*/ public class LoginAction extends ActionSupport implements ServletRequestAware { private HttpServletRequest request; private String id; private String pwd; @Action(value="login", results={ @Result(name="success",location="success.jsp"), @Result(name="login", location="/mem/loginForm.jsp") }) public String login() throws Exception { request.setAttribute("loginResult", "ok"); System.out.println("로그인 로그인 성공"); return SUCCESS; } @Action(value="logout", results={ @Result(name="success",location="/mem/logout.jsp") }) public String logout() throws Exception { request.setAttribute("loginout", "ok"); System.out.println("로그아웃"); return SUCCESS; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } @Override public void setServletRequest(HttpServletRequest request) { this.request = request; } }
위의 LoginAction을 호출하는 EmpAction에서 Annotation을 설정하는 예
package org.kdea.struts.actions; import java.util.Map; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Namespace; import org.apache.struts2.convention.annotation.Result; import org.apache.struts2.convention.annotation.ResultPath; import org.apache.struts2.convention.annotation.Results; import org.apache.struts2.interceptor.SessionAware; import com.opensymphony.xwork2.ActionSupport; @Namespace("/emp") @Action(value="emp") @ResultPath(value="/") @Results({ @Result(name="success", location="/emp/success.jsp"), @Result(name="login", type="redirectAction", params={ "namespace", "/mem", "actionName", "login" } ) }) public class EmpAction extends ActionSupport implements SessionAware { private Map<String, Object> sessionMap; @Override public String execute() throws Exception { if(sessionMap.get("logon")==null) { return LOGIN; } return SUCCESS; } @Override public void setSession(Map<String, Object> sessionMap) { this.sessionMap = sessionMap; } }