Spring | 스프링 MVC 하루만에 배우기 6/n - web.xml

파과·2022년 8월 7일
0

web.xml

자바 웹 응용 프로그램은 배포 설명자 파일을 사용해 여러 가지 설정을 한다. 배포 설명자는 Web Application 실행 시 메모리에 로드된다. 배포 설명자 파일의 이름은 web.xml이고, WEB-INF폴더에 있다. WEB-INF는 보안을 위해 브라우저에서 직접적으로 접근할 수 없는 폴더다.

웹 응용 프로그램의 배포 설명자는 앱의 클래스, 리소스 및 구성과 웹 서버가 웹 요청을 처리하기 위한 방법을 설명한다. 웹 서버는 요청이 들어오면 배포 설명자를 통해 요청을 URL을 처리할 코드에 매핑한다.

🔗 스프링 MVC 하루만에 배우기의 web.xml 소스코드를 예시로 보면서 설명하겠다.

web.xml의 설정 태그에는 다음과 같은 것들이 있다.

  1. <context-param>
    같은 웹 애플리케이션에 있는 서블릿들이 공유할 수 있는 전역변수다. STS에서 기본적으로 제공해주는 설정 파일 외에 사용자가 직접 컨트롤하는 xml파일을 지정해주는 역할을 한다. 여기서는 모든 서블릿과 필터가 공유하는 루트 스프링 컨테이너를 정의해주었다.
<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/spring/root-context.xml</param-value>
</context-param>
  1. <listener>
    어떤 이벤트가 발생했을 때, 이 이벤트에서 listener-class에 있는 객체가 호출되면 그 호출을 처리하는 객체를 말한다. 따로 <listener-class>를 정의하여 사용한다.
<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
  1. <servlet>
    요청을 전달할 DispatcherServlet을 설정해준다. 스프링에서 클라이언트에게 요청이 들어오면 요청 URL에 맞게 전달해주는 역할을 한다.
    <servlet-name><servlet-class> 의 별칭이다. 주의할 점은 이 별칭은 servlet-mapping의 servlet-name과 같아야 한다는 것이다.
    <servlet-class>는 패키지 경로를 정확하게 입력해야 한다. servlet-name과 매칭된다.
<!-- Processes application requests -->
<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/spring/appServlet/servlet-context.xml</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>
  1. <servlet-mapping>
    위에서 선언한 <servlet-name>에 맞춰 <servlet-name> 을 정의한다. 바로 여기서 1개의 <url-pattern>에 1개의 <servlet-name>을 설정한다. 여기서 어떤 서블릿을 매핑할 것인지가 결정된다.
<servlet-mapping>
  <servlet-name>appServlet</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>




참고

0개의 댓글