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"과 동일
'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 |