Spring/Spring MVC

[์Šคํ”„๋ง MVC] - 7. ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ

hello_u 2023. 2. 14. 14:43

 

 

ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ ํŒจํ„ด 

 

 

ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ ๋„์ž… ์ „

 

 

 

ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ ๋„์ž… ํ›„ 

 

FrontController ํŒจํ„ด ํŠน์ง•


ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ ์„œ๋ธ”๋ฆฟ ํ•˜๋‚˜๋กœ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›์Œ


ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์š”์ฒญ์— ๋งž๋Š” ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ฐพ์•„์„œ ํ˜ธ์ถœ


์ž…๊ตฌ๋ฅผ ํ•˜๋‚˜๋กœ
! ๊ณตํ†ต ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ


ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์„œ๋ธ”๋ฆฟ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋จ

 

 

 

V1 ๊ตฌ์กฐ

 

urlPatterns = "/front-controller/v1/*"

 

/front-controller/v1 ๋ฅผ ํฌํ•จํ•œ ํ•˜์œ„ ๋ชจ๋“  ์š”์ฒญ์€ ์ด ์„œ๋ธ”๋ฆฟ์—์„œ ๋ฐ›์•„๋“ค์ธ๋‹ค.

 

 

private Map<String, ControllerV1> controllerMap = new HashMap<>();

public FrontControllerServletV1() {
    controllerMap.put("/front-controller/v1/members/new-form",new MemberFormControllerV1());
    controllerMap.put("/front-controller/v1/members/save",new MemberSaveControllerV1());
    controllerMap.put("/front-controller/v1/members",new MemberListControllerV1());
}

 

key: ๋งคํ•‘ URL / value: ํ˜ธ์ถœ๋  ์ปจํŠธ๋กค๋Ÿฌ

 

ControllerV1 controller = controllerMap.get(requestURI);
if(controller==null){
    response.setStatus(HttpServletResponse.SC_NOT_FOUND);
    return;
}

  

๋จผ์ € requestURI ๋ฅผ ์กฐํšŒํ•ด์„œ ์‹ค์ œ ํ˜ธ์ถœํ•  ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ controllerMap ์—์„œ ์ฐพ๋Š”๋‹ค.

 

๋งŒ์•ฝ ์—†๋‹ค๋ฉด 404(SC_NOT_FOUND) ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

 

controller.process(request,response);


์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ฐพ๊ณ  controller.process(request, response); ์„ ํ˜ธ์ถœํ•ด์„œ ํ•ด๋‹น ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

 

๋‹คํ˜•์„ฑ์— ์˜ํ•ด์„œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ๋œ ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค 

 

 

 

 

View ๋ถ„๋ฆฌ - v2

  

 

public interface ControllerV2 {
    MyView process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException;
}

 

์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋ทฐ๋ฅผ ๋ฐ˜ํ™˜

 

 

 

public class MyView {
    private String viewPath;

    public MyView(String viewPath) {
        this.viewPath = viewPath;
    }

    public void render(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath);
        dispatcher.forward(request,response);
    }

 

 

 

 

 

public class MemberFormControllerV2 implements ControllerV2 {
    @Override
    public MyView process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        return new MyView("/WEB-INF/views/new-form.jsp");
    }
}

 

๋‹จ์ˆœํžˆ MyView ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ฑฐ๊ธฐ์— ๋ทฐ ์ด๋ฆ„๋งŒ ๋„ฃ๊ณ  ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋œ๋‹ค.

 

 

 

MyView myView = controller.process(request, response);
myView.render(request,response);

 

์ด์ œ ๊ฐ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋ณต์žกํ•œ dispatcher.forward() ๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•ด์„œ ํ˜ธ์ถœํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

 

ControllerV2์˜ ๋ฐ˜ํ™˜ ํƒ€์ž…์ด MyView ์ด๋ฏ€๋กœ ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์ปจํŠธ๋กค๋Ÿฌ์˜ ํ˜ธ์ถœ ๊ฒฐ๊ณผ๋กœ MyView ๋ฅผ ๋ฐ˜ํ™˜ ๋ฐ›๋Š”๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  view.render() ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด forward ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•ด์„œ JSP๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

 

 

 

 

 

 

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard