서블릿 또는 스프링으로 프로젝트를 개발할 때 가장 중요한 포인트 중 하나는 URL의 분기 처리를 하는 것이다.
http://localhost:8080/ , http://localhost:8080/board/boardlist 등 여러가지 경로를 클라이언트에서 요청할 수 있다.
DispatcherServlet은 모든 클라이언트의 요청을 가장 앞단에서 받아 처리한다.
HandlerMapping, Controller, ViewResolver 최종적으로 JSP파일을 클라이언트에게 전달하는 과정까지 모든 일을 처리한다고 할 수 있다.
그 과정을 차례대로 살펴보자
1. HandlerMapping
handlermapping은 URL이 무사히 서블릿으로 전달 됐을 때 해당 URL을 처리할 수 있는 Controller가 서블릿 내에 존재 하는지 판단하는 과정이다.
만약 존재한다면 해당 Controller로 URL을 넘기는 작업을 한다.
그렇다면 URL이 서블릿으로 전달됐다는 뜻은 무엇일까?
우선 서블릿 프로젝트를 만들기 위해 프로젝트 하나를 생성한다.



프로젝트가 생성이 되면 패키지를 다음과 같이 설정하여 DispatcherServlet 클래스를 하나 만든다.

DispatcherServlet 클래스가 만들어지면 HttpServlet 클래스를 상속받아 service 메소드를 오버라이드한다.

service메소드는 클라이언트의 모든 요청을 앞선에서 처리하는 메소드다.
request 파라미터는 요청 http헤더의 정보를 물고 오고 response 파라미터는 응답 http를 구성하는 역할을 한다.
이제 DistpatcherServlet 클래스를 실제로 작동시키기 위한 설정이 필요하다.
이 설정은 web.xml파일에서 진행한다.


web.xml파일의 welcome-file-list는 web.xml파일이 생성됐을 때 기본적으로 적혀있는 내용으로
context-root로 진입했을 때 파일리스트를 위에서 아래로 스캔하면서 해당되는 파일이 있으면
그 파일을 클라이언트 측에 전달하는 역할을 한다. 즉 기본 페이지를 내보낸다고 생각하면 된다.
그러나 이 내용을 지워도 index 파일이 존재한다면 클라이언트 측으로 전달된다.
servlert 태그와 servlet-mapping 태그는 매우 중요하다.
제대로 등록해야만 servlet이 요청을 문제없이 처리할 수 있기 때문이다.
servlet태그에는 servlet-name과 servlet-class 태그가 있다.
servlet-class 태그에는 등록할 서블릿 클래스를 기입하면 된다.
package 이름부터 파일명까지 정확하게 입력해야 한다.
servlet-name은 등록한 서블릿의 별칭을 주는 것이다.
servlet-mapping 태그에는 servlet-name과 url-pattern 태그가 있다.
url-pattern 태그에는 서블릿이 처리해야할 url을 기입하면 되고 servlet-name은 해당 URL을 처리할 서블릿의 별칭을 기입한다.
이렇게 servlet매핑을 마치면 서블릿이 문제없이 작동한다.
다음과 같이 프로젝트를 톰캣(WAS)에 등록해준다. 이래야 프로젝트에 대한 서버가 작동한다.

어떤 URL이 서블릿으로 진입했는지 확인하기 위해 request.getRequestURL()메소드를 사용하여 진입한 전체 경로를 출력하게 한다.




서블릿을 mapping할 때 url을 /(context-root)로 지정했기 때문에
모든 URL이 DispatcherServlet으로 진입한다.
따라서 모든 요청을 DispatcherServlet클래스의 service 메소드가 받음을 입증할 수 있다.
handler mapping은 모든 요청을 받아 경로와 mapping되는 컨트롤러가 있는지 확인하는 것이다.
댓글