Spring 공부2013. 4. 16. 13:54

[출처]spring 웹 어플리케이션 기반의 web.xml 설정 정리

프로젝트에서는 web.xml의 listener와 context, filter 를 필히 파악해야 한다

 

 

<?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 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name>springProject</display-name>
<description>incross spring3.1 sample project</description>
<!-- ============================================================= -->
<!-- log4j setting -->
<!-- ============================================================= -->
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/classes/log4j.xml</param-value>
</context-param>
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>incross.spring</param-value>
</context-param>
<!-- ============================================================= -->
<!-- root application context -->
<!-- ============================================================= -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/root-context.xml
</param-value>
</context-param>
<!-- ============================================================= -->
<!-- spring dispatcher servlet -->
<!-- ============================================================= -->
<servlet>
<servlet-name>dispatcher</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>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.kyu</url-pattern>
</servlet-mapping>
<!-- ============================================================= -->
<!-- welcome file list -->
<!-- ============================================================= -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
view rawweb.xmlThis Gist brought to you by GitHub.



spring 기반으로 되어 잇는 웹 어플리케이션의 web.xml에 대한 정리

정리의 목적은 곧 있을 스프링 3.1 교육을 위해 머리로 알고 있는 것들을 기록으로 남겨 좀더 자세하게 정보를 전달하기 위함이다.


일단 web.xml은 서블릿 배포 서술자 (DD) 라고 부른다.

영어로는 Deployment Descriptor


DD의 용도는 WAS 구동 시 /WEB-INF 디렉토리에 존재하는 web.xml 파일을 읽어 들여 웹 어플리케이션 설정을 구성하기 위함이다.


가령 스프링, 스트럿츠 등 다양한 프레임워크를 사용하여 웹 어플리케이션을 구성하거나 로그, 인코딩 설정 등 초기 셋팅을 위한 설정 파일이라고 생각하면 된다.

결국 설정을 위한 설정 파일이라고 정리되는 것인가? ㅋ


<display-name>

DD 파일의 title 정도라고 생각하면 좋겠다.

우리는 project name을 추가하여 사용하고 있다.


<description>

어떤 프로젝트를 위한 배포 서술자인지 상세하게 기록한다.

incross spring3.1 sample project


주석 log4j setting 아래 xml element

listener-class에 등록되어 있는 Log4jConfigListener는 log4j라는 로깅 프레임워크를 초기화 하는 클래스이다.

이 클래스를 초기화 할 때 log4jConfigLocation, webAppRootkey context-param을 넘겨준다.


log4jConfigLocation은 log4j 설정 파일의 위치를 지정하는 param이고, webAppRootKey는 다음과 같은 환경에서는 꼭 값을 지정해 줘야 한다.

tomcat

- context1 (log4j 설정 추가)

- context2 (log4j 설정 추가)


즉, 하나의 tomcat에 context가 두 개 이상 적재되어 있고, 각 context가 log4j 프레임워크를 사용하고 있다면 webAppRootKey param에 값을 꼭 지정해 줘야 한다.

만약 지정하지 않았을 경우 default 값인 webapp.root 중복 에러가 발생한다.


주석 root application context 아래 xml element

본격적으로 스프링 웹 어플리케이션을 위한 설정 부분이다.


ContextLoaderListener 초기화를 통해 스프링의 root context를 얻을 수 있다.

여기서 말하는 context는 contextConfigLocation param을 이용하여 찾은 bean 설정 메타 파일을 로드하여 세부 설정에 맞게 bean 객체를 생성 또는 관리하는 주체를 말한다.

이게 맞나?

토비 스프링3.1 한번 더 정독하면 확실히 개념이 잡힐 것 같으니 나중에 책 읽고 부족한 내용이다 싶으면 보충하도록 하자.


주석 spring dispatcher servlet 아래 xml element

DispatcherServlet 클래스를 초기화하여 spring의 servlet context를 생성한다.

초기화 param으로 bean 메타 설정 파일의 위치를 넘겨 준다.


load-on-startup 은 servlet 구동 순서를 의미하며 빠른 순서부터 로딩한다.

아래와 같이 3개의 서블릿이 DD에 등록되어 있고 load-on-startup이 각각 지정되어 있다면 순번이 빠른 것부터 초기화를 진행한다는 의미다.

initServlet1 (load-on-startup = 1)

initServlet2 (load-on-startup = 2)

dispatherServlet (load-on-startup = 3)


servlet-mapping은 url pattern으로 지정된 값으로 웹 요청이 들어왔을 때 servlet-name에 지정되어 있는 이름의 servlet을 호출하겠다는 의미이다.

spring에서는 DispatcherServlet이 모든 요청을 받고, 요청의 URL과 맵핑하는 Controller에 위임한다.

가령 Controller class에 @RequestMapping("/list") 애노테이션으로 지정되어 잇는 메소드가 존재하면 http://localhost:8080/list.do 요청 시 DispatcherServlet이 해당하는 URL과 매핑되는 정보를 찾은 후 연결되는 메소드에 요청을 위임한다.


<welcome-file-list>

/ 웹 요청 시 지정되어 있는 리소스 call

즉, http://localhost:8080 요청 시 index.jsp의 content를 보여준다.


아직은 spring 3.1 샘플 프로젝트를 만드는 중이라 완전하지 않은 DD 파일이므로 샘플 프로젝트 구성을 완료하면 추가적으로 다시 작성하도록 하자.

 

 

 


  <!-- spring frame -->
 <servlet-mapping>
  <servlet-name>appServlet</servlet-name>
  <url-pattern>/</url-pattern>
 </servlet-mapping>
 
 <!-- spring 외 -->
  <servlet-mapping>
   <servlet-name>default</servlet-name>
   <url-pattern>*.js</url-pattern>
   <url-pattern>*.gif</url-pattern>
   <url-pattern>*.jpg</url-pattern>
   <url-pattern>*.png</url-pattern>
   <url-pattern>*.css</url-pattern>
   <url-pattern>*.ico</url-pattern>
  </servlet-mapping>

 

Posted by 선한열심