1. Model 2 아키텍처 구조
- 작고 단순한 시스템을 개발하거나 개발 인력이 충분하지 않을 때는 구조가 단순한 Model 1 아키텍처를 사용하기도한다.
- 하지만, 시스템의 규모가 크고 기능이 복잡한 엔터프라이즈 시스템을 개발하면 Model 1 아키텍처는 적합하지 않다.
- Model 1의 문제점을 해결하기 위한 Model 2
- Model 2 아키텍처에서 가장 중요한 특징은 Controller의 등장이다.
- Model 1에서 JSP 파일에 있던 Controller Java 로직이 Controller(Servlet)으로 옮겨간다.
- 즉 Model 2 에서는 디자이너가 JSP파일을 관리하고 개발자가 Controller와 Model만 관리하게 된다.
2. Servlet (Controller)만들기
- 웹 브라우저에서 어떤 파일명이건 상관없이 확장자가 .do이면 무조건 Servlet이 뜨도록 처리한다.
- web.xml 확인하기
- 서버확인하기
- process 라는 메서드를 만들어서 request와 response를 매개변수로 path를 구할 수 있는 메서드를 만든다.
- doGet과 doPost에 모두 process라는 메서드를 실행해준다.
- 이때 doPost에는 .setCharacterEncodint("UTF-8")을 넣어서 한글출력에 문제없도록 설정한다.
글등록, 글수정 작업시 한글이 깨지지 않을 수 있다.
- 이렇게처리해주면 앞으로 인코딩은 Servlet에서 담당하므로 따로 처리하지 않아도된다.
추후 다른 인코딩으로 변경을 원하면 Servlet에서 변경하면 된다.
- 이 작업은 최종적으로 분기처리하기위한 작업이다.
- 클라이언트의 요청 path에 따라 적절히 분기처리한다.
- 웹 페이지에 login.do를 입력하면 콘솔창에 분기처리해준 로그인처리가 입력된다.
- 나머지 메서드들도 Servlet에서 처리할 수 있도록 정리한다.
- 이때, list에 값을 담아오는 목록보기의 경우
- 값이 담겨있는 List형의 boardList의 데이터를 session에 담아서 다른 페이지에 넘겨준다.
- Servlet에 작업이 완료되면, view가 없는 JSP파일은 다 삭제해서 정리해준다.
또한, JSP파일 내의 Java로직부분역시 지워준다.
- 정리완료확인
- Servlet 파일 소스보기
package com.springbook.biz.Controller;
import java.io.IOException;
import java.sql.Date;
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.boarddao.BoardDao;
import com.springbook.biz.boarddao.BoardDaoImpl;
import com.springbook.biz.users.UserVo;
import com.springbook.biz.usersdao.UserDao;
import com.springbook.biz.usersdao.UserDaoImpl;
public class DispatcherServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public DispatcherServlet() {
super();
}
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("UTF-8");
process(request,response);
}
private void process(HttpServletRequest request, HttpServletResponse response) throws IOException {
String uri= request.getRequestURI();
String path = uri.substring(uri.lastIndexOf("/"));
System.out.println(path);
HttpSession session = request.getSession();
BoardVO vo = new BoardVO();
BoardDao dao = new BoardDaoImpl();
if(path.equals("/login.do")) {
System.out.println("로그인 처리");
String id = request.getParameter("id");
String password = request.getParameter("password");
UserVo uvo = new UserVo();
uvo.setId(id);
uvo.setPassword(password);
UserDao udao = new UserDaoImpl();
UserVo user = udao.getUser(uvo);
if( user.getId() != null){
session.setAttribute("id",user.getId());
response.sendRedirect("getBoardList.do");
}else{
response.sendRedirect("login.jsp");
}
}
else if(path.equals("/logout.do")) {
System.out.println("로그아웃 처리");
session.invalidate();
response.sendRedirect("login.jsp");
}
else if(path.equals("/insertBoard.do")) {
System.out.println("글 등록 처리");
String title = request.getParameter("title");
String writer = request.getParameter("writer");
String content = request.getParameter("content");
vo.setTitle(title);
vo.setWriter(writer);
vo.setContent(content);
dao.insertBoard(vo);
response.sendRedirect("getBoardList.do");
}
else if(path.equals("/updateBoard.do")) {
System.out.println("글 수정 처리");
int seq = Integer.parseInt(request.getParameter("seq"));
String title = request.getParameter("title");
String writer = request.getParameter("writer");
String content = request.getParameter("content");
Date regDate = Date.valueOf(request.getParameter("regdate"));
int cnt = Integer.parseInt(request.getParameter("cnt"));
int mainSeq= Integer.parseInt(request.getParameter("mainSeq"));
vo.setSeq(seq);
vo.setTitle(title);
vo.setWriter(writer);
vo.setContent(content);
vo.setRegDate(regDate);
vo.setCnt(cnt);
vo.setMainSeq(mainSeq);
dao.updateBoard(vo);
response.sendRedirect("getBoardList.do");
}
else if(path.equals("/deleteBoard.do")) {
System.out.println("글 삭제 처리");
int s = Integer.parseInt(request.getParameter("seq"));
dao.deleteBoard(s);
response.sendRedirect("getBoardList.do");
}
else if(path.equals("/getBoard.do")) {
System.out.println("글 상세조회 처리");
vo = new BoardVO();
int seq = Integer.parseInt(request.getParameter("seq"));
vo.setSeq(seq);
BoardVO board = dao.getBoard(vo);
dao.cntUpdate(seq);
session.setAttribute("board", board);
response.sendRedirect("getBoard.jsp");
}
else if(path.equals("/getBoardList.do")) {
System.out.println("글 목록검색 처리");
String ch1 = request.getParameter("ch1");
String ch2 = request.getParameter("ch2");
vo.setCh1(ch1);
vo.setCh2(ch2);
List<BoardVO> boardList = dao.getBoardList(vo);
session.setAttribute("boardList", boardList);
response.sendRedirect("getBoardList.jsp");
}
}
}