반응형

스프링 프레임워크(Spring Framework)에서 web.xml은 WAS(Web Application Server)가 최초로 구동될 때, web.xml 파일을 읽어서 메모리에 올리고 web.xml에는 웹에서 사용하는 다양한 설정들을 하는 곳이라고 할 수 있습니다.

 

1. web.xml이란?

2. web.xml 구조

3. web.xml 설정


1. web.xml 이란?

위에서 간략하게 적었는데, 스프링 프레임워크(Spring Framework)에서 web.xml은 WAS(Web Application Server)가 최초로 구동될 때, web.xml 파일을 읽어서 메모리에 올리고 web.xml에는 웹에서 사용하는 다양한 설정들을 하는 곳이라고 할 수 있습니다. 

 

즉, web.xml은 Web Application 설정을 위한 Deployment descriptor(DD, 배포설명자)라고 합니다.

그래서, web.xml에서는 Client에게 요청을 받아올 때, web.xml에 정의되어 있는 URL이 Client 요청 URL과 매핑이 되는 경우 DispatcherServlet이 이 요청을 가로채가서 서비스를 제공하도록 합니다.

 

2. web.xml 구조

일단, web.xml은 /WebContent/WEB-INF/web.xml에 위치하고 있습니다.

 

만약, web.xml이 /WEB-INF/web.xml에 없으면 생성을 할 수 있습니다.

[프로젝트 오른쪽 클릭] - [Java EE Tools] - [Generate Deployment Descriptor Stub] 클릭.

web.xml은 Deployment descriptor(DD, 배포설명자)로 불리기 때문에, 저 버튼을 누르면 됩니다.

 

3. web.xml 설정

web.xml의 설정은 다양한 태그들이 있습니다.

 

1) <display-name>

display-name은 web.xml(Deployment descriptor(DD, 배포설명자))의 title을 의미합니다. HTML에서의 <title> 태그와 기능이 같다고 보면 됩니다.

<display-name>web</display-name>

 

2) <context-param>

context-param은 같은 Web Application에 있는 Servlet들이 같이 공유해서 사용할 수 있는 전역변수다. 그래서, 아래의 코드를 보면 param-name과 param-value가 있다.

  • param-name : context-param의 이름(contextConfigLocation)
  • param-value : context-value의 값(/WEB-INF/conf/spring/context-*.xml)
<context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>
	        /WEB-INF/conf/spring/context-*.xml
	</param-value>
</context-param>

 

3) <listener>

listener는 어떤 이벤트가 발생했을 때, 이 이벤트에서 listener-class에 있는 객체가 호출되면 그 호출을 처리하는 객체를 말합니다. 그래서, 이 listener에는 따로 <listener-class>를 정의하여 사용합니다.

 

i) ContextLoaderListener

<listener>
	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

 

ii) log4j

log4j를 사용하려면 다음과 같이 설정을 고려해야 합니다.

- pom.xml에 log4j 디펜던시 추가

- log4j.xml 추가

- web.xml에 listener-class 추가

<listener>
	<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>

 

4) <servlet>

servlet은 Client의 Request에 동적으로 작동하는 Web Application Component다. 그래서, 이 servlet은 어디서 많이 들어봤을 용어다. 스프링 프레임워크(Spring Framework)에서 Client의 요청이 들어오면 Client의 Request URL에 맞게 DispatcherServlet이 그 요청을 가로채간다고 들어본 적이 있을 것이다. 즉, 이 <servlet>에서 DispatcherServlet을 등록한다.

 

i) <servlet-name>

servlet-name은 servlet-class의 alias라고 볼 수 있다. servlet-name은 servlet-class와 연결이 된다. 여기서 주의해야 할 점은 <servlet-name>에서 설정한 alias는 servlet-mapping을 할 때, servlet-mapping의 servlet-name과 같아야 합니다.

 

ii) <servlet-class>

servlet-class는 개인이 아무렇게 정의하는 것이 아니라 패키지 경로를 정확하게 입력해야 합니다. 따라서, servlet-class는 servlet-name에 매칭이 되고, 이 servlet-name은 servlet-mapping을 할 때 사용이 됩니다.

 

iii) <init-param>

