03.업/04.스트럿츠22011. 10. 31. 17:03
 

Struts 2 인터셉터(Interceptor) - servletConfig 예제

1. Model 클래스

UserInfo.java Ex )

package servletConfig.model;

public class UserInfo
{
private String id;
private String pwd;
private String name;

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

public String getName() { return name; }
public void setName(String name) { this.name = name; }
}

2. DAO 클래스

LoginDAO.java Ex )

package servletConfig.dao;

import servletConfig.model.UserInfo;

public class LoginDAO
{
public boolean loginChk(UserInfo userInfo)
{
/**
* DB 연결 후 넘어오는 사용자 정보를 가지고 로그인 체크
* 본 예제에서는 id가 fourleaf이면 로그인 성공
* UserInfo의 name에 "포리프"로 세팅 후 true를 리턴
*/

if("fourleaf".equals(userInfo.getId()))
{
userInfo.setName("포리프");

return true;
}
else
{
return false;
}
}
}

3. DAO 주입 위한 인터셉터를 위한 인터페이스

LoginDAOAware.java Ex )

package servletConfig.interceptor;

import servletConfig.dao.LoginDAO;

public interface LoginDAOAware
{
public void setLoginDAO(LoginDAO loginDAO);
}

4. DAO 주입 위한 인터셉터

LoginDAOInterceptor.java Ex )

package servletConfig.interceptor;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;

import servletConfig.dao.LoginDAO;

public class LoginDAOInterceptor implements Interceptor
{
LoginDAO loginDAO;

public void init()
{
loginDAO = new LoginDAO();
}

public void destroy()
{
loginDAO = null;
}

public String intercept(ActionInvocation invocation) throws Exception
{
Object action = invocation.getAction();

if(action instanceof LoginDAOAware)
{
LoginDAOAware loginDAOAware = (LoginDAOAware)action;
loginDAOAware.setLoginDAO(loginDAO);
}
return invocation.invoke();
}
}

5. Action 클래스

LoginAction.java Ex )

package servletConfig.action;

import java.util.Map;

import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.SessionAware;

import servletConfig.dao.LoginDAO;
import servletConfig.interceptor.LoginDAOAware;
import servletConfig.model.UserInfo;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.Preparable;
import com.opensymphony.xwork2.interceptor.NoParameters;

public class LoginAction implements Action, Preparable, ModelDriven,
LoginDAOAware, SessionAware, ServletRequestAware, RequestAware

{
// 도메인 오브젝트
UserInfo userInfo;
LoginDAO dao;
Map sessionMap;
Map requestMap;
HttpServletRequest request;
Log log = LogFactory.getLog(LoginAction.class);

public String execute() throws Exception
{
// LoginDAO dao = new LoginDAO();

if(dao.loginChk(userInfo))
{
sessionMap.put("userInfo", userInfo);
log.info(">>>>> requestURI : " + request.getRequestURI());
log.info(">>>>> request ID : " + requestMap.get("id").toString());
log.info(">>>>> request PWD : " + requestMap.get("pwd").toString());

return SUCCESS;
}
else
{
return ERROR;
}
}

// Preparable 인터페이스의 prepare 구현
public void prepare() throws Exception
{
userInfo = new UserInfo();
}

// ModelDriven 인터페이스의 getModel 구현
public Object getModel()
{
return userInfo;
}

// LoginDAUInterceptor에서 LoginDAO를 주입한다.
public void setLoginDAO(LoginDAO loginDAO)
{
this.dao = loginDAO;
}

// SessionAware의 setSession 구현
public void setSession(Map session)
{
this.sessionMap = session;
}

// RequestAware의 setRequest 구현
public void setRequest(Map requestMap)
{
this.requestMap = requestMap;
}

// ServletRequestAware의 serServletRequest 구현
public void setServletRequest(HttpServletRequest request)
{
this.request = request;
}
}

6. .jsp 작성

/servletConfig/login.jsp Ex )

<%@ page pageEncoding = "euc-kr" %>

<html>
<body>
<form action = "login.action" method = "post">
아이디 : <input type = "text" name = "id" /><br>
비밀번호 : <input type = "text" name = "pwd" />
<input type = "submit" />
</form>
</body>

</html>

/servletConfig/login_ok.jsp Ex )

<%@ page pageEncoding = "euc-kr" %>

<html>
<body>
<h3>${name}님 환영합니다.</h3>
</body>
</html>

/servletConfig/login_error.jsp Ex )

<%@ page pageEncoding = "euc-kr" %>

<html>
<body>

ERROR!!
</body>
</html>

7. struts.xml 작성

/src/struts.xml Ex )

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"
http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
<package
name = "login" extends = "struts-default">
<interceptors>
<interceptor
name = "loginDao"
class = "servletConfig.interceptor.LoginDAOInterceptor" />
</interceptors>

<action
name = "login" class = "servletConfig.action.LoginAction">
<interceptor-ref name = "prepare" />
<interceptor-ref name = "modelDriven" />
<interceptor-ref name = "params" />
<interceptor-ref name = "loginDao" />
<interceptor-ref
name = "servletConfig" />

<result>/servletConfig/login_ok.jsp</result>
<result
name = "error">/servletConfig/login_error.jsp</result>
</action>
</package>
</struts>

결과 값 (http://localhost:8080/Struts2/servletConfig/login.jsp)

"Struts 2 인터셉터(Interceptor) - 간단한 로그인 예제 1"과 동일

(http://blog.naver.com/fourleaf0311/140116469501)

'03.업 > 04.스트럿츠2' 카테고리의 다른 글

HttpSessionBindingListener  (0) 2011.11.01
플레임웍이 제공하는 인터셉터3  (0) 2011.10.31
struts 2 - Interceptor  (0) 2011.10.31
ActionSupport 클래스  (0) 2011.10.31
servletConfig 인터셉터  (0) 2011.10.31
Posted by 봄날의차