티스토리 뷰
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 |
- Total
- Today
- Yesterday
- 어노테이션
- 검색
- 스프링 컨테이너
- Class path contains multiple SLF4J bindings
- ViewResolver
- XmlWebApplicationContext
- JoinPoint
- 컨트롤러
- aspect oriented programming
- aop
- servlet context
- java.lang.NoClassDefFoundError: org/slf4j/event/LoggingEvent
- @Autowired
- LoggingEvent
- handlermapping
- 의존성
- blocking
- 횡단 관심
- afterCompletion
- SqlSessionFactoryBean
- Controller
- 의존성 주입
- #java.lang.NoClassDefFoundError: org/slf4j/event/LoggingEvent삭제
- postHandler
- NoClassDefFoundError
- multiple SLF4J bindings
- setter 인젝션
- preHandler
- application context
- exclude-mapping
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |