프로그래밍/전자정부프레임워크(eGov)

나도 전자정부프레임워크에 부트스트랩 적용해보자! (2)

Jay22 2017. 1. 15. 15:17
반응형

</org.apache.tiles.version> 전 시간에 이 태그를 삽입한다고 했었다.


이것은 타일즈를 설정하는 것인데 타일즈에 대해서 알아보겠다.


타일즈는 복잡한 웹사이트 개발을 쉽게 하기 위해서 개발된 무료 오픈소스 템플리팅 프레임워크이다. 공통된 요소들을 부분적으로 모듈화 해서 페이지를 runtime시에 조립해서 소스코드의 중복을 줄이고 재사용가능한 템플릿으로 만들 수 있게 해준다.


자 이 태그를 넣고 저장을 하자.


그리고 Package Explorer 에 가서 Maven Dependencies 에 들어가 보면 tiles관련 jar파일들이 쭉 추가 되는 것을 볼 수 있다. 이것이 메이븐이다.





자 다음은 디스패처 서블릿에 추가할 코드가 있다.

디스패처 서블릿의 위치는 웹앱폴더의 하위 config설정파일에 있다.






디스패처 서블릿이란?


dispatcher-servlet.xml => 뷰와 컨트롤러를 연결해주는 역할을 하는 파일이다.

즉 이것을 이용하면 스프링에서 제공하는 mvc를 이용을 하겠다는 말이다. 

그렇다면 자세한 순서를 보자.


1) 먼저 클라이언트가 해당 어플리케이션에 접근하면 접근한 url의 요청을 dispather-servlet이 가로챈다. 이렇게 요청을 가로채는게 가능한 것은 web.xml에 등록된 dispatcher-servlet의 <url-pattern>이 해당 어플의 모든 url로 등록 되어 있기 때문이다. 자 만약 특정 url만 적용하고 싶다면 <url-pattern>의 내용을 바꾸면 되겠다.


2) 가로챈 정보를 HandlerMapping에게 보내서 해당요청을 처리할 수 있는 controller를 찾게 된다. 


3) 핸들러 매핑이 해당 요청을 처리할 controller를 찾아냈다면 요청을 컨트롤러에 보내준다. 개발자가 건드는 부분이 컨트롤러다. 


4) 컨트롤러는 해당 요청을 처리한 후 응답받을 view의 이름을 리턴하게 된다. 그 때 이 이름을 ViewResolver라는 놈이 받아서 View가 존재하는지 알아본다. 


5) 해당 view가 있다면 처리결과를 view에 보낸 후 이 결과를 다시 디스패처 서블릿에개 보낸다.  그리고 디스패처서블릿은 최종결과를 뷰에 보내게 된다.


- 이런 복잡한 과정이지만 개발자는 컨트롤러와 뷰만 작성하면 된다.





그리고 중간에 이 코드를 삽입 한다.  


1
2
3
4
5
6
7
8
9
10
11
12
13
14
<bean id="tilesViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
  <property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView" />
  <property name="order" value="1" />
 </bean>
 
 <!-- Tiles 2 Configurer -->
 <bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
  <property name="definitions">
   <list>
    <value>/WEB-INF/tiles/default-layout.xml</value>
   </list>
  </property>
 </bean>
 
cs


line1 의 타일즈뷰리졸버는 런타임시 전체 페이지에 조립되는 페이지의 조각을 배치하기 윟나 템플릿 프레임워크이다.

line7 위와 같이 정의할 경우 /WEB-INF/tiles/default-layout.xml파일을 로드하여 각 view 이름에 맞는 tiles view를 리턴해 준다.


그리고 기존의 코드의 우선순위를 바꾼다. 유알엘베이스뷰리졸버(기존에 있음)

urlbasedviewresolver는 특별한 맵핑정보없이 view이름을 url로 사용한다는 의미이다. view이름과 실제 view자원과의 이름이 같을 때 사용한다.






디스패처 서블릿 안에는 적당한 뷰를 렌더링하기 위한 특별한 빈들을 사용한다. 이러한 빈들이 스프링 mvc를 구성하게 된다.


HandlerMapping - 들어오는 요청을 HandlerMapping 구현체가 다양하게 만든 기준에 기반한 전처리자(pre-processors)와 후처리자(post-processors)(핸들러 인터셉터)의 목록에 매핑한다. 대부분의 인기있는 구현체는 어노테이션이 붙은 컨트롤러를 지원하지만 그렇지 않은 구현체들도 존재한다.

HandlerAdapter - 핸들러가 실제로 호출되었는지 여부에 상관없이 DispatcherServlet이 요청에 매핑된 핸들러를 호출하도록 돕는다. 예를 들어 어노테이션이 붙은 컨트롤러를 호출하려면 다양한 어노테이션을 처리해야 한다. 그러므로 HandlerAdapter의 주요 목적은 이러한 세부내용에서 DispatcherServlet을 보호하는 것이다.

HandlerExceptionResolver - 예외를 뷰에 매핑하고 더 복잡한 예외 처리 코드도 사용할 수 있다.

ViewResolver - 논리적인 스프링 기반의 뷰 이름을 실제 View 타입으로 처리한다.

LocaleResolver - 국제화된 뷰화면을 제공할 수 있도록 클라이언트가 사용하는 로케일을 처리한다.

ThemeResolver - 개인화된 레이아웃을 제공하는 것처럼 웹 어플리케이션이 사용할 수 있는 테마를 처리한다.

MultipartResolver - HTML 폼에서 업로드하는 파일을 처리하는 등의 멀티파트(multi-part) 요청을 파싱한다.






자 다음은 아까 경로 설정해준 것에 default-layout을 만들어야 한다.





자 이렇게 생겼다. 퍼즐처럼 뷰가 끼워맞춰지는 설정을 해주는 파일이다. 파일명과 안에 속성 put-attribute의 name은 각자 뷰를 나눌 기준에 따라 알아서 설정하면 된다. 기본적으론 헤더, 레프트, 네비, 컨텐츠(본문), 푸터 이렇게 5부분으로 나누었다.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE tiles-definitions PUBLIC
       "-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN"
       "http://tiles.apache.org/dtds/tiles-config_2_1.dtd">
 
<tiles-definitions>
    <definition name="layouts-tiles" template="/WEB-INF/jsp/egovframework/example/cmmn/default-layouts.jsp">
          <put-attribute name="header"        value="/WEB-INF/jsp/egovframework/example/cmmn/default-header.jsp" />
          <put-attribute name="left"            value="/WEB-INF/jsp/egovframework/example/cmmn/default-left.jsp" />
          <put-attribute name="nav"            value="/WEB-INF/jsp/egovframework/example/cmmn/default-nav.jsp" />
          <put-attribute name="content"       value="" />
          <put-attribute name="footer"        value="/WEB-INF/jsp/egovframework/example/cmmn/default-footer.jsp" />
    </definition>
    
    <definition name="*/*.tiles" extends="layouts-tiles">
          <put-attribute name="content"   value="/WEB-INF/jsp/egovframework/example/{1}/{2}.jsp" />
    </definition>
</tiles-definitions>
 
cs





자 line 16의 컨텐츠는 특정파일을 넣는것이 아니고 경로를 주었다.  /WEB-INF/jsp/egovframework/example 밑의 jsp는 모두 이 타일즈를 적용시키겠다 라는 의미이다.


다음 포스팅에는 본격적으로 html를 입혀보자.



반응형