[Spring] DispatcherServlet

2024. 10. 12. 16:31Spring

Spring MVC에서는 DispatcherServlet을 도입하여 모든 과정을 중앙에서 처리한다.

이전에는 요청된 URL과 매핑된 각각의 Servlet class를 찾아갔다면, Spring MVC는

모든 요청을 DispatcherServlet에서 받는다는 말이다.

그리고 DispatcherServlet은 이 요청을 분석하여 그 요청에 맞는 컨트롤러를 불러온다.

[이전(모델1)에는 servlet과 controller가 분리되지 않았지만, Spring MVC(모델2)는 분리되었다.)

 

그럼 이 DispatcherServlet은 어떻게 구현해야 되는지 알아보자.


사실 직접적으로 구현할 필요는 없고, DispatcherServlet 라이브러리를 설치해주기만 하면 된다.

Spring Web MVC 라이브러리

https://mvnrepository.com/

우리가 의존성을 추가 해줄때 사용하는 Maven Repository 사이트에서 Spring 이라고 서치를 하면 

Spring Web MVC가 보일 것이다.

최선 버전의 코드를 복사하여 pom.xml에 의존성을 추가해주면 된다.

 

잘 설치가 되었는지 확인이 하고 싶다면 추가한 프로젝트에서 

JavaResources > Libraries > Maven Dependencies 에서 확인을 해주면 된다.

 

내가 설치하지도 않은 라이브러리가 있는 이유는 내가 설치한 라이브러리가 필요로 하는

라이브러리들을 Maven이 자동으로 설치를 해주기 때문에 있는 것이다.

 

web.xml에 매핑하기

DispatcherServlet 클래스가 모든 요청을 받아서 처리를 해야하기 때문에

이 내용을 web.xml에 적어주어야 한다.

<servlet>
	  	<servlet-name>dispatcher</servlet-name>
	  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/*</url-pattern>
</servlet-mapping>

 

모든 URL요청(/)이 들어오면 DispatcherServlet.class로 보내 처리하도록 한다.

servlet-name은 아무거나 지정해도 상관이 없다.

 

servlet-class의 이름을 작성하기 힘들거나 실수할 것 같으면

라이브러리에서 DispatcherServlet.class를 찾아 우클릭 후

Copy Qualified Name을 하면 패키지와 클래스 이름이 복사된다.
붙여넣기 할때 .class까지 같이 붙여넣어지므로 꼭 이때는 .class를 지워준다.

 

-servlet.xml 파일 만들기

여기까지만 설정하고 jsp를 만들어 실행하면 오류가 발생한다.
오류의 내용은 다음과 같다.
/WEB-INF/dispatcher(내가 매핑할때 썼던 이름)-servlet.xml 이 없기 때문이다.

 

DispatcherServlet과 컨트롤러가 분리되면서 DispatcherServlet은 모든 요청을 받게된다.

하지만 각 요청에 맞는 매핑을 찾아서 컨트롤러를 호출해야 하는데,

그 매핑정보가 web.xml이 아닌 (내가 지정한 이름)-servlet.xml 파일에 담기게 되는 것이다.

현재는 이 파일이 없는 상태이므로 만들어 준다.         

 

위치 : WEB-INF 폴더 안에 xml 파일 생성

 

xml 파일을 생성할 때 이름은 -servlet.xml을 꼭 뒤에 붙여주기만 한다면 아무렇게나 지어도 된다.

 

안에 내용을 채우기 위해서 먼저
https://docs.spring.io/spring-framework/docs
사이트에 들어가서 내가 spring-webmvc 라이브러리를 설치한 버전과 맞는 곳으로 들어간다.

나는 5.2.9 버전이기 때문에 spring-framework/docs/5.2.x으로 들어갔다.

 

여기서 맨 밑의 spring-framework-reference로 들어간다.

core > 1.The IoC Contatiner > 1.2.1 부분의 beans 코드

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        				https://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="/index" class="com.newlecture.web.controller.IndexController">  
    	<!-- /index URL요청이 오면 IndexController를 객체화해서 호출한다 -->
        <!-- collaborators and configuration for this bean go here -->
    </bean>

</beans>

이때까지 이미 만들어져 있는 web.xml을 받아와서 실습을 진행했었는데,

이걸 배우고 보니 자동으로 기입되어 있는 코드가 아니란걸 알게 되어 좀 신기했다.

 

'Spring' 카테고리의 다른 글

[Spring] Thymeleaf  (0) 2024.11.04
[Spring] Spring Boot 시작하기  (1) 2024.10.23
[Spring] QueryString  (0) 2024.10.11
[Spring] ViewResolver  (0) 2024.10.11
[Spring] 인증 메일 보내기  (1) 2024.10.11