반응형
01. 로그인 | 로그아웃
1) 로그인 페이지요청
LoginFormModel.java
package xyz.itwill.mvc;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//클라이언트가 [/loginForm.do]로 요청한 경우 실행될 모델 클래스
// => [user_login.jsp]로 포워드 이동하기 위한 정보가 저장된 ActionForward 객체 반환
public class LoginFormModel implements Action {
@Override
public ActionForward execute(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ActionForward actionForward=new ActionForward();
actionForward.setForward(true);//포워드이동
actionForward.setPath("/model_two/user_login.jsp");
return actionForward;
}
}
2) 로그인 처리
LoginModel.java
package xyz.itwill.mvc;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import xyz.itwill.exception.AuthFailException;
import xyz.itwill.service.UserinfoService;
//클라이언트가 [/login.do]로 요청한 경우 실행될 모델 클래스
// => 로그인정보를 전달받아 USERINFO 테이블에 저장된 회원정보와 비교하여 인증 처리
// => **[인증 성공]** : 세션에 권한 관련 정보를 저장하고 [loginForm.do]로 리다이렉트 이동하기 정보가 저장된 ActionForward 객체 반환
// => **[인증 실패]** : [user_login.jsp]로 포워드 이동하기 위한 정보가 저장된 ActionForward 객체 반환 - 에러메세지와 아이디를 request 속성값으로 저장하여 JSP 문서에 제공
public class LoginModel implements Action {
@Override
public ActionForward execute(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ActionForward actionForward=new ActionForward();
//요청을 처리하면서 발생되는 모든 예외를 처리하기 위한 예외처리 기능 구현
try {
if(request.getMethod().equals("GET")) {//비정상적인 요청인 경우
throw new Exception();//인위적 예외 발생
}
//전달값을 반환받아 저장
String userid=request.getParameter("userid");
String password=request.getParameter("password");
//모델 클래스의 요청 처리 메소드에서는 Service 객체로 메소드를 호출하여
//데이타베이스 관련된 작업이 처리되도록 작성
//UserinfoService 클래스의 auth() 메소드를 호출하여 인증 처리
// => AuthFailException이 발생된 경우 인증 실패
UserinfoService.getService().auth(userid, password);
//인증이 성공된 경우 세션에 권한 관련 정보(회원정보) 저장
// => 세션 바인딩하여 HttpSession 객체를 반환받아 저장
HttpSession session=request.getSession();
//Session Scope : 동일한 세션을 사용하는 모든 웹프로그램에서 속성값을 반환받아 사용 가능
// => 웹브라우저가 종료되면 클라이언트에 바인딩된 세션은 자동으로 제거
session.setAttribute("loginUserinfo", UserinfoService.getService().getUserinfo(userid));
actionForward.setForward(false);//리다이렉트이동
actionForward.setPath("loginForm.do");
} catch (AuthFailException e) {
//인증 실패에 의해 발생된 예외에 대한 처리 명령 작성
//Request Scope : 스레드가 이동된 웹프로그램(JSP)에서만 속성값을 반환받아 사용 가능
request.setAttribute("message", e.getMessage());
request.setAttribute("userid", request.getParameter("userid"));
actionForward.setForward(true);//포워드이동
actionForward.setPath("/model_two/user_login.jsp");
} catch (Exception e) {
//모든 예외에 대한 처리 명령 작성
// => [user_error.jsp]로 포워드 이동하기 위한 정보가 저장된 ActionForward 객체 반환
//actionForward.setForward(true);//포워드이동
//actionForward.setPath("/model_two/user_error.jsp");
//혹은
// => [error.do]로 리다이렉트 이동하기 위한 정보가 저장된 ActionForward 객체 반환
e.printStackTrace();//서버 콘솔에 에러메세지 출력(프로그래머를 위한)
actionForward.setForward(false);//리다이렉트이동
actionForward.setPath("error.do");
}
return actionForward;
}
}
3) 로그아웃 처리
LogoutModel.java
package xyz.itwill.mvc;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
//클라이언트가 [/logout.do]로 요청한 경우 실행될 모델 클래스
// => 로그아웃 처리
// => [loginForm.do]로 리다이렉트 이동하기 정보가 저장된 ActionForward 객체 반환
public class LogoutModel implements Action {
@Override
public ActionForward execute(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession session=request.getSession();
//session.removeAttribute("loginUserinfo");
session.invalidate();
ActionForward actionForward=new ActionForward();
actionForward.setForward(false);//리다이렉트이동
actionForward.setPath("loginForm.do");
return actionForward;
}
}
02. 회원등록
1) 회원등록 페이지요청
WriteFormModel.java
package xyz.itwill.mvc;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import xyz.itwill.dto.UserinfoDTO;
//클라이언트가 [/writeForm.do]로 요청한 경우 실행될 모델 클래스
// => 관리자만 요청 가능하도록 권한 설정
// => [user_write.jsp]로 포워드 이동하기 정보가 저장된 ActionForward 객체 반환
public class WriteFormModel implements Action {
@Override
public ActionForward execute(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ActionForward actionForward=new ActionForward();
try {
//세션을 바인딩해서 저장
HttpSession session=request.getSession();
UserinfoDTO loginUserinfo=(UserinfoDTO)session.getAttribute("loginUserinfo");
//비로그인 사용자이거나 로그인 사용자가 관리자가 아닌 경우 - 비정상적인 요청
if(loginUserinfo==null || loginUserinfo.getStatus()!=9) {
throw new Exception();
}
actionForward.setForward(true);//포워드이동
actionForward.setPath("/model_two/user_write.jsp");
//모든 예외 다 잡기
} catch (Exception e) {
e.printStackTrace();
actionForward.setForward(false);//리다이렉트이동
actionForward.setPath("error.do");
}
return actionForward;
}
}
2) 회원등록 처리
WriteModel.java
package xyz.itwill.mvc;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import xyz.itwill.dto.UserinfoDTO;
import xyz.itwill.exception.ExistsUserinfoException;
import xyz.itwill.service.UserinfoService;
//클라이언트가 [/write.do]로 요청한 경우 실행될 모델 클래스
// => 회원정보를 전달받아 USERINFO 테이블에 삽입 처리
// => [loginForm.do]로 리다이렉트 이동하기 위한 정보가 저장된 ActionForward 객체 반환
public class WriteModel implements Action {
@Override
public ActionForward execute(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ActionForward actionForward=new ActionForward();
UserinfoDTO userinfo=null;
try {
if(request.getMethod().equals("GET")) {
throw new Exception();
}
request.setCharacterEncoding("utf-8");
String userid=request.getParameter("userid");
String password=request.getParameter("password");
String name=request.getParameter("name");
String email=request.getParameter("email");
int status=Integer.parseInt(request.getParameter("status"));
userinfo=new UserinfoDTO();
userinfo.setUserid(userid);
userinfo.setPassword(password);
userinfo.setName(name);
userinfo.setEmail(email);
userinfo.setStatus(status);
//UserinfoService 클래스의 addUserinfo() 메소드 호출
// => 전달받은 아이디가 USERINFO 테이블에 저장된 기존 회원의 아이디와 중복될 경우
//ExistsUserinfoException 발생
UserinfoService.getService().addUserinfo(userinfo);
actionForward.setForward(false);
actionForward.setPath("loginForm.do");
//ExistsUserinfoException예외 발생 시 잡기
} catch (ExistsUserinfoException e) {
//아이디가 중복될 경우 발생되는 예외에 대한 처리 명령 작성
request.setAttribute("message", e.getMessage());
request.setAttribute("userinfo", userinfo);
actionForward.setForward(true);
actionForward.setPath("/model_two/user_write.jsp");
//모든 예외 다 잡기
} catch (Exception e) {
e.printStackTrace();
actionForward.setForward(false);
actionForward.setPath("error.do");
}
return actionForward;
}
}
03. 회원목록
1) 회원목록 페이지요청
ListModel.java
package xyz.itwill.mvc;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import xyz.itwill.dto.UserinfoDTO;
import xyz.itwill.service.UserinfoService;
//클라이언트가 [/list.do]로 요청한 경우 실행될 모델 클래스
// => 로그인 사용자만 요청 가능하도록 권한 설정
// => USERINFO 테이블에 저장된 모든 회원정보를 검색하여 request 속성값으로 저장
//(주의) request는 session과 다르게 "포워드 이동"하지 않고서는 아무도 사용 못함!!!!
// => [user_list.jsp]로 포워드 이동하기 정보가 저장된 ActionForward 객체 반환
public class ListModel implements Action {
@Override
public ActionForward execute(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ActionForward actionForward=new ActionForward();
try {
//세션을 바인딩해 반환받기
HttpSession session=request.getSession();
//세션에 권한관련 속성값 저장
UserinfoDTO loginUserinfo=(UserinfoDTO)session.getAttribute("loginUserinfo");
//비로그인 사용자인 경우 - 비정상적인 요청
if(loginUserinfo==null) {
throw new Exception();
}
//UserinfoService 클래스의 getUserinfoList() 메소드를 호출하여 반환된 회원목록을
//포워드 이동될 JSP에서 사용하기 위해 request 속성값으로 저장
//(클라이언트 요청에 대한 처리결과를 request 속성값으로 저장함)
request.setAttribute("userinfoList", UserinfoService.getService().getUserinfoList());
actionForward.setForward(true);//포워드이동
actionForward.setPath("/model_two/user_list.jsp");
//모든 예외 다 잡기
} catch (Exception e) {
e.printStackTrace();
actionForward.setForward(false);//리다이렉트이동
actionForward.setPath("error.do");
}
return actionForward;
}
}
04. 회원정보
1) 회원정보 페이지요청
ViewModel.java
package xyz.itwill.mvc;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import xyz.itwill.dto.UserinfoDTO;
import xyz.itwill.service.UserinfoService;
//클라이언트가 [/view.do]로 요청한 경우 실행될 모델 클래스
// => 로그인 사용자만 요청 가능하도록 권한 설정
// => 아이디를 전달받아 USERINFO 테이블에 저장된 해당 아이디의 회원정보를 검색하여 request 속성값으로 저장
// => [user_view.jsp]로 포워드 이동하기 정보가 저장된 ActionForward 객체 반환
public class ViewModel implements Action {
@Override
public ActionForward execute(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ActionForward actionForward=new ActionForward();
try {
//세션을 바인딩해 반환받아 저장
HttpSession session=request.getSession();
UserinfoDTO loginUserinfo=(UserinfoDTO)session.getAttribute("loginUserinfo");
//비로그인 사용자인 경우 - 비정상적인 요청
if(loginUserinfo==null) {
throw new Exception();
}
if(request.getParameter("userid")==null) {
throw new Exception();
}
String userid=request.getParameter("userid");
//UserinfoService 클래스의 getUserinfo() 메소드를 호출하여 반환된 회원정보를
//포워드 이동될 JSP에서 사용하기 위해 request 속성값으로 저장
// => UserinfoService 클래스의 getUserinfo() 메소드에서 해당 아이디의 회원정보가
//검색되지 않은 경우 UserinfoNotFoundException 발생 >> 에러페이지 이동
request.setAttribute("userinfo", UserinfoService.getService().getUserinfo(userid));
actionForward.setForward(true);//포워드이동
actionForward.setPath("/model_two/user_view.jsp");
//모든 예외 다 잡기
} catch (Exception e) {
e.printStackTrace();
actionForward.setForward(false);//리다이렉트이동
actionForward.setPath("error.do");
}
return actionForward;
}
}
2) 회원정보수정 페이지요청
ModifyFormModel.java
package xyz.itwill.mvc;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import xyz.itwill.dto.UserinfoDTO;
import xyz.itwill.service.UserinfoService;
//클라이언트가 [/modifyForm.do]로 요청한 경우 실행될 모델 클래스 - 관리자만 요청 가능하도록 권한 설정
// => 아이디를 전달받아 USERINFO 테이블에 저장된 해당 아이디의 회원정보를 검색하여 request 속성값으로 저장
// => [user_modify.jsp]로 포워드 이동하기 정보가 저장된 ActionForward 객체 반환
public class ModifyFormModel implements Action {
@Override
public ActionForward execute(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ActionForward actionForward=new ActionForward();
try {
HttpSession session=request.getSession();
UserinfoDTO loginUserinfo=(UserinfoDTO)session.getAttribute("loginUserinfo");
//비로그인 사용자이거나 로그인 사용자가 관리자가 아닌 경우 - 비정상적인 요청
if(loginUserinfo==null || loginUserinfo.getStatus()!=9) {
throw new Exception();
}
if(request.getParameter("userid")==null) {
throw new Exception();
}
String userid=request.getParameter("userid");
//UserinfoService 클래스의 getUserinfo() 메소드를 호출하여 반환된 회원정보를
//포워드 이동될 JSP에서 사용하기 위해 request 속성값으로 저장
// => UserinfoService 클래스의 getUserinfo() 메소드에서 해당 아이디의 회원정보가
//검색되지 않은 경우 UserinfoNotFoundException 발생 >> 에러페이지 이동
request.setAttribute("userinfo", UserinfoService.getService().getUserinfo(userid));
actionForward.setForward(true);//포워드이동
actionForward.setPath("/model_two/user_modify.jsp");
} catch (Exception e) {
e.printStackTrace();
actionForward.setForward(false);//리다이렉트이동
actionForward.setPath("error.do");
}
return actionForward;
}
}
3)회원정보수정 처리
ModifyModel.java
package xyz.itwill.mvc;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import xyz.itwill.dto.UserinfoDTO;
import xyz.itwill.service.UserinfoService;
//클라이언트가 [/modify.do]로 요청한 경우 실행될 모델 클래스
// => 회원정보를 전달받아 USERINFO 테이블에 저장된 회원정보 변경 처리
// => [view.do]로 리다이렉트 이동하기 위한 정보가 저장된 ActionForward 객체 반환 - 아이디 전달
public class ModifyModel implements Action {
@Override
public ActionForward execute(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ActionForward actionForward=new ActionForward();
try {
if(request.getMethod().equals("GET")) {
throw new Exception();
}
//POST로 요청하지만, 필터 클래스가 있으므로 해당 명령 작성필요없음
//request.setCharacterEncoding("utf-8");
String userid=request.getParameter("userid");
String password=request.getParameter("password");
String name=request.getParameter("name");
String email=request.getParameter("email");
int status=Integer.parseInt(request.getParameter("status"));
UserinfoDTO userinfo=new UserinfoDTO();
userinfo.setUserid(userid);
if(password==null || password.equals("")) {
//비밀번호 전달값이 없는 경우 - 기존 회원의 비밀번호 사용
userinfo.setPassword(UserinfoService.getService().getUserinfo(userid).getPassword());
} else {
//비밀번호 전달값이 있는 경우 - 입력된 비밀번호 사용
userinfo.setPassword(password);
}
userinfo.setName(name);
userinfo.setEmail(email);
userinfo.setStatus(status);
//UserinfoService 클래스의 modifyUserinfo() 메소드 호출
UserinfoService.getService().modifyUserinfo(userinfo);
actionForward.setForward(false);
actionForward.setPath("view.do?userid="+userid);
} catch (Exception e) {
e.printStackTrace();
actionForward.setForward(false);
actionForward.setPath("error.do");
}
return actionForward;
}
}
4)회원정보삭제 처리
RemoveModel.java
package xyz.itwill.mvc;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import xyz.itwill.dto.UserinfoDTO;
import xyz.itwill.service.UserinfoService;
//클라이언트가 [/remove.do]로 요청한 경우 실행될 모델 클래스
// => 관리자만 요청 가능하도록 권한 설정
// => 아이디를 전달받아 USERINFO 테이블에 저장된 해당 아이디의 회원정보 삭제 처리
// => [list.do]로 리다이렉트 이동하기 위한 정보가 저장된 ActionForward 객체 반환
// => 관리자가 자신 계정의 회원정보를 삭제한 경우 [logout.do]로 리다이렉트 이동하기 위한
//정보가 저장된 ActionForward 객체 반환
public class RemoveModel implements Action {
@Override
public ActionForward execute(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ActionForward actionForward=new ActionForward();
try {
HttpSession session=request.getSession();
UserinfoDTO loginUserinfo=(UserinfoDTO)session.getAttribute("loginUserinfo");
//비로그인 사용자이거나 로그인 사용자가 관리자가 아닌 경우 - 비정상적인 요청
if(loginUserinfo==null || loginUserinfo.getStatus()!=9) {
throw new Exception();
}
if(request.getParameter("userid")==null) {
throw new Exception();
}
String userid=request.getParameter("userid");
//UserinfoService 클래스의 removeUserinfo() 메소드 호출
UserinfoService.getService().removeUserinfo(userid);
actionForward.setForward(false);//리다이렉트 이동
if(loginUserinfo.getUserid().equals(userid)) {//로그인 사용자와 삭제 사용자가 같다면
actionForward.setPath("logout.do");
} else {
actionForward.setPath("list.do");
}
} catch (Exception e) {
e.printStackTrace();
actionForward.setForward(false);
actionForward.setPath("error.do");
}
return actionForward;
}
}
05. 에러페이지
1) 에러 페이지요청
ErrorModel.java
package xyz.itwill.mvc;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//클라이언트가 [/error.do]로 요청한 경우 실행될 모델 클래스
// => [user_error.jsp]로 포워드 이동하기 위한 정보가 저장된 ActionForward 객체를 반환
public class ErrorModel implements Action {
@Override
public ActionForward execute(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ActionForward actionForward=new ActionForward();
actionForward.setForward(true);
actionForward.setPath("/model_two/user_error.jsp");
return actionForward;
}
}
반응형
'jsp' 카테고리의 다른 글
[jsp] 31. 회원정보 관리 프로그램 (feat. JSP model2 (MVC패턴)) (0) | 2024.07.19 |
---|---|
[jsp] 30. JSP model2 (MVC패턴) (0) | 2024.07.18 |
[jsp] 28. JSTL(Java Standard Tag Library) (0) | 2024.07.18 |
[jsp] 27. EL 커스텀태그 @taglib (0) | 2024.07.17 |
[jsp] 26. filter클래스 만드는법 (context-param VS init-param) (0) | 2024.07.16 |