코딩하는 문과생

[Web] 7. MVC 패턴(6) - 세션을 이용한 로그아웃 기능 본문

웹 프로그래밍/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 } 님 환영합니다.  &nbsp;&nbsp;&nbsp;
			<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;
	}

로그인 이후에도 url 유지

[기계처럼 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 } 님 환영합니다.  &nbsp;&nbsp;&nbsp;
			<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">&nbsp;&nbsp;
		<input type="submit" id="searchBtn" value="Search">
	</form>

- 데이터를 주고 받는 방법

  1. form태그 이용
  2. a 태그 이용
  3. 스크립트 이용
  4. 비동기 통신