티스토리 뷰

spring

day3 class03 Model2 아키텍처로 게시판 개발

일상다반ㅅㅏ 2019. 1. 20. 21:46

MVC 아키텍처에서 각 요소의 기능과 개발 주체

 기능

 구성요소 

 개발 주체 

 Model 

 VO, DAO 클래스 

 자바 개발자 

 View 

 JSP 페이지 

 웹 디자이너 

 Controller 

 Servlet 클래스 

 자바 개발자 또는 MVC 프레임워크 

- 지금은 컨트롤러에대한 이해를 위해 프레임워크에서 제공하는 컨트롤러보다는 컨트롤러의 기능 이해에 중점을 둔다.


1. 컨트롤러 구현

1-1 컨트롤러 파일 생성

1) src/main/java 폴더 위에서 마우스 우클릭

2) new > servlet

3) java package : com.springbook.view.controller / class name : DispatcherServlet 입력 후 Next

4) name : action 입력

5) /action 더블 클릭 후 *.do 입력 후 finish

6) WEB-INF/web.xml에 서블릿 관련 설정이 자동으로 추가된다.


1-2 컨트롤러

- 검색 결과를 HttpSession객체를 사용했다. -> 당분간 실습을 위해 사용한다.

> 검색 결과를 JSP에 공유하기 위해 세션에 저장하는 것은 문제가 있다. 세션은 브라우저당 서버 메모리에 하나씩 유지되는 객체이므로 사용자가 많을수록 많은 세션이 생성되고, 세션에 정보가 많이 저장 될 수록 서버 입장에서는 부담스러울 수 밖에 없다. 따라서 검색 결과는 세션이 아닌 HttpServletRequest 객체에 저장하여 공유해야 한다. 이는 클라이언트가 서버에 요청을 전송할 때마다 매번 새롭게 생성되며, 응답 메시지가 브라우저에 전송되면 바로 삭제되는 1회성 객체이므로 서버에 부담이 되지 않는다.

- *_proc.jsp에 있던 자바로직을 컨트롤러로 옮겼다. 이로써 jsp페이지에 view에 관한 소스만 남게 되었다. 세션에 저장된 데이터를 꺼내는 코드와 for 루프 같은 자바 코드가 남이있긴 하지만 이는 추후에 EL이나 JSTL을 이용하여 모두 제거할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
package com.springbook.view.controller;
 
import java.io.IOException;
import java.util.List;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
 
import com.springbook.biz.board.BoardVO;
import com.springbook.biz.board.impl.BoardDAO;
import com.springbook.biz.user.UserVO;
import com.springbook.biz.user.impl.UserDAO;
 
public class DispatcherServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        process(request, response);
    }
 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("EUC-KR"); //post 방식에서 한글 깨짐 방지 처리
        process(request, response);
    }
 
    private void process(HttpServletRequest request, HttpServletResponse response) throws IOException {
        // 1. 클라이언트의 요청 path 정보를 추출한다.
        String uri = request.getRequestURI();
        String path = uri.substring(uri.lastIndexOf("/"));
        System.out.println(uri);
        
        // 2. 클라이언트의 요청 path에 따라 적절히 분기처리 한다.
        if(path.equals("/login.do")) {
            System.out.println("로그인 처리");
            
            // 1. 사용자 입력 정보 추출
            String id = request.getParameter("id");
            String password = request.getParameter("password");
            
            // 2. DB 연동 처리
            UserVO vo = new UserVO();
            vo.setId(id);
            vo.setPassword(password);
            
            UserDAO userDAO = new UserDAO();
            UserVO user = userDAO.getUser(vo);
            
            // 3. 화면 네비게이션
            if(user != null) {
                response.sendRedirect("getBoardList.do"); //글 목록 호출을 위해 jsp가 아닌 do로 호출
            } else {
                response.sendRedirect("login.jsp");
            }
        } else if(path.equals("/logout.do")) {
            System.out.println("로그아웃 처리");
            
            // 1. 브라우저와 연결된 세션 객체를 강제 종료한다.
            HttpSession session = request.getSession();
            session.invalidate();
            
            // 2. 화면 네비게이션
            response.sendRedirect("login.jsp");
        } else if(path.equals("/insertBoard.do")) {
            System.out.println("글 등록 처리");
            
            // 1. 사용자 입력 정보 추출
            String title = request.getParameter("title");
            String writer = request.getParameter("writer");
            String content = request.getParameter("content");
            
            // 2. DB 연동 처리
            BoardVO vo = new BoardVO();
            vo.setTitle(title);
            vo.setWriter(writer);
            vo.setContent(content);
            
            BoardDAO boardDAO = new BoardDAO();
            boardDAO.insertBoard(vo);
            
            // 3. 화면 네비게이션
            response.sendRedirect("getBoardList.do");
        } else if(path.equals("/updateBoard.do")) {
            System.out.println("글 수정 처리");
            
            // 1. 사용자 입력 정보 추출
            request.setCharacterEncoding("EUC-KR");
            String title = request.getParameter("title");
            String content = request.getParameter("content");
            String seq = request.getParameter("seq");
            
            // 2. DB 연동 처리
            BoardVO vo = new BoardVO();
            vo.setTitle(title);
            vo.setContent(content);
            vo.setSeq(Integer.parseInt(seq));
            
            BoardDAO boardDAO = new BoardDAO();
            boardDAO.updateBoard(vo);
            
            // 3. 화면 네비게이션
            response.sendRedirect("getBoardList.do");
        } else if(path.equals("/deleteBoard.do")) {
            System.out.println("글 삭제 처리");
            
            // 1. 사용자 입력 정보 추출
            String seq = request.getParameter("seq");
            
            // 2. DB 연동 처리
            BoardVO vo = new BoardVO();
            vo.setSeq(Integer.parseInt(seq));
            
            BoardDAO boardDAO = new BoardDAO();
            boardDAO.deleteBoard(vo);
            
            // 3. 화면 네비게이션
            response.sendRedirect("getBoardList.do");
        } else if(path.equals("/getBoard.do")) {
            System.out.println("글 상세 조회 처리");
            
            // 1. 검색할 게시글 번호 추출
            String seq = request.getParameter("seq");
 
            // 2. DB 연동 처리
            BoardVO vo = new BoardVO();
            vo.setSeq(Integer.parseInt(seq));
            
            BoardDAO boardDAO = new BoardDAO();
            BoardVO board = boardDAO.getBoard(vo);
            
            // 3. 응답 화면 구성
            HttpSession session = request.getSession();
            session.setAttribute("board", board);
            response.sendRedirect("getBoard.jsp");
        } else if(path.equals("/getBoardList.do")) {
            System.out.println("글 목록 검색 처리");
            
            // 1. 사용자 입력 정보 추출(검색 기능은 추후 구현)
            // 2. DB 연동 처리
            BoardVO vo = new BoardVO();
            BoardDAO boardDAO = new BoardDAO();
            List<BoardVO> boardList = boardDAO.getBoardList(vo);
            
            // 3. 응답 화면 구성
            HttpSession session = request.getSession();
            session.setAttribute("boardList", boardList);
            response.sendRedirect("getBoardList.jsp");
        }
    }
}
 
cs


'spring' 카테고리의 다른 글

day3 class05 Spring MVC 구조  (0) 2019.01.27
day3 class04 MVC 프레임워크 개발  (0) 2019.01.27
day3 class01~02 model1 아키텍처로 게시판 개발  (0) 2019.01.16
day2 class07 트랜잭션 처리  (0) 2019.01.14
day2 class06 스프링 JDBC  (0) 2019.01.13