[SPRING] 게시판만들기3 [ Model 2 / Controller(Servlet) ]

🐷Jinie (juniorDeveloper)·2020년 11월 27일
0

JSP/MVC/SPRING

목록 보기
53/81

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;

/**
 * Servlet implementation class DispatcherServlet
 */
public class DispatcherServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public DispatcherServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		process(request,response);
	}
	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse 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");
		}
	}
}

profile
ᴘᴇᴛɪᴛs ᴅᴇ́ᴠᴇʟᴏᴘᴘᴇᴜʀ. ᴘʀᴏɢʀᴀᴍᴍᴀᴛɪᴏɴ = ᴘʟᴀɪsɪʀ 💕

0개의 댓글