DispatcherServlet과 URL매핑

MIN·2024년 8월 7일

Spring

목록 보기
1/7
post-thumbnail

스프링이 있기 이전에 개발자는 클라이언트가 웹 애플리케이션에 보내는 URL 요청을 처리하기 위해 직접 Servlet 클래스를 작성해야 했다.

서블릿을 설정하고 web.xml에 매핑하여 사용했는데,
스프링이 등장하면서 이 모든 과정이 단순화 되었다.


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

다시말해 이전에는 요청된 url과 매핑된 각각의 Servlet클래스를 찾아갔다면 스프링MVC는 모든 요청을 DispatcherServlet에서 받는다.
그리고 DispatcherServlet은 이 요청을 분석하여 그 요청에 맞는 컨트롤러를 불러온다.
( 이전에는 servlet과 컨트롤러가 분리되지 않았지만(모델1) 스프링MVC는 분리되었다! (모델2) )

그렇다면 이 DispatcherServlet은 어떻게 구현할까?

우리가 따로 구현할 필요없이 Dispatcher Servlet 라이브러리를 설치하기만 하면 된다. 😋


🍊 spring web mvc 라이브러리 설치

https://mvnrepository.com/
Maven Repository 사이트에서 Spring을 검색하면
아래쪽에 Spring Web MVC가 있다.
여기서 최신 버전의 코드를 복사하여 pom.xml의 <dependencies> 태그 안에 넣어주면 된다!

잘 설치되었는지 확인하고 싶다면 좌측의 프로젝트에서
JavaResources > Libraries > Maven Dependencies
에서 확인 가능하다.

참고로 내가 설치하지 않은 라이브러리가 보이는 이유는
내가 설치한 라이브러리가 필요로하는 라이브러리들을 메이븐이 자동으로 설치해주기 때문이다.


🍊 web.xml에 매핑하기

DispatcherServlet 클래스가 모든 요청을 받아서 처리를 해야하기 때문에 이 내용을 web.xml에 적어야 한다.

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

<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>
	

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파일을 받아서 실습했는데 지금 확인해보니 위에 적었던 내용들이 들어있어서 굉장히 신기했다. 원래는 스프링 프레임워크 라이브러리만 설치하면 자동으로 기입되는 코드인 줄 알았었다..ㅎ

profile
기초부터 시작하는 감쟈 ※ 소개글 확인해주세요!! ※

0개의 댓글