Life is Good

수콩이의 시선

Coding/JSP

[MVC] FrontController 패턴

Soocong 2022. 4. 9. 09:08

MVC(Model - View - Controller) 패턴

 

 

 

 

 

 

 

MVC의 컨트롤러 : 서블릿

 

1. 웹 브라우저가 전송한 HTTP 요청을 받는다. 서블릿의 doGet()메서드나 doPost()메서드가 호출된다.

2. 웹 브라우저가 어떤 기능을 요청했는지 분석한다. 

3. 모델을 사용하여 요청한 기능을 수행한다.

4. 모델로부터 전달받은 결과물을 가공하여, request 나 session의 setAttribute()메서드를 사용하여 결과값을 속성에 저장한다. 이렇게 저장한 결과값은 뷰 JSP에서 사용한다. 

5. 웹 브라우저에 결과를 전송할 JSP를 선택한 후, 해당 JSP로 포워딩한다. 경우에 따라 redirect

 

 

 

FrontController 패턴


클라이언트의 다양한 요청들을 한곳으로 집중시켜서 개발 및 유지보수에 효율성을 극대화 시키는 패턴이다.

 

이를통해 해당하는 각각의 다양한 요청들에 따라 요청에 맞는 서블릿을 향하게 했는데 한곳으로 서블릿을 모아서 관리하는 것을 말한다.

 

 

이러한 형태를 FrontController 패턴적용 후

 

 


 

FrontController.java

package com.java.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;

/**
 * Servlet implementation class FrontController
 */
public class FrontController extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public FrontController() {
	super();
	// TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
	    throws ServletException, IOException {

    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
	    throws ServletException, IOException {
	// TODO Auto-generated method stub
	doGet(request, response);
    }

}

Command.java

package com.java.mvc06;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public interface Command {
    public String proRequest(HttpServletRequest requst, HttpServletResponse response);
}

ListAction.java

package com.java.mvc06;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.java.mvc05.Command;

public class ListAction implements Command {

    @Override
    public String actionDo(HttpServletRequest request, HttpServletResponse response) throws Exception {
	// TODO Auto-generated method stub
	return null;
    }

}

WriteAction.java

package com.java.mvc06;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.java.mvc05.Command;

public class WriteAction implements Command {

    @Override
    public String actionDo(HttpServletRequest request, HttpServletResponse response) throws Exception {
	// TODO Auto-generated method stub
	return null;
    }

}

cmdURL.properties

/write.stu = com.java.mvc06.WriteAction
/list.stu = com.java.mvc06.ListAction

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>mvcExample</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
	
  <servlet>
  	<servlet-name>Directory</servlet-name>
  	<servlet-class>com.java.mvc01.Directory</servlet-class>
  </servlet>

  <servlet-mapping>
  	<servlet-name>Directory</servlet-name>
  	<url-pattern>*.nhn</url-pattern>
  </servlet-mapping>

  <servlet>
  	<servlet-name>Controller</servlet-name>
  	<servlet-class>com.java.mvc02.Controller</servlet-class>
  </servlet>

  <servlet-mapping>
  	<servlet-name>Controller</servlet-name>
  	<url-pattern>*.kitri</url-pattern>
  </servlet-mapping>
  
  <servlet>
  	<servlet-name>SampleCnt</servlet-name>
  	<servlet-class>com.java.mvc03.Controller</servlet-class>
  </servlet>

  <servlet-mapping>
  	<servlet-name>Controller</servlet-name>
  	<url-pattern>*.do</url-pattern>
  </servlet-mapping>
  
  <servlet>
  	<servlet-name>CommandController</servlet-name>
  	<servlet-class>com.java.mvc04.CommandCnt</servlet-class>
  </servlet>

  <servlet-mapping>
  	<servlet-name>CommandController</servlet-name>
  	<url-pattern>*.action</url-pattern>
  </servlet-mapping>
  
  <servlet>
  	<servlet-name>FrontCnt</servlet-name>
  	<servlet-class>com.java.mvc05.FrontCnt</servlet-class>
  	
  	<init-param>
	  	<param-name>configFile</param-name>
	  	<param-value>C:\sohyunkim\mvc\workspace\mvcExample\WebContent\WEB-INF\commandURI.properties</param-value>
	  </init-param>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>FrontCnt</servlet-name>
  	<url-pattern>*.happy</url-pattern>
  </servlet-mapping>
  
  <servlet>
  	<servlet-name>FrontController</servlet-name>
  	<servlet-class>com.java.mvc06.FrontController</servlet-class>
  	
  	<init-param>
  		<param-name>configFile</param-name>
  		<param-value>/WEB-INF/cmdURL.properties</param-value>
  	</init-param>
  </servlet>

  <servlet-mapping>
  	<servlet-name>FrontController</servlet-name>
  	<url-pattern>*.stu</url-pattern>
  </servlet-mapping>
  
</web-app>

index.jsp

<%@ 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>
</head>
<body>
	<a href="http://localhost:8181/mvcExample/write.kitri">Controller - 글쓰기</a>
	<a href="http://localhost:8181/mvcExample/list.kitri">Controller - 글목록</a>
	<br /><br />
	
	<a href="http://localhost:8181/mvcExample/write.do">SampleController - 글쓰기</a>
	<a href="http://localhost:8181/mvcExample/list.do">SampleController - 글목록</a>
	<br /><br />

	<a href="http://localhost:8181/mvcExample/write.action">CommandController - 글쓰기</a>
	<a href="http://localhost:8181/mvcExample/list.action">CommandController - 글목록</a>
	<br /><br />
	
	<a href="http://localhost:8181/mvcExample/write.happy">FrontController - 글쓰기</a>
	<a href="http://localhost:8181/mvcExample/list.happy">FrontController - 글목록</a>
	<br /><br />

	<a href="http://localhost:8181/mvcExample/write.stu">FrontController - 글쓰기</a>
	<a href="http://localhost:8181/mvcExample/list.stu">FrontController - 글목록</a>
</body>
</html>