init-param은 위에서 사용했던 context-param과 같은 의미인데, 범위가 다르다. context-param은 같은 Web Application 안에 있는 Servlet끼리 사용할 수 있지만, init-param은 Servlet 내에서 지역변수처럼 사용합니다.

 

iv) <load-on-startup>

load-on-startup은 Servlet Container가 시작을 하자마자 Servlet을 생성하고, 초기화를 하고 싶을 때 사용하는 태그입니다. 이 load-on-startup 같은 경우에는 나중에 따로 포스팅을 하도록 하겠습니다. 이 load-on-startup은 0 이상의 값이 들어가면 자동으로 인스턴스가 생성되는데, 0에 가장 가까운 순서대로 실행이 됩니다. 또한, load-on-startup의 숫자가 같은 경우에는 web.xml에서 가장 먼저 선언된 순으로 실행이 됩니다.

<servlet>
	<servlet-name>common</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	<init-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			/WEB-INF/conf/mvc/servlet-*.xml
	  	</param-value>
	</init-param>
	<load-on-startup>1</load-on-startup>
</servlet>

 

5) servlet-mapping

servlet-mapping은 위의 servlet에서 선언한 servlet-class의 alias인 servlet-name과 맞춰서 servlet-name을 정의해야 합니다. 그래서, 이 servlet-mapping은 1개의 url-pattern에 1개의 servlet-name을 정의할 수 있는데, 이 url-pattern에 따라 어떤 servlet을 mapping할건지 여기서 설정을 할 수 있습니다.

<servlet-mapping>
	<servlet-name>test1</servlet-name>
	<url-pattern>*.data</url-pattern>
</servlet-mapping>

<servlet-mapping>
	<servlet-name>test2</servlet-name>
	<url-pattern>*.page</url-pattern>
</servlet-mapping>
	
<servlet-mapping>
	<servlet-name>test3</servlet-name>
	<url-pattern>*.rest</url-pattern>
</servlet-mapping>

 

6) <filter>

filter는 Client가 서버로 Request를 할 때, Servlet에서 URL-pattern에 매핑되는 Request를 가져가기 전이나 가져간 후에 필터링을 해주는 역할을 합니다. 그래서, 이 filter는 web.xml에서 설정을 하면 간편하게 사용할 수 있습니다. filter의 사용방법은 servlet과 동일하다고 볼 수 있습니다.

 

아래의 코드를 보면, servlet을 설정하는 방법과 동일한 것을 볼 수 있습니다. servlet 대신에 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>
</filter>

 

i) filter-mapping

filter-mapping도 마찬가지로, servlet-mapping과 사용법이 똑같습니다.

<filter-mapping>
	<filter-name>xssEscapeServletFilter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

 

7) <session-config>

session-config는 세션을 유지할 수 있도록 시간을 설정할 수 있습니다.

<session-config>
	<session-timeout>60</session-timeout>
</session-config>

 

8) <cookie-config>

cookie-config는 Web browser와 Web Server가 HTTPS 형태로 통신하는 경우에만 Web Browser가 Web Server에게 쿠키를 전송하는 옵션을 설정할 수 있습니다.

<session-config>
	<cookie-config>
		<secure>true</secure>
		<http-only>false</http-only>
	</cookie-config>
</session-config>

 

9) <welcome-file-list>

welcome-file-list는 welcome-file을 모아놓은 리스트이고, welcome-file은 서버를 구동할 때, 루트 경로로 접속을 하게 되면 가장 먼저 화면을 불러오는 것을 설정할 수 있다. 즉, localhost:8080으로 접속을 하면, index.jsp를 불러오게 된다. 거기에, index.jsp가 없으면 index.htm을 불러온다. 1가지 주의할 점은 RequestMapping에서 "/"로 설정한 것이 있으면, welcome-file-list는 먹히지 않는다.

<welcome-file-list>
	<welcome-file>index.jsp</welcome-file>
	<welcome-file>index.htm</welcome-file>
</welcome-file-list>

 

10) <resource-ref>

resource-ref는 jdbc 및 JNDI를 설정하는 곳이다.

<resource-ref>
	<description>JNDI_YG</description>
	<res-ref-name>jdbc/yg</res-ref-name>
	<res-type>javax.sql.DataSource</res-type>
	<res-auth>Container</res-auth>
</resource-ref>

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기