차근차근/Spring

web.xml

예쁜꽃이피었으면 2022. 2. 3. 15:57
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

˙

https://gmlwjd9405.github.io/2018/10/29/web-application-structure.html

˙ 각 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

 

 

 

 

 

 

반응형