디지털 컨버전스/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);
}
}
프론트컨트롤러
종류별로 나누는 방식 (메세지컨트롤러, 멤버컨트롤러)
큰 카테고리에 따라 정리정돈