코딩하는 문과생
[Web] 6. MVC 패턴(5) - 데이터를 심기 위한 session 본문
[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.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>


[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 ;
}
'웹 프로그래밍 > Web' 카테고리의 다른 글
| [Web] 8. Json 통신 (0) | 2020.01.31 |
|---|---|
| [Web] 7. MVC 패턴(6) - 세션을 이용한 로그아웃 기능 (0) | 2020.01.31 |
| [Web] 5. MVC 패턴(4) - DB연동 (0) | 2020.01.30 |
| [Web] 4. MVC 패턴(3) - 로그인 과정을 통해 알아보는 DAO까지의 흐름 (0) | 2020.01.30 |
| [Web] 3. MVC 패턴(2) - Main과 Param 동작방식 (0) | 2020.01.30 |