2013년 7월 27일 토요일

Spring3.2 강좌) Spring 3.2에서 게시판 작성하기[2. web.xml, ContextLoaderListener, DispatcherServlet 스프링 설정]

/WEB-INF/web.xml 만들기


구로디지털 오엔제이프로그래밍실무교육센터


web.xml 파일은 웹 애플리케이션(Web Application)에 대한 전체 설정 파일이다. Web Application Deployment Descriptor 파일이다. XML 형식의 파일인데 주로 내용은 서블릿 컨텍스트의 초기파라미터, 세션 타임아웃 시간 설정, 서블릿 매핑, 에러 페이지 정의, 한글 필터링을 위한 필터 서블릿 정의, 스프링 이나 스트럿츠 프레임워크의 프론트 컨트롤러 정의 등을 주로 설정 한다. <web-app> 태그로 시작하고 웹 애프리리케이션의 WEB-INF 아래에 위치한다는 것 명심!!


우리가 만들 게시판에서 web.xml에 스프링 프레임워크의 컨텍스트로더 리스너, 디스패처서블릿(front controller)을 정의하고 한글 변환을 위한 인코딩 필터를 정의 했다. *.html 요청에 대해 디스패 서블릿을 할당했다. 즉 만들어질 게시판을 실행시키기 위해서는 *.html 형태로 브라우저에 실행해야 할 것이다.


web.xml 파일에보면 ContextLoaderListener DispatcherServlet이 보이는데 이들의 개념에 대해서 명확히 알 필요가 있다. 우선 각각 WebApplicationContext의 인스턴스를 생성하는데 ContextLoaderListener가 생성한 컨텍스트가 ROOT Context가되고 DispatcherServlet이 생성한 인스턴스는 ROOT Context를 부모로 하는 자식 컨택스트가 된다.
(여기에서 WebApplicationContext가 무얼까? 스프링 프레임워크는 자바 빈을 관리할 관리자가 필요한데 최고 상위에  BeanFactory가 있다. 하는 일은 자바빈 인스턴스를 만들고 배포, 객체간의 연관관계를 관리해 준다. 이를 상속 한 것이 ApplicationContext 인데 BeanFactory와 비슷한 일을 하는데 좀 더 기능이 많다.  이를 확장 한 것이 WebApplicationContext 이며 WebAppilcationContext 인터페이스는 웹 어플리케이션을 위한 ApplicationContext이다. 하나의 ServletContext(Web Application) 마다 하나의 WebApplicationContext가 존재한다.


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

이 설정에 의해 ContextLoaderListener가 서블릿 컨텍스트로 등록되면서 XmlWebApplicationContext 객체가 생성되는데 contextConfiglocation에 정의한 경로의 XML 파일을 읽어 WebApplicationContext를 생성한다, 이렇게 함으로써 XML 설정파일에 있는 자바빈 등을 메모리로 올리고 객체들간의 관계도 설정한다.


DispatcherServlet Spring MVC에서 Front Controller 역할을 하는데  Dispatcher Servlet이 로드되면 default로 서블릿의 이름과 연관된 XML 파일로부터 ApplicationContext를 로딩 한다.
( WEB-INF/서블릿이름-servlet.xml, 본 게시판에서는 /WEB-INF/action-servlet.xml)


DispatcherServlet 설정파일에는 스프링 MVC 컴포넌트와 관련된 <bean>정의를 주로 포함하는데 본 게시판에서는 DB접속을 위한 DataSource 정의만 두기로 하자.


서비스 계층(onj-service.xml)과 데이터 계층(onj-data.xml)에 속하는 빈 역시  DispatcherServlet의 설정파일에 포함할 수 있지만 별도의 설정파일을 두도록 하고 이름은 configBoard.xml로 하자.


이렇게 여러 개의 설정 파일이 있다면(물론 실제 프로젝트에는 더 많이 있다)설정파일들이 모두 로드 되도록 하기 위해 컨텍스트 로더(ContextLoader)를 설정하는데 컨텍스트 로더는 Dispatcher Servlet이 로드 하는 것 이외의 컨텍스트 설정파일을 로드 여기서는 configBoard.xml을 로드 시키자. 게시판에서 사용될 서비스쪽 및 모델쪽의 자바빈 로드를 위해


아래는 완성된 web.xml 파일이다.


<?xml version="1.0" encoding="UTF-8"?>

<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

       <display-name>OnJSpringBoard1.0, 오엔제이프로그래밍실무교육센터</display-name>

      

       <filter>

             <filter-name>encodingFilter</filter-name>

             <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

             <init-param>

                    <param-name>encoding</param-name>

                    <param-value>EUC-KR</param-value>

             </init-param>

       </filter>



       <filter-mapping>

             <filter-name>encodingFilter</filter-name>

             <url-pattern>/*</url-pattern>

       </filter-mapping>

      

       <!--  ContextLoaderListener 설정 -->

       <listener>

               <listener-class>

                           org.springframework.web.context.ContextLoaderListener

               </listener-class>

        </listener>

      

       <!--  ContextLoaderListener 설정 파일 -->

       <context-param>

             <param-name>contextConfigLocation</param-name>

                    <param-value>/WEB-INF/boardConfig.xml,

                                 /WEB-INF/action-servlet.xml

                    </param-value>

       </context-param>

 

       <!-- 디스패처 서블릿 정의 설정 -->

       <servlet>

             <servlet-name>action</servlet-name>

             <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

             <load-on-startup>1</load-on-startup>

       </servlet>

      

       <servlet-mapping>

             <servlet-name>action</servlet-name>

             <url-pattern>*.html</url-pattern>

       </servlet-mapping>

      



       <!--  게시물 미리 보기 기능을 위한 ajax 처리용 서블릿 정의 -->

       <servlet>

             <servlet-name>preView</servlet-name>

             <servlet-class>board.ajaxpreview.ContentPreview</servlet-class>

       </servlet>  



       <servlet-mapping>

             <servlet-name>preView</servlet-name>

             <url-pattern>/preView</url-pattern>

       </servlet-mapping>



[출처]오라클자바커뮤니티
www.oraclejavacommunity.co.kr

댓글 없음:

댓글 쓰기