๐Ÿ’ป JAVA_

[FrontController] JSP์—์„œ ์„œ๋ธ”๋ฆฟ์œผ๋กœ์˜ ์ „ํ™˜: FrontController ํŒจํ„ด ์ ์šฉํ•˜๊ธฐ

Joyfullyever 2025. 3. 20. 22:03

โœ… Servlet์œผ๋กœ FrontController ํŒจํ„ด ๊ตฌํ˜„ํ•˜๊ธฐ

 

1๏ธโƒฃ Servlet์œผ๋กœ์˜ ์ „ํ™˜

• ๊ธฐ์กด์—๋Š” [ controller.jsp?action=MAINPAGE ]์™€ ๊ฐ™์ด ํ•ญ์ƒ ์•ก์…˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ›์•„์™€์•ผ ํ–ˆ์Œ

→ ์„œ๋ธ”๋ฆฟ์œผ๋กœ ๋ฐ”๊พธ๋Š” ์ž‘์—…์„ ํ†ตํ•ด ๋” ๊น”๋”ํ•œ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ

• JSP๋Š” ์›๋ž˜ View ์—ญํ• ๋งŒ ํ•จ. Java์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ถ€๋ถ„์€ ์ œํ•œ์ 

• JSTL, EL, ๊ทธ๋ฆฌ๊ณ  Custom Tag๋ฅผ ํ™œ์šฉํ•ด View ๋กœ์ง์„ ์ฒ˜๋ฆฌ

→ Controller๋Š” Servlet์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์ ํ•ฉ

→ "VIEW ๋Š” VIEW ๋‹ต๊ฒŒ!"

 

2๏ธโƒฃ FrontController ํŒจํ„ด

• FrontController ํŒจํ„ด์€ ๋ชจ๋“  ์š”์ฒญ์„ ํ•˜๋‚˜์˜ ์„œ๋ธ”๋ฆฟ์ด ์ฒ˜๋ฆฌ, ์„œ๋ธ”๋ฆฟ์ด ์š”์ฒญ์„ ๋ถ„๊ธฐํ•˜์—ฌ ์•Œ๋งž์€ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋„๋ก ์œ ๋„

FrontController.java๋Š” ์ผ์ข…์˜ ์•ˆ๋‚ด ๋ฐ์Šคํฌ ์—ญํ• 

 

3๏ธโƒฃ FrontController ๊ตฌํ˜„ ์˜ˆ์‹œ

• @WebServlet("*.do") ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  .do ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์„ค์ •

• doAction() ๋ฉ”์„œ๋“œ๋Š” ์š”์ฒญ URI๋ฅผ ๋ถ„์„ํ•˜๊ณ , ์•Œ๋งž๋Š” ์ฒ˜๋ฆฌ ๋กœ์ง์„ ๋ถ„๊ธฐ

• ActionFactory๋Š” ์š”์ฒญ์— ๋งž๋Š” ์•ก์…˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ํ•ด๋‹น ์ž‘์—…์„ ์ฒ˜๋ฆฌ

 

FrontController.java ์ฝ”๋“œ
@WebServlet("*.do")
public class FrontControllerDo extends HttpServlet {
	private static final long serialVersionUID = 1L;
    private ActionFactory factory;   
	
    public FrontControllerDo() {
        super();
        factory = new ActionFactory();
    }
    
    private void doAction(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
    	String command = request.getRequestURI();
    	System.out.println("CTRL ๋กœ๊ทธ : action ["+command+"]");
    	command = command.replace("/honeyComboFactory/", "");
    	System.out.println("COMMAND ["+command+"]");
    	
    	Action action = factory.getAction(command);
    	ActionForward forward = action.execute(request);
    	
    	if(forward == null) {
    		response.sendRedirect("error/errorPage.jsp");
    	}

    	if(forward.isRedirect()){
    		response.sendRedirect(forward.getPath());
    	}
    	else{
    		RequestDispatcher dispatcher = request.getRequestDispatcher(forward.getPath());
    		dispatcher.forward(request, response);
    	}
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("๋กœ๊ทธ [GET] ์š”์ฒญ ํ˜ธ์ถœ๋จ");
		doAction(request,response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("๋กœ๊ทธ [POST] ์š”์ฒญ ํ˜ธ์ถœ๋จ");
		doAction(request,response);
	}
}

 

4๏ธโƒฃ ์•ก์…˜ ํด๋ž˜์Šค ๋ฐ ์•ก์…˜ ํŒฉํ† ๋ฆฌ

• ์•ก์…˜ ํด๋ž˜์Šค๋Š” execute() ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์š”์ฒญ์— ๋งž๋Š” ์ฒ˜๋ฆฌ๋ฅผ ๋‹ด๋‹น

• ActionFactory๋Š” URI๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ด๋‹น ์•ก์…˜์„ ์ฐพ์•„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์—ญํ• 

 

5๏ธโƒฃ ํŽ˜์ด์ง€ ํฌ์›Œ๋”ฉ

• ์„œ๋ธ”๋ฆฟ์—์„œ ๋ทฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ๋Š” RequestDispatcher๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ JSP๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ํฌ์›Œ๋”ฉ

• dispatcher.forward(request,response)๋ฅผ ํ†ตํ•ด JSP ํŽ˜์ด์ง€๋กœ ์š”์ฒญ์„ ์ „๋‹ฌ, ํ•ด๋‹น JSP ํŽ˜์ด์ง€์—์„œ ๋ทฐ๋ฅผ ๋ Œ๋”๋ง

 

6๏ธโƒฃ URL ํŒจํ„ด๊ณผ ํŒŒ๋ผ๋ฏธํ„ฐ ์ฒ˜๋ฆฌ

detailPage.do?bum=<%data.getBnum()%>

์œ„์™€ ๊ฐ™์ด URL์— ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํฌํ•จํ•˜์—ฌ ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Œ

• doGet์ด๋‚˜ doPost์—์„œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ›์•„์„œ, ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•œ ํ›„ ๋ทฐ์— ์ „๋‹ฌ

 

โœ”๏ธ JSP์—์„œ ์„œ๋ธ”๋ฆฟ์œผ๋กœ์˜ ์ „ํ™˜์€ ๊ตฌ์กฐ์ ์œผ๋กœ ํ›จ์”ฌ ๊น”๋”ํ•˜๊ณ  ํ™•์žฅ์„ฑ ์ž‡๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ์„ฑ ๊ฐ€๋Šฅ

โœ”๏ธ FrontController ํŒจํ„ด์„ ์ ์šฉํ•˜๋ฉด ์š”์ฒญ์„ ์ค‘์•™์—์„œ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜์—ฌ, ์œ ์ง€๋ณด์ˆ˜์™€ ํ™•์žฅ์ด ์šฉ์ด

โœ”๏ธ JSP๋Š” ์˜ค์ง ๋ทฐ๋ฅผ ๋‹ด๋‹นํ•˜๊ฒŒ ํ•˜์—ฌ, ์ฝ”๋“œ์˜ ์—ญํ•  ๋ถ„๋‹ด์„ ๋ช…ํ™•ํžˆ ํ•  ์ˆ˜ ์žˆ์Œ

โœ”๏ธ ๋ทฐ ๋กœ์ง๊ณผ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ๋ถ„๋ฆฌ → ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์ด ๋†’์•„์ง€๊ณ , ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฌ์›Œ์ง