본문 바로가기

IT

17.2 - JSP MVC Model 2 Architecture - FrontController란?

17-1에선 서블릿을 배웠다. 그러면 하나의 서블릿이 여러개의 요청들을 구분하고 받아들일수 있을까?

 

1. 서블릿 만들기.

우클릭 > New > Servlet 클릭.

 

FrontController.java

package kr.co.koo.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;

@WebServlet("*.do") // *.do는 내가 다 받겠다.
public class FrontController extends HttpServlet {
	private static final long serialVersionUID = 1L;
       

    public FrontController() {
        super();
        
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		System.out.println("get요청 발생");
		
		//1. uri와 url차이 도메인뺀 context랑 파일명만있으면 uri다.
		String uri= request.getRequestURI(); 
		System.out.println("요청 uri: " + uri);
		
		//2. 만약 context가 달라질경우 전체다 찾아서 수정을 해줘야하는가?
		String conPath = request.getContextPath();
		System.out.println("context path: " + conPath);
		
		//3. 매번 uri경로를 다적어주는 번거러움을 해결하기 위해서.
		String com= uri.substring(conPath.length());
		System.out.println("uri - conPath : " + com);
		
		//4. MVCModel2Basic/join.do적을필요없이 /join.do만 적으면된다.
		if(com.equals("/join.do")) {
			System.out.println("회원가입 요청이 들어옴!");
		} else if(com.equals("/login.do")) {
			System.out.println("로그인 요청이 들어옴!");
		} else if(com.equals("/update.do")) {
			System.out.println("정보수정 요청이 들어옴!");
		} else if(com.equals("/delete.do")) {
			System.out.println("회원탈퇴 요청이 들어옴!");
		}
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	
	}

}

 

controller_test.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="/MVCModel2Basic/join.do">회원가입 요청</a> <br/>
<a href="/MVCModel2Basic/login.do">로그인 요청</a> <br/>
<a href="/MVCModel2Basic/update.do">정보수정 요청</a> <br/>
<a href="/MVCModel2Basic/delete.do">회원탈퇴 요청</a> <br/>


</body>
</html>

 

* URL_Pattern

 

1.디렉터리 패턴: 디렉토리 형태로 서버의 해당 컴포넌트를 찾아서 실행하는 구조이다.

ex) http://localhost:8181/cr/Hello --> /hello 서블릿

      http://localhost:8181/cr/World --> /World 서블릿

 

2. 확장자 패턴: 확장자 형태로 서버의 해당 컴포넌트를 찾아서 실행하는 구조이다.

ex) http://localhost:8181/cr/Hello.do --> /* .do 서블릿

      http://localhost:8181/cr/World.do --> /* .do  서블릿

 

* 확장자 패턴을 사용하면 서블릿이클라이언트측에서 오는 요청을  단입입구로 받아낼 수 있다. 

 

controller_test.jsp실행시화면이다. 회원가입요청 클릭시을하면