스프링 프레임워크(17) Dispatcher Servlet

넙데데맨·2022년 5월 30일
0

MVC model2 변화

Dispatcher 집중화 이전 모델


모든 컨트롤러가 Forwarding 기능을 하는 Dispatcher를 구현했어야 했다. => 비효율적

Dispatcher 집중화 이후 모델

컨트롤러를 따로 빼주고 하나의 Dispatcher만 사용한다.
Dispatcher는 요청을 받아 어떤 Controller를 호출할 지 정하고 해당 Controller에 전달하고 반환 값을 받아 View에 전달한다.
매핑 정보를 따로 설정해 주어야한다.
변수, 객체 등 순수 자바 파일만으로 처리할 수 있게 전달해주는 역할 역시 수행
서블릿 기능을 Dispatcher만 수행하게 구현해야한다.

왜 이렇게?

결합력을 낮춰서 실행환경이 달라져도 기능을 유지하기 위함.

Dispatcher Servlet

라이브러리 설정

pom.xml에 해당 dependency 추가
(Maven Repositories > Global Repositories > central > update index 후에는 Dependencies에서 추가해도 됨)

dispatcher-servlet.xml

Dispatcher와 Controller를 Mapping 해주는 정보를 담고 있는 xml 파일

web.xml

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

매핑을 위해 web.xml 파일에 해당 코드 추가
url-pattern이 모든 URL을 받는 /이기 때문에 실행도니다.
web.xml

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

변경 시 오류가 발생한다.

url-mapping 정리

url Pattern 별 의미

  1. /로 시작 /로 끝나는 패턴 path로 인식
    • /list/a /list/b 등 모든 URL 패턴 매칭
  2. *.로 시작하는 확장자 매칭
    • *.do .ajax 등의 패턴 매칭
  3. /만 정의한 경우 디폴트 서블릿
    • servlet mapping에 걸리지 않은 나머지 매핑요소
  4. 그 외에는 정확히 일치하는 매칭

문제

/*으로 매핑했을 경우 위의 패턴에 존재하지 않지만 요청 받는 모든 URL을 처리한다는 의미
jsp 호출 역시 DispatcherServlet이 처리하려고 하기 때문에 jsp에 해당하는 url을 찾을 수 없어 오류가 발생하게 된다.

dispatcher-servlet.xml 작성

  1. https://docs.spring.io/spring-framework/docs/
  2. 현재 사용 버전 클릭 후 reference/ - html/ - core
  3. IoC Container - Configuration Metadata의 예시 복사 붙혀넣기
<?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.kim.web.controller.IndexController">  
        <!-- collaborators and configuration for this bean go here -->
    </bean>

</beans>
profile
차근차근

0개의 댓글