웹 프로그래밍/Web
[Web] 7. MVC 패턴(6) - 세션을 이용한 로그아웃 기능
코딩하는 문과생
2020. 1. 31. 14:26
[LoginCtrl path 수정]
로그인하고 첫 페이지가 출력되도록 하기
@Override
public ModelAndView execute(HttpServletRequest request, HttpServletResponse response) {
System.out.println("LoginCtrl execute");
String id = request.getParameter("id");
String pwd = request.getParameter("pwd");
UserDTO dto = new UserDTO(id, pwd);
Object user = service.select(dto);
System.out.println("Ctrl result user : " + user);
ModelAndView mv = new ModelAndView();
if(user != null) {
mv.setSend(true);
mv.setPath("main.jsp"); //수정
//세션에 데이터 심기, 30분동안 유효하게 된다.
HttpSession session = request.getSession(); //세션을 만들고
session.setAttribute("loginSession", user); //세팅하자
}else {
mv.setSend(false);
mv.setPath("error.jsp");
}
return mv;
}
[main.jsp 수정]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!-- 추가 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div align = "center">웹 프레임워크 by ㅋㅋㅋ</div>
<hr/>
Post :: <br/>
<form action="parameter.inc" method="post">
<input type="text" name="msg" id="msg">
<input type="submit" value="이벤트">
</form>
Get :: <br/>
<a href = "parameter.inc?msg=sijune">링크</a>
<!-- a태그는 무조건 get방식 -->
<p/>
<!-- 추가 -->
<c:choose>
<c:when test="${ loginSession == null }">
Login :: <br/>
<form action="login.inc" method="post">
<input type="text" name="id" id="id">
<input type="text" name="pwd" id="pwd">
<input type="submit" value="로그인">
</form>
</c:when>
<c:otherwise>
${ loginSession.name } 님 환영합니다.
<a href="logout.inc">로그아웃</a>
</c:otherwise>
</c:choose>
</body>
</html>

그러나 결과는 ~/login.inc로 넘어간다. 우리는 ~/main.inc url을 보여주고 싶다.
[한번 더 수정]
url을 위해서
@Override
public ModelAndView execute(HttpServletRequest request, HttpServletResponse response) {
System.out.println("LoginCtrl execute");
String id = request.getParameter("id");
String pwd = request.getParameter("pwd");
UserDTO dto = new UserDTO(id, pwd);
Object user = service.select(dto);
System.out.println("Ctrl result user : " + user);
ModelAndView mv = new ModelAndView();
if(user != null) {
mv.setSend(false);
mv.setPath("index.jsp"); //수정
//세션에 데이터 심기, 30분동안 유효하게 된다.
HttpSession session = request.getSession(); //세션을 만들고
session.setAttribute("loginSession", user); //세팅하자
}else {
mv.setSend(false);
mv.setPath("error.jsp");
}
return mv;
}

[기계처럼 LogoutCtrl, BeanFactory 작성]
public class LogoutCtrl implements Controller{
@Override
public ModelAndView execute(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession session = request.getSession(false); //기존 세션을 받고
session.invalidate(); //세션 해제
return new ModelAndView(false, "index.jsp");
}
}
private BeanFactory() {
map.put("/incWEB/main.inc", new MainCtrl());
map.put("/incWEB/parameter.inc", new ParamCtrl());
map.put("/incWEB/insert.inc", new InsertCtrl());
map.put("/incWEB/select.inc", new SelectCtrl());
map.put("/incWEB/login.inc", new LoginCtrl());
map.put("/incWEB/list.inc", new ListCtrl());
map.put("/incWEB/logout.inc", new LogoutCtrl());
}
[main.jsp 정리]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div align = "center">웹 프레임워크 by ㅋㅋㅋ</div>
<hr/>
Post :: <br/>
<form action="parameter.inc" method="post">
<input type="text" name="msg" id="msg">
<input type="submit" value="이벤트">
</form>
Get :: <br/>
<a href = "parameter.inc?msg=sijune">링크</a>
<!-- a태그는 무조건 get방식 -->
<p/>
<c:choose>
<c:when test="${ loginSession == null }">
Login :: <br/>
<form action="login.inc" method="post">
<input type="text" name="id" id="id">
<input type="text" name="pwd" id="pwd">
<input type="submit" value="로그인">
</form>
</c:when>
<c:otherwise>
${ loginSession.name } 님 환영합니다.
<a href="logout.inc">로그아웃</a>
</c:otherwise>
</c:choose>
<p/>
List ::
<a href="list.inc">전체출력</a>
</body>
</html>
[list.jsp에 form 태그 추가]
search bar 추가
<body>
<form action="search.inc" method="post">
<input type="text" name="keyword" id="keyword">
<input type="submit" id="searchBtn" value="Search">
</form>
- 데이터를 주고 받는 방법
- form태그 이용
- a 태그 이용
- 스크립트 이용
- 비동기 통신