web.xml
- web.xml은 DD(Deployment Descriptor:배포 설명자)라고 불리며, Web Application의 설정파일이다.
DD는 Web Application실행 시 메모리에 로드된다.
- web.xml이란 웹 어플리케이션을 실행시킬 때 함께 올라가야할 설정(설명)들을 정의해 놓은 것이다.
- SUM에서 정해놓은 규칙에 맞게 작성해야 하며 모든 WAS에 대하여 작성방법이 동일하다.
springMVC에서 web.xml구체적인 설정내용
1. DispatchcerServlet : 클라이언트의 요청 처리
2. ContextLoaderListener : 웹 어플리케이션 컨텍스트 단위의 설정을 로드
3. encodingFilter : 꼭 거쳐야 하는 것
1. DispatcherServlet
- Spring Container(Controller의 lifeCycle관리)를 생성한다.
- 클라이언트의 요청을 처음으로 받는 클래스
- 클라이언트의 요청을 Handler(Controller)에 보낸다.
- HadlerMapping : 어떤 url을 받을지 결정
- ViewResolver : logical view name - prefix,suffix -> physical view object
2. ContextLoaderListener
- 모든 서블릿이 공통으로 가져야 할 설정들이 있다. Servlet Context단위가 아닌 Application Context단위의 설정이 필요한데 이를 ContextLoaderListener객체가 처리한다.
- Application Context는 Web Application의 Context이며, 모든 Servlet들이 참조가 가능한 부모 Context이다.
3. Filter
- 클라이언트에서 온 요청을 Dispatcher Servlet이 받기 전 거치는 부분이 Filter 객체이다.
- 만일 스프링 시쿠리티 필터가 적용되어 있다면, 인가 및 인증 처리를 먼저 처리하고, 인코딩 필터가 적용되어 있다면 클라이언트의 요청데이터를 인코딩하는 작업이 선 처리된 후 Dispatcher Servlet에게 필터링 된 데이터가 전달된다.
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- Dispatcher Servlet 생성 -->
<!-- 클라이언트의 요청을 처리하는 Dispatcher Servlet을 myDispatcherServlet이란
이름으로 생성하고, 이 서블릿에 대한 설정파일로 servlet-config.xml을 지정한다.
<!-- Dispatcher Servlet이 처리한 url-pattern을 설정한다.
'/'경로로 들어오는 모든 요청에 대해서 myDispatcherServlet이 처리를 담당한다.-->
<servlet>
<servlet-name>myDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/config/servlet-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>myDispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- web application context -->
<!-- web application context 단위의 설정파일로 application-context.xml을 설정한다.
이 설정은 servlet으로 생성한 myDispatcherServlet에게 공유된다.-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/config/application-context.xml
</param-value>
</context-param>
<!-- Encoding Filter 생성 -->
<!-- Spring에서 지원하는 encoding Filter를 filter에 추가한다.
line-encoding Filter가 처리한 url-pattern을 설정한다. 모든 '/'경로에 대해 인코딩 필터를 적용한다.-->
<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-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
ContextLoadListener 에 각 bean에 대한 설정파일을 따로 두고 싶다면
- Controller가 공유하는 Bean들을 포함하는 Spring Container를 생성한다.
˙ 공유하는 Bean : Dao, DataSource, Service
˙
˙ 각 Bean에 대한 설정파일을 따로 생성한다.
- DispatcherServlet에 의해 생성된 Bean은 ContextLoaderListener에 의해 생성된 Bean을 참조할 수 있다.
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/service-context.xml <!-- Service관련 -->
/WEB-INF/dao-context.xml <!-- DataSource관련,properties등록,SessionFactory,TansactionManager등 -->
/WEB-INF/applicationContext-context.xml <!-- Security관련, BcryptPasswordEncoder등 -->
/WEB-INF/security-context.xml <!-- controller관련.. -->
</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
servlet-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<context:component-scan base-package="controller"/>
</beans>
application-context.xml
<?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 http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
[참조]
https://velog.io/@seculoper235/web.xml-%EC%9E%91%EC%84%B1%EB%B2%95
https://tlatmsrud.tistory.com/35
https://gmlwjd9405.github.io/2018/10/29/web-application-structure.html
'차근차근 > Spring' 카테고리의 다른 글
스프링 빈(bean) 및 서블릿(servlet) 객체 직접 얻기 출처: https://offbyone.tistory.com/144 [쉬고 싶은 개발자] (0) | 2022.04.29 |
---|---|
컨트롤러에서 알럿 | controller message alert (1) (0) | 2022.04.27 |
Spring Security란(1) - 추가예정 (0) | 2022.01.11 |
필터, 인터셉터, AOP (0) | 2022.01.11 |
스프링 어노테이션.. 맨날 .. (0) | 2022.01.11 |