본문 바로가기

카테고리 없음

Struts2 Annotation example

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;
	}
}