web.xml
- tomcat 서버의 설정
- 웹 프로젝트의 배포 설명자/배치 기술서(deplyemnt description)이며, 웹 프로젝트가 배포되는 데 이용되는 xml형식의 자바 웹 애플리케이션 환경 설정 부분을 담당합니다.
- 스프링 웹 프로젝트가 실행되면 가장 먼저 web.xml 파일을 읽어들이고 위부터 차례로 태그 해석합니다.
- 네임스페이스 : 코드에서 이름은 같지만 내용이 전혀 다른 요소와 충돌하지 않도록 합니다.
- 스키마 : 코드의 구조와 요소, 속성의 관계를 정의하여 다양한 자료형을 사용할 수 있도록 정의된 문서 구조, 즉 틀을 의미합니다.
- xsi:schemaLocation 속성은 참조하고자 하는 인스턴스 문서의 URL를 지정합니다. 두 개의 속성 값은 공백으로 구분합니다. 첫 번째는 사용할 네임 스페이스(보통 기본 네임 스페이스와 동일)고, 두 번째는 참조할 스키마 파일 이름
< context-param >
- 기본 설정 파일 외에 사용자가 직접 제어하는 xml 파일을 지정합니다.
- context-param요소에 설정된 root-context.xml 파일은 모든 서블릿과 필터에서 사용되는 루트 스프링 컨테이너(애플리케이션 컨텍스트, IoC 컨테이너) 설정
- 웹 애플리케이션에서 Spring 설정 파일의 위치를 지정하는 역할을 합니다.
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/root-context.xml</param-value>
</context-param>
- <param-name>contextConfigLocation</param-name> : contextConfigLocation은 Spring이 초기화할 때 사용할 설정 파일의 위치를 지정하는 매개변수입니다.
- <param-value>/WEB-INF/spring/root-context.xml</param-value> : 실제 설정 파일의 경로 입니다. 이 xml 파일은 Spring의 전역 설정 파일로서, Spring의 bean 구성과 관련된 정보들을 정의합니다.
< listener >
- 웹 애플리케이션에서 Spring의 애플리케이션 컨텍스트를 초기화 하고 관리하는 역할을 하는 리스너를 등록하는 것입니다.
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
< servlet >
- Spring MVC 애플리케이션에서 DispatcherServlet 등록하고, 파일 업로드 및 오류 처리와 관련된 설정을 정의하는 부분입니다.
<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>
<!-- 404 오류를 처리할 수 있도록 설정 -->
<init-param>
<param-name>throwExceptionIfNoHandlerFound</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<!-- web.xml의 설정은 WAS(Tomcat) 자체 설정일 뿐임. -->
<!-- multipart-config : 메모리사이즈, 업로드 파일 저장 위치, 최대 크기 설정 -->
<multipart-config>
<location>c:\\upload</location><!-- 업로드 되는 파일을 저장할 공간 -->
<max-file-size>20971520</max-file-size><!-- 업로드 파일의 최대 크기 1MB * 20 -->
<max-request-size>41943040</max-request-size><!-- 한 번에 올릴 수 있는 최대 크기 40MB -->
<file-size-threshold>20971520</file-size-threshold><!-- 메모리 사용 크기 20MB -->
</multipart-config>
</servlet>
- <servlet-name>appServlet</servlet-name> : 서블릿의 이름을 정의합니다. 여기서는 서블릿 이름은 appServlet으로 설정 하였습니다.
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
- 서블릿 클래스가 무엇인지 지정합니다.
- org.springframework.web.servlet.DispatcherServlet 을 사용하여 Spring MVC의 핵심서블릿인 DispatcherServlet을 등록합니다.
- 이 서블릿은 모든 HTTP 요청을 받아서 처리할 컨트롤러에게 전달하는 역할을 합니다.
- <init-param> : 서블릿 초기화 파라미터를 정의하는 태그입니다.
- contextConfigLocation은 서블릿에서 사용할 Spring 설정 파일의 경로를 지정합니다.
- /WEB-INF/spring/appServlet/servlet-context.xml을 사용하여 이 서블릿의 구성을 정의합니다.
- throwExceptionIfNoHandlerFound 이 설정이 true로 설정되어 있으면, 요청에 대해 핸들러가 없을 때(매핑된 컨트롤러가 없을 때) Spring이 404오류를 예외로 처리하게 만듭니다.
- <load-on-startup>1</load-on-startup> : 애플리케이션 시작 시 서블릿이 로드되는 순서를 정의합니다. 1로 설정하면 서버가 시작될 때 이 서블릿이 초기화됩니다.
- <multipart-config> : 파일 업로드 설정을 정의합니다.
- <location>c:\\upload</location> : 업로드된 파일이 저장될 디렉토리를 지정합니다. 여기서는 c:\upload에 파일을 저장합니다.
- <max-file-size>20971520</max-file-size> : 업로드 가능한 파일의 최대 크기를 설정합니다. 20MB(20*1024*1024 바이트)로 제한되어 있습니다.
- <max-request-size>41943040</max-request-size> : 전체 요청에 대해 허용되는 최대 크기를 설정합니다. 이 값은 40MB로 설정되어, 한 번의 요처으로 업로드되는 파일 크기 총합이 40MB를 넘지 않도록 제한됩니다.
- <file-size-threshold>20971520</file-size-threshold> : 파일이 크기(20MB)를 초과하면 디스크에 저장되고, 이보다 작은 파일은 메모리에 저장됩니다.
<filter>
- 필터를 정의하는 태그입니다.
- 이 필터는 클라이언트 요청을 처리하는 서블릿 전에 동작하며, 요청과 응답의 내용을 조정하는 역할
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
- <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
- 필터 클래스의 경로를 지정합니다.
- org.springframework.web.filter.CharacterEncodingFilter는 Spring에서 제공하는 필터로, 요청과 응답의 문자 인코딩을 설정하는 데 사용됩니다.
- <init-param>
- 필터에 전달할 초기화 파라미터를 정의합니다.
- <param-name>encoding</param-name> : 파라미터는 문자 인코딩 방식을 지정합니다. 여기서 UTF-8로 설정되어, 요청과 응답의 인코딩을 UTF-8로 처리입니다.
- <param-name>forceEncoding</param-name> : true로 설정하면 요청과 응답의 인코딩을 강제로 UTF-8로 적용합니다. 즉, 클라이언트나 다른 설정에서 인코딩을 따로 지정하더라도 UTF-8 인코딩을 강제로 적용하는 것 입니다.
<filter-mapping>
- 필터와 URL 패턴을 매핑하는 태그 입니다.
- 어떤 경로에 대해 필터가 적용될지를 정의합니다.
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
- <filter-name>encodingFilter</filter-name> : 필터 매핑이 적용될 필터의 이름을 지정합니다.
- <url-pattern>/*</url-pattern> : 필터가 적용될 URL 패턴을 지정합니다.
- /* 는 모든 경로를 의미하며, 웹 애플리케이션 내의 모든 요청에 대해 필터가 적용된다는 뜻입니다.
- 즉, 모든 페이지와 리소스에 대해 CharacterEncodingFilter가 동작하게 됩니다.