코딩하는 문과생

[Web] 6. MVC 패턴(5) - 데이터를 심기 위한 session 본문

웹 프로그래밍/Web

[Web] 6. MVC 패턴(5) - 데이터를 심기 위한 session

코딩하는 문과생 2020. 1. 31. 09:15

[Preview]

전체 흐름 & 해당 글 부분 & 세션


1. 데이터 한 줄만 가져오기

[LoginCtrl 수정]

데이터를 받아오기 위한 세션생성
package com.sinc.intern.insa.ctrl;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.sinc.intern.insa.model.vo.UserDTO;
import com.sinc.intern.insa.service.UserService;
import com.sinc.intern.insa.service.UserServiceImpl;
import com.sinc.intern.util.Controller;
import com.sinc.intern.view.util.ModelAndView;

public class LoginCtrl implements Controller{
	
	//Dependency Injection - 의존성 주입
	private UserService service;
	
	public LoginCtrl() {
		service = new UserServiceImpl();
	}
	
	@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("ok.jsp");
			//세션에 데이터 심기, 30분동안 유효하게 된다.
			HttpSession session = request.getSession(); //세션을 만들고
			session.setAttribute("loginSession", user); //세팅하자
		}else {
			mv.setSend(false);
			mv.setPath("error.jsp");
		}
		return mv;
	}

}

[ok.jsp, error.jsp 파일 생성]

ok, error파일 생성

[ok.jsp 작성]

JSP 태그 이용

jsp파일 태그
태그 특징

<%-- --%> : jsp주석

<%@ page import="com.sinc.intern.insa.model.vo.UserVO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<% 	// scriptlet tag - service() 메서드의 역할
		
	// jsp내에 이미 정의된 12개의 내장객체가 있다. 
		// 그중 하나가 session이라는 이름
		UserVO user = (UserVO)(session.getAttribute("loginSession"));
	%>
	<%= user %>
</body>
</html>

 

DB에 있는 데이터 입력
출력

[ok.jsp 수정]

JSP 태그, 객체의 메소드를 이용해 데이터에 접근
<%@ page import="com.sinc.intern.insa.model.vo.UserVO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<% 	// scriptlet tag - service() 메서드의 역할
		
	// jsp내에 이미 정의된 12개의 내장객체가 있다. 
		// 그중 하나가 session이라는 이름
		UserVO user = (UserVO)(session.getAttribute("loginSession"));
	%>
	<font color = "red">
		<%= user.getName() %>
	</font>
	 님 환영합니다.
</body>
</html>

[ok.jsp수정]

 EL문법사용
<%@ page import="com.sinc.intern.insa.model.vo.UserVO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<font color = "red">
		<!-- EL문법, 속성에 대한 접근이 가능 -->
		${ loginSession.name }
		<%-- ${ loginSession['name'] } 동일--%>
	</font>
	 님 환영합니다.
</body>
</html>

jstl.jar, orgjson.jar(비동기 통신을 위해서), standard.jar파일을 WEB-INF내의 lib로 복붙한다.

[ok.jsp수정]

JSTL문법사용
<%@ page import="com.sinc.intern.insa.model.vo.UserVO"%>
<%@ 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>
		<!-- test가 조건식 -->
		<c:if test="${ loginSession != null }">
			${ loginSession.name } 님 환영합니다.
		</c:if>

</body>
</html>

2. 데이터 전체 출력하기

[ok.jsp 추가]

전체출력 추가
<%@ page import="com.sinc.intern.insa.model.vo.UserVO"%>
<%@ 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>
		<!-- test가 조건식 -->
		<c:if test="${ loginSession != null }">
			${ loginSession.name } 님 환영합니다.
		</c:if>

		<hr>
		
		<a href="list.inc">전체 출력</a>
		

</body>
</html>

[ListCtrl 생성 후 인터페이스 구현]

package com.sinc.intern.insa.ctrl;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.sinc.intern.insa.service.UserService;
import com.sinc.intern.insa.service.UserServiceImpl;
import com.sinc.intern.util.Controller;
import com.sinc.intern.view.util.ModelAndView;

public class ListCtrl implements Controller{
	
	@Override
	public ModelAndView execute(HttpServletRequest request, HttpServletResponse response)
	throws ServletException, IOException {
		
		return null;
	}
}

[BeanFactory에 등록]

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());
	}

[ListCtrl 수정]

Collection에 담아서 보내버린다.
public class ListCtrl implements Controller{
	private UserService service;
	
	public ListCtrl() {
		service = new UserServiceImpl();
	}
	
	@Override
	public ModelAndView execute(HttpServletRequest request, HttpServletResponse response)
	throws ServletException, IOException {
		System.out.println("ListCtrl execute");
		//리스트 전체를 가져온다.
		List<Object> list = service.select();
		//session이 아닌 request속성으로 보내버린다.
		request.setAttribute("lists", list);
		return new ModelAndView(true, "list.jsp");
	}
}

[list.jsp]

JSTL문법 사용
<%@ 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>
	<c:forEach var="row" items="${ lists }">
		${row}<br/>
	</c:forEach>
</body>
</html>

[UserServiceImpl 추가]

@Override
	public List<Object> select() {
		System.out.println("UserService select list");
		return dao.selectRow();
	}

[UserDaoImpl 추가]

@Override
	public List<Object> selectRow()  {
		System.out.println("UserDao selectRow all") ;
		Connection        conn  = null ; 
		PreparedStatement pstmt = null ; 
		ResultSet		  rset  = null ; 
		String loginSQL = "SELECT * FROM INTERN_USER_TBL" ; 
		UserVO user = null ; 
		List<Object> list = new Vector<>();
		try{
			conn  = DriverManager.getConnection(URL, USER, PASSWD) ; 
			pstmt = conn.prepareStatement(loginSQL); 

			rset = pstmt.executeQuery() ; 
			while(rset.next()) {
				user = new UserVO(	rset.getString(1),
									rset.getString(2),
									rset.getString(3),
									rset.getDouble(4),
									rset.getString(5)) ; 
				list.add(user);
			}
			System.out.println("after select all--");
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			try{
				if( conn != null ) { conn.close(); }
			}catch(Exception e) {
				e.printStackTrace();
			}
		}
		return list ; 
	}