위치 : webapp > WEB-INF > config > egovframework > springmvc > dispatcher-servlet.xml


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

즉 해당 xml을 이용하면 스프링에서 제공하는 mvc를 사용 하겠다는 말과 동일하다.


작동순서


1. 클라이언트가 해당 어플리케이션에 접근하면 접근한 URL의 요청을 dispather-servlet이 가로챈다. 이렇게 요청을 

가로채는게 가능한 것은 web.xml에 등록된 dispatcher-servlet의 <url-pattern>이 해당 어플의 모든 url로 등록 되어 있기 때문이다.

 현재 전자정부프레임워크에는 <url-pattern>*.do</url-pattern> 라고 지정되어 있을 것이다.

 

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


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


4. 컨트롤러는 해당 요청을 처리한 후 응답받을 view의 이름을 리턴하게 된다. 그 때 이름을 ViewResolver가 받아서 View의 존재 여부를 확인 한다.


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


<!-- 타일즈 세팅하는 프레임워크 -->


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


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


HandlerMapping - 들어오는 요청을 handlerMapping 구현체가 다양하게 만든 기준에 기반한 전처리자(pre-processors)와 후처리자(post-processors)(핸들러 인터셉터)의 목록에 매핑한다.

대부분의 인기있는 구현체는 어노테이션이 붙은 컨트롤러를 지원하지만 그렇지 않은 구현체들도 존재한다.


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

그러므로 HandlerAdapter의 주요 목적은 이러한 세부내용에서 DispatcherServlet을 보호하는 것이다.


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

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

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

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

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


tiles > default-layout.xml


<?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>



// <put-attribute name="content"   value="/WEB-INF/jsp/egovframework/example/{1}/{2}.jsp" />

// 이부분의 뜻은 해당폴더 /WEB-INF/jsp/egovframework/example 밑에 있는 모든 jsp에 타일즈 (현재 폴더 defult-layout.xml)를 적용시키겠다 라는 뜻이다.



'Back-End > Egov' 카테고리의 다른 글

Maven이란??  (0) 2017.11.27

Maven(메이븐) 이란?


메이븐은 프로젝트 구조와 내용을 기술하는 선언적 접근방식의 오픈소스 빌드 툴이다. 컴파일과 동시에 빌드를 수행할수 있고 테스트를

병행하거나 서버측 디플로이 자원을 관리할 수 있는 환경을 제공한다 


pom.xml에서 핵심항목은 dependencies이다. 이것은 어플리케이션을 컴파일하고 테스트하고 실행하는데 필요한 라이브러리 목록을 기술한다.


태그의 종류


name : 프로젝트의 이름

url      : 사이트 url

groupId : 프로젝트 그룸 ID, 도메인이나 특정한 정보로 식별

version     : 버전 버전설정

packaging : 패키징 타입 설정


여기서 중요한것은 dependency인데 Spring이나 JDBC처럼 의존관계가 추가 되는 라이브러리등은 해당 타겟 라이브러리만 지정해주면

Maven이 자동으로 타겟이 의존하는 라이브러리를 설정해준다.

'Back-End > Egov' 카테고리의 다른 글

디스패처 서블릿(dispatcher-servlet) 과 타일즈 설정  (0) 2017.11.27

merge into는 

DB 테이블을 다룰 때, 특정 조건의 데이터가 존재하는 경우에는 해당 row를 원하는 값으로 update하고,

없는 경우에는 새로운 데이터를 insert해야 하는 경우에 사용한다. 



MERGE문


MERGE INTO 테이블명

USING ( update나 insert될 데이터 원천, 하나의 테이블만 이용한다면 FROM DUAL사용 )

ON (UPDATE될 조건, 쿼리의 WHERE이라고 봐도 무방함)

WHEN MATCHED THEN ( ON에서 조건에 해당하면 실행 될 문 )

UPDATE SET 컬럼1 = 값1 ( UPDATE문 실행)

WHEN NOT MATCHED THEN ( ON에서 조건에 해당하지 않으면 실행 될 문 )

INSERT ( 컬럼 LIST ) VALUE ( VALUE );



!!!!!! 가장 중요한것. 이거때문에 하루 버렸는데,Point!!!!


using ( select 할때 )에서 항시 해당 Table 의 PK를 전체를 변수로 받아야 합니다.  null 유의 )



예) 회사에서 사용한 것 (테이블명,컬럼명 변경함)


MERGE INTO MAP_M A

      USING ( SELECT :컬럼0 AS 컬럼0         //컬럼0~3은 모두 MAP_M 이라는 테이블의 KEY값.

                   , :컬럼1 AS 컬럼1

                   , :컬럼2 AS 컬럼2

                   , :컬럼3 AS 컬럼3

                FROM DUAL ) B // FROM DUAL은 테이블을 1개만 쓸때!! 

      ON ( A.컬럼0     = B.컬럼0     AND

           A.컬럼1 = B.컬럼1 AND

           A.컬럼2 = B.컬럼2 AND

           A.컬럼3 = B.컬럼3

          )

      WHEN MATCHED THEN

           UPDATE 

              SET A.컬럼4   = 'Y'

                , A.컬럼5   = :받아올 값

                , A.컬럼6   = :받아올 값

      WHEN NOT MATCHED THEN

            INSERT ( 컬럼1,   컬럼2,    컬럼3,    컬럼4,    컬럼5,    컬럼6 )

           VALUES (:컬럼1,  :컬럼2,    :컬럼3,    :컬럼4,    :컬럼5,   :컬럼6 )


이런식으로 사용하면 끝 !!!! 


그리고 Oracle 10g 이후에는 When matched,, when not matched 이하의 update,insert 구문에도 where을 사용할 수 있습니다 !!!! 



'DBMS > Oracle' 카테고리의 다른 글

mybits 에러  (0) 2018.07.13
이런방식의 쿼리. sort_sql에서 max값 구할때  (0) 2017.12.06
데이터 변형  (0) 2017.10.17
LAPD,RAPD 사용법  (0) 2017.10.17
UNION, UNION ALL  (0) 2017.06.16

+ Recent posts