오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의)
이번에는 이전에 배운 prepare, modelDriven, params 인터셉터를 이용하여 간단한 로그인 예제를 구현해 보자. 이전에 배운 내용을 이해하고 있으면 그리 어려운 예제가 아니니 따라 해 보기로 하자.
[개요]
- logini.jsp에서 id, pwd를 입력하고 서브밋 한다. (id가 ‘test’라면 로그인 성공)
- LoginAction이 요청을 받아 처리하기 전 prepare(UserInfo 라는 Model빈을 초기화, 인스턴스 생성), modelDriven(초기화된 모델 빈을 ValueStack의 상단에 로딩), params(ValueStack의 상단에 있는 빈에 사용자의 요청 파라미터를 세팅)와 같은 인터셉터들이 동작을 한후 LoginAction이 수행된다.
- 로그인 성공일 경우 login_ok.jsp 실패일 경우 다시 login.jsp로 제어를 넘긴다.
Struts2 개발환경 관련 사항은 “struts2로 HelloWorld 작성하기” 강좌를 보면 나와 있으니 생략한다.
1. 이클립스에서 interceptor라는 Tomcat Project를 생성한다.
2. 액션 클래스 작성(LoginAction.java)
package login.action;
import login.dao.LoginDAO;
import login.model.UserInfo;
import interceptor1.model.NumberForAdd;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.Preparable;
public class LoginAction implements Action, Preparable, ModelDriven {
//도메인 오브젝트
UserInfo userInfo;
public String execute() throws Exception {
LoginDAO dao = new LoginDAO();
if (dao.loginChk(userInfo)) {
return SUCCESS;
}
else {
return LOGIN;
}
}
//Preparable인터페이스의 prepare 구현
public void prepare() throws Exception {
userInfo = new UserInfo();
}
//ModelDriven 인터페이스의 getModel 구현
public Object getModel() {
return userInfo;
}
}
4. 실제 비즈니스 로직처리를 위한 LoginDAO.java
package login.dao;
import login.model.UserInfo;
public class LoginDAO {
public boolean loginChk(UserInfo userInfo) {
//DB연결 후 넘어오는 사용자 정보를 가지고 로그인 체크
//본 예제에서는 id가 test이면 로그인 성공
//UserInfo의 name에 "홍길동"으로 세팅 후 true를 리턴
if ("test".equals(userInfo.getId())) {
userInfo.setName("홍길동");
return true;
}
else {
return false;
}
}
}
5. model 역할을 하는 UserInfo.java
package login.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;
}
}
6. JSP 파일을 interceptor/login 디렉토리에 작성하자.
[login.jsp]
<%@ page pageEncoding="euc-kr" %>
<html>
<body>
<form action="login.action">
아이디 : <input type="text" name="id"/><br>
비밀번호 : <input type="text" name="pwd"/>
<input type="submit"/>
</form>
</body>
</html>
[login_ok.jsp]
<%@ page pageEncoding="euc-kr" %>
${name}님 환영합니다.
7.web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Struts2</display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
8. struts.xml
<?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="struts2" extends="struts-default">
<action name="login" class="login.action.LoginAction">
<interceptor-ref name="prepare"/>
<interceptor-ref name="modelDriven"/>
<interceptor-ref name="params"/>
<result>/login/login_ok.jsp</result>
<result name="login">/login/login.jsp</result>
</action> </package>
</struts>
9. http://localhost:8080/interceptor/login/login.jsp 를 실행하자.
댓글 없음:
댓글 쓰기