너와 나의 연결고리, JSP 🔗(13) - 프론트컨트롤러

joyfulwave·2022년 12월 1일
0




📚 프론트 컨트롤러

⚫ 컨트롤러

⚫ 프론트 컨트롤러


📌 프론트 컨트롤러란

  • 프론트 컨트롤러 도입 전에는 각 컨트롤러 마다 공통 로직을 항상 다시 작성해야 했어요. 그런데 프론트 컨트롤러가 도입된 이후부터는 공통의 로직을 관리하는 서블릿을 만들어 처리할 수 있게 되었어요.

📌 특징

  • 프론트 컨트롤러 서블릿 하나로 클라이언트의 요청을 받아요.
  • 프론트 컨트롤러가 클라이언트의 요청에 맞는 컨트롤러를 찾아 호출해줘요.
  • 컨트롤러에 대한 공통 로직에 처리가 가능해요.
  • 프론트 컨트롤러를 제외한 나머지 컨트롤러는 서블릿을 사용하지 않아도 돼요.

📌 프론트 컨트롤러 간단 예제

⚫ do1.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>
	<h3>do1.jsp</h3>
	${result }
</body>
</html>

⚫ do2.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>
	<h3>do2.jsp</h3>
	${result }
</body>
</html>

⚫ do3.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>
	<h3>do3.jsp</h3>
	${result }
</body>
</html>

⚫ doing.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="do1.do">링크1</a><br>
	<a href="do2.do">링크2</a><br>
	<a href="do3.do">링크3</a><br>
</body>
</html>

⚫ Do1.java

코드를 입력하세요

⚫ Do2.java

package com.koreait.web.servlet;

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

public class Do2 {

	public String execute(HttpServletRequest req, HttpServletResponse resp) {
		
		req.setAttribute("result", "do2으로 요청보내기");
		return "do2.jsp";
		
	}
	
}

⚫ Do3.java

package com.koreait.web.servlet;

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

public class Do3 {

	public String execute(HttpServletRequest req, HttpServletResponse resp) {
		
		req.setAttribute("result", "do3으로 요청보내기");
		return "do3.jsp";
		
	}
	
}

⚫ DoFrontController.java

package com.koreait.web.servlet;

import java.io.IOException;
import java.net.http.HttpRequest;

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

@WebServlet("*.do")
public class DoFrontController extends HttpServlet {
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

		doProcess(req, resp);
	
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

		doProcess(req, resp);
	
	}
	
	protected void doProcess(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("URI : " + req.getRequestURI());
		
		String requestURI = req.getRequestURI();
		String responseURI = null;
		
		if(requestURI.equals("/do1.do")) {	
			responseURI = new Do1().execute(req, resp);
			
		}else if(requestURI.equals("/do2.do")) {
			responseURI = new Do2().execute(req, resp);
			
		}else if(requestURI.equals("/do3.do")) {
			responseURI = new Do3().execute(req, resp);			
		}
		
		req.getRequestDispatcher(responseURI).forward(req, resp);
	}
	
}



포기하지 말고 JUST DO! ✔️




출처
https://media.giphy.com/media/dwmNhd5H7YAz6/giphy.gif
https://media.giphy.com/media/3o6Mb9EC7mNqXl9x7y/giphy.gif

0개의 댓글