1. web.xml이란?
web.xml이란 웹 어플리케이션의 설정을 위한 배포 서술자(deployment descriptor)입니다. 다음은 web.xml의 역할입니다.
º Deploy할 때 Servlet의 정보를 설정
º 브라우저가 Java Servlet에 접근하기 위해서는 서버에 필요한 정보를 알려주어야 해당하는 Servlet을 호출 가능
- 배포할 Servlet이 무엇인지
- 해당 Servlet이 어떤 URL에 매핑되는지
web.xml 예시
<web-app>
<!-- 1. aliases 설정 -->
<servlet>
<servlet-name>welcome</servlet-name>
<servlet-class>servlets.WelcomeServlet</servlet-class>
</servlet>
<!-- 2. 매핑 -->
<servlet-mapping>
<servlet-name>welcome</servlet-name>
<url-pattern>/welcome</url-pattern>
</servlet-mapping>
</web-app>
aliases 설정
º 서블릿 이름을 실제 서블릿 클래스에 연결
º servlets.WelcomeServlet은 개발자에 의해 작성된 실제 클래스 이름으로 설정
매핑 설정
º URL을 서블릿 이름에 연결
º /welcome은 클라이언트(browser)의 요청 URL에서 앱(프로젝트) 이름 뒤에 오는 부분으로, 슬래시(‘/’)로 시작
2. Spring MVC 에서의 web.xml 설정
2.1 DispatcherServlet
º Spring Container 생성. Spring Container는 Controller의 life cycle 관리
º 클라이언트의 요청을 처음으로 받는 클래스(Spring에서 제공)
º 클라이언트의 요청을 Handler(Controller)에 보냄
º HandlerMapping: 어떤 url을 받을지 결정
<servlet>
<servlet-name>salesServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- contextLoader가 해당 위치의 설정 파일을 읽어, 해당 파일을 dispatcher servlet으로 만든다. -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/salesServlet-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- /sales로 시작하는 url 요청을 받아 salesServlet에서 처리한다. -->
<servlet-mapping>
<servlet-name>salesServlet</servlet-name>
<url-pattern>/sales</url-pattern>
</servlet-mapping>
º <init-param> 부분은 생략가능.
- <servlet-name>에 설정한 이름 + -servlet.xml 형식으로 설정 파일 이름을 만들고, web.xml과 같은 위치(/WEB-INF 하위) 에 있어야 contextLoader가 해당 파일을 찾아서 읽을 수 있습니다.
- 위와 같이 설정하면 init-param으로 dispatcher xml 파일의 이름을 설정하지 않아도 자동으로 로드 됩니다.
(ex) salesServlet-servlet.xml
2.2 ContextLoaderListener
º Controller가 공유하는 Bean들을 포함하는 Spring Container를 생성
- 공유하는 Bean: Dao, DataSource, Service
- 각 Bean에 대한 설정 파일을 따로 생성
-> service-context.xml: Service 관련
-> dao-context.xml: Dao 관련
-> applicationContext.xml: DataSource 관련, properties 등록, SessionFactory, TransactionManager 등
-> security-context.xml: Security 관련, BCryptPasswordEncoder 등
º DispatcherServlet에 의해 생성된 Bean은 ContextLoaderListener에 의해 생성된 Bean을 참조할 수 있습니다.
<!-- 이렇게 등록된 설정 파일에 따라 등록된 Bean들은 모두 공유가 가능하다. -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/service-context.xml
/WEB-INF/dao-context.xml
/WEB-INF/applicationContext.xml
/WEB-INF/security-context.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
3. context-param
º Servlet context의 parameter를 선언해주는 부분
º web.xml의 전역 변수 느낌
º <init-param>은 지역변수라고 생각하면 이해하기 쉬움
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/root-context.xml</param-value>
</context-param>
4.listener
ºApplication Listener Bean을 가르키기 위한 부분으로 이때 해당 Bean은 웹 어플리케이션에 등록 되어있어야함
// spring에서 contextConfigLocation을 설정하기 위한 listener bean 지정
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
5. encodingFilter
º 인코딩을 UTF-8로 설정하여 필터링
<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>
<!-- /의 형식으로 시작하는 url에 대하여 UTF-8로 인코딩 -->
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
References
º https://gmlwjd9405.github.io/2018/10/29/web-application-structure.html
'Spring Framework' 카테고리의 다른 글
[Spring Framework] 부트 스트랩 적용하기 (0) | 2019.10.22 |
---|---|
[Spring Framework] home.jsp 구동과정 (0) | 2019.10.12 |
[Spring Framework] 이클립스 commit 후 한글 깨짐 현상 해결 (1) | 2019.09.03 |
[Spring Framework] JSON 데이터 깨짐 현상 (0) | 2019.08.31 |
[Spring Framework] Jackson 라이브러리 (0) | 2019.08.13 |