[Spring] web.xml의 DispatcherServlet 설정

Minit88·2023년 3월 23일
0

[Web]

목록 보기
5/9
post-thumbnail

서블릿 환경설정

서블릿은 웹에서 클라이언트로부터 요청받아서 실행되는 자바 프로그램으로서, 주로 서비스 처리를 위한 데이터 준비 작업과 메소드 호출 역할을 한다.

web.xml

서버에서 서블릿 실행에 관환 정보를 설정할 때는 web.xml의 <servlet> 태그로 설정한다.
web.xml 파일은 서버가 시작할 때 웹서버가 사용하는 환경설정 파일이다. 서블릿 또한 웹 애플리케이션 서비스를 실행하기 위해 존재하는 파일이므로 web.xml에 정의한다.

DispatcherServlet

스프링 MVC 에서는 모든 요청이 반드시 DispatcherServlet의 존재를 통해서 실행되게 된다.
모든 요청이 반드시 하나의 객체(DispatcherServlet)를 지나서 처리되기 때문에 모든 공통적인 처리를 프론트 컨트롤러에서 처리할 수 있게 된다.

출처

위 그림처럼 DispatcherServlet은 FrontController 로써 역할을 하여 요청이 처음으로 처리되어 각 세부 컨트롤러(@Controller) 로 처리하게 한다.

DispatcherServlet 실습

DispatcherServlet 으로 사용하기 위한 "servlet-context.xml"을 생성한 후에

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/root-context.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <servlet>
        <servlet-name>appServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/servlet-context.xml</param-value>
        </init-param>

        <init-param>
            <param-name>throwExceptionIfNoHandlerFound</param-name>
            <param-value>true</param-value>
        </init-param>


        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>appServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

web.xml에 위 내용대로 코드를 수정한다.
각 태그들의 내용의 설명을 하면

  • <servlet> :
    • 설정하려는 서블릿을 등록한다.
    • 해당 태그를 사용하면 반드시 하위 태그로 <servlet-name> <servlet-class>가 나와야한다. 그렇지 않으면 web.xml 오류가 발생하고 해당 웹 애플리케이션은 웹 서버에 서비스 준비가 완료되지 않아서 클라이언트에 서비스되지 않는다.
  • <servlet-name> :
    • <servlet> 태그를 사용할 때 반드시 설정해야 하는 태그로서 서블릿의 이름을 지정한다
    • 여기에 지정한 이름은 이후 해당 서블릿을 참조할 때 사용한다.
  • <servlet-class> :
    • 서블릿의 클래스 이름을 지정한다.
    • <servlet-class> 또한 <servlet> 태그 사용 시 반드시 설정해야 하며, 클래스 이름을 패키지명과 함께 대소문자를 구분하여 정확하게 입력해야 한다.
    • 위 예시에서는 DispatcherServlet 클래스를 지정.
  • <init-param> :
    • 서블릿에 변수를 전달할 때 사용한다.
      -<servlet>의 하위 태그로서 필요할 때 선택해서 사용할 수 있다.
    • 서블릿 소스에서 직접 값을 지정해서 사용해도 되지만, 실행환경에 맞게 동적으로 값을 할당하고자 할 때 외부에서 값을 전달할 수 있다.
    • 반드시 <param-anme><param-value> 태그로 구성해야 한다.
  • <param-name> :
    • 변수의 이름을 지정한다.
    • 서블릿 측에서는 <param-name>에 지정한 값을 이용하여 변수의 값을 추출한다. 이때 변수의 이름은 대소문자,철자를 구분하여 <param-name>에서 정확히 일치하는 변수의 이름을 찾아서 값을 추출한다.
  • <param-value>:
    • 매핑되는 변수의 값을 지정하는 태그
  • <load-on-startup> :
    • 위 태그를 사용하면 웹 서비스가 시작될 때 서블릿 객체를 생성할 수 있다.
    • 미리 준비되어 있다가 서비스 처리에 관여하는 서블릿은 클라이언트의 요청과 상관없이 웹 서비스가 시작될 때 객체를 생성하여 대기하고 있어야 한다. 이럴 때 위 태그를 사용한다.
    • 태그의 값으로 숫자를 지정하는데, 이 숫자는 객체가 생성되는 우선순위를 의미한다.
    • 서버가 시작될 때 생성해야 하는 서블릿 객체가 여러 개일 때 <load-on-startup>태그의 값으로 우선순위를 지정한다.
    • 숫자 값이 낮을수록 우선순위가 높다.
  • <servlet-mapping> :
    • DispatcherServlet이 모든 경로의 요청에 대한 처리를 담당하기 때문에 '/'로 지정한다.


프로젝트를 실행하여 DispatcherServlet 클래스 형태인 appServlet이 초기화 되었다는 메시지가 출력되면 정상 작동 중이다.

Reference

web.xml

profile
" To be BE "

0개의 댓글