디지털 컨버전스/Project

[FrontController]

gimyeondong 2020. 5. 1. 11:15

디자인 패턴

FrontController 패턴

 

회원관련 프론트 컨트롤러

게시판 관련 프론트 컨트롤러

관리자 관련 프론트 컨트롤러

package kh.backend.controller;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

// delete.msg / input.msg / out.msg
@WebServlet("*.msg")
public class FrontController extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("페이지 요청 되었음.");
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

데이터 없이 바로 JSP로 이동하는 경우도 Controller를 통해 이동 하도록 만들것

데이터를 가져가는 것 말고도, 보안/로그 처리 등에 필요

Controller를 거쳐야 유지 보수에 유리


1. 모든 리퀘스트를 FrontController로 오게 하면, 어떤 리퀘스트인지 파악하는 과정 필요

package kh.backend.controller;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

// delete.msg / input.msg / out.msg
@WebServlet("*.msg")
public class FrontController extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 여러 리퀘스트가 들어올때 어떤 걸 해줄지?
		String requestURI = request.getRequestURI();
		System.out.println(requestURI);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

<%@ 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>
<script src="https://code.jquery.com/jquery-3.5.0.js"></script>
</head>
<body>
	<button id="toInput">toInput</button>
	<button id="toOutput">toOutput</button>
	<button id="toDelete">toDelete</button>
	<script>
		$("#toInput").on("click",function(){
			location.href="input.jsp";
		
		})
		$("#toOutput").on("click",function(){
			location.href="Output.msg";
		})
		$("#toDelete").on("click",function(){
			location.href="delete.msg";
		})
	</script>
</body>
</html>

substring

package kh.backend.controller;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

// delete.msg / input.msg / out.msg
@WebServlet("*.msg")
public class FrontController extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 여러 리퀘스트가 들어올때 어떤 걸 해줄지?
		String contextPath = request.getContextPath();
		String requestURI = request.getRequestURI();
		
		String cmd = requestURI.substring(contextPath.length());
		System.out.println("contextPath : "+contextPath);
		System.out.println("requestURI : "+requestURI);
		System.out.println("Command : "+cmd);
	
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}

package kh.backend.controller;

import java.io.IOException;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import kh.backend.dao.MessagesDAO;
import kh.backend.dto.MessagesDTO;

// delete.msg / input.msg / out.msg
@WebServlet("*.msg")
public class FrontController extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 여러 리퀘스트가 들어올때 어떤 걸 해줄지?
		request.setCharacterEncoding("UTF-8");
		String contextPath = request.getContextPath();
		String requestURI = request.getRequestURI();

		String cmd = requestURI.substring(contextPath.length());

		MessagesDAO dao = new MessagesDAO();

		try {
			if(cmd.contentEquals("/output.msg")) {
				List<MessagesDTO> list =dao.selectAll(); //지역변수가 outputView.jsp에서 보이지 않음
				request.setAttribute("list", list);	
				RequestDispatcher rd =
						request.getRequestDispatcher("outputView.jsp");
				rd.forward(request, response);
			}else if(cmd.contentEquals("/delete.msg")){
				List<MessagesDTO> list =dao.selectAll();
				request.setAttribute("list", list);
				RequestDispatcher rd =
						request.getRequestDispatcher("deleteView.jsp");
				rd.forward(request, response);
			}else if(cmd.contentEquals("/input.msg")) {
				String name = request.getParameter("name");
				String msg = request.getParameter("msg");
				int result = dao.insert(new MessagesDTO(0,name,msg,null));
				System.out.println(result);
				response.sendRedirect("index.jsp");
			}else if(cmd.contentEquals("/deleteProc.msg")) {
				String del_num = request.getParameter("del_num");
				int del_result = dao.delete(del_num);
				response.sendRedirect("delete.msg");
			}
		}catch(Exception e) {
			e.printStackTrace();
			response.sendRedirect("error.jsp");
		}
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

프론트컨트롤러

종류별로 나누는 방식 (메세지컨트롤러, 멤버컨트롤러)

큰 카테고리에 따라 정리정돈