WebKit nightly builds가 HTML5 표준에 정의되어 있는 script 요소의 async와 defer 속성을 지원하기 시작했다는 소식.

기본적으로 웹 브라우저가 외부 자바스크립트를 불러오는 일반 script 태그를 만나게 되면, 우선 해당 스크립트를 내려받아 해석하고 실행(execute)할 때까지 웹 문서의 HTML 코드 parsing 작업을 잠시 뒤로 미룬다. 그래서 용량이 큰 스크립트를 문서 해석 초기에 만나게 되면 해당 페이지를 불러오는 속도마저 지체되는 현상을 일으키게 되어 결국 전체적 성능을 떨어뜨리는 결과를 가져오는데, 이런 성능의 병목 현상을 막기 위해 여러 다양한 꼼수들이 쓰여왔다. 이런 부작용을 근본적으로 막기 위해 소개된 것이 script 태그의 async와 defer 속성이다.

사용 예를 보면 아주 단순하다:

<script async src="myAsyncScript.js" onload="myInit()"></script>
<script defer src="myDeferScript.js" onload="myInit()"></script>

위와 같이 async 혹은 defer 된 스크립트는 문서 parsing 작업의 중단 없이 동시에 내려받게 되며, 선택적으로 onload handler를 지정해서 일반적인 초기화 작업도 진행할 수 있다.
둘의 차이를 결정짓는 중요한 것은 바로 스크립트가 실행되는 시점이 서로 다르다는 것인데, async script는 window의 load event 전 내려받는 즉시 바로 실행되는 데 반해 defer script는 문서의 parsing 작업이 끝난 후 DOMContentLoaded event 전에 문서에 삽입된 순서에 따라 실행된다.

둘의 JavaScript 실행 시점의 차이는 Peter Beverloo씨가 그린 도표를 보면 훨씬 더 명확해진다.

script가 문서를 직접 만지고 조작하거나 서로 간 로딩 순서가 중요할 경우엔 defer 속성을 쓰고, 그렇지 않다면 async 속성을 써서 웹 페이지 로딩 속도를 줄일 수 있다.

앞으로 WebKit 기반 브라우저가 이 속성을 모두 지원할 예정이라지만, 이미 Firefox는 3.6 버전부터 두 속성 모두를 지원하고 있으며, Internet Explorer 역시 예전부터 defer 속성을 지원하고 있었으나 async 속성은 아직 지원하지 않는다.

결국, 큰 용량의 JavaScript로 말미암은 페이지 로딩 지체 현상을 방지하려면 두 속성의 지원 상황이 나아질 때까지 아직 꼼수가 필요하다. – 웹 브라우저의 async와 defer 속성 지원 여부 알아보기.

덧붙임(2011-2-3): HTML5 spec에 async=false 속성을 쓰면 스크립트가 삽입된 순서대로 실행되도록 하는 기능이 추가됨. async 속성의 기본값은 true.


출처 - http://appletree.or.kr/blog/web-development/javascript/script-%ED%83%9C%EA%B7%B8%EC%9D%98-async%EC%99%80-defer-%EC%86%8D%EC%84%B1/



'Development > HTML' 카테고리의 다른 글

HTML - select  (0) 2012.06.09
html - viewport  (0) 2012.05.28
html - 이벤트에서 return 의미  (0) 2012.05.23
HTML - rel 속성  (0) 2012.05.15
웹페이지를 가운데 정렬 하기  (0) 2012.05.11
Posted by linuxism
,

그동안 지도API의 기능 중 일부로 되어 있었던 아래의 기능들이 로컬API라는 새로운 오픈API의 기능으로 바뀝니다.

  • 주소→좌표 변환
    • 기존 URL : http://apis.daum.net/maps/addr2coord
    • 신규 URL : http://apis.daum.net/local/geo/addr2coord
  • 좌표→주소 변환
    • 기존 URL : http://apis.daum.net/maps/coord2addr
    • 신규 URL : http://apis.daum.net/local/geo/coord2addr
  • 좌표계 변환
    • 기존 URL : http://apis.daum.net/maps/transcoord
    • 신규 URL : http://apis.daum.net/local/geo/transcoord

변경 방법

  1. 키 발급 및 관리 페이지에서 로컬 apikey를 발급 받는다.
  2. 기존에 지도 apikey로 발급받은 apikey를 1번에서 발급받은 키로 바꾼다.
  3. 기존 URL에서 /maps 부분을 /local/geo 로 바꾼다.

기본적으로 지도API와는 성격적으로도 차이가 있고, 저희가 새로 마련 중인 신규 정책과도 어울리지 않는 등의 이유로 부득이 하게 변경하게 되었습니다.

※ 기존 URL은 2012년 1월 31일까지만 유지할 예정이고, 그 이후에는 새로운 URL로만 사용 가능합니다. 혹시 이 기능을 사용하고 계시다면 빠른 시일내에 URL을 변경 부탁드립니다.

출처 - http://www.nuno21.net/bbs/board.php?bo_table=html&wr_id=1236


function addAddress(){
    var oScript = document.createElement('script');
    oScript.type ='text/javascript';
    oScript.charset ='utf-8';          
    oScript.src = 'http://apis.daum.net/maps/coord2addr?apikey=' + apiKey + 
                  '&latitude=' + '${latitude}' + '&longitude=' + '${longitude}' +
                  '&output=json&callback=addrSearch';
    document.getElementsByTagName('head')[0].appendChild(oScript);
}
function addrSearch(data){
    var resultForm = document.getElementById("rvAddr");
    resultForm.innerHTML = data.fullName;
}


출처 - http://javastore.tistory.com/90




Posted by linuxism
,


The Context Container

소개(Introduction)

Context 엘리먼트는 특정 가상호스트 내에서 실행되는 웹어플리케이션을 나타냅니다. 각 웹어플리케이션은 웹어플리케이션 아카이브(Web Application Archive) (WAR) 파일 또는, 패킹하지 않은 채로 그에 상응하는 내용을 담고 있는 디렉토리를 기준으로 하며, 이러한 내용은 서블릿 스펙(버전 2.2 또는 그 이상)에 설명되어 있습니다. 웹어플리케이션 아카이브에 관한 더 많은 정보를 원하시면 서블릿 스펙을 다운로드해서 참고하십시오. 그리고 Tomcat 어플리케이션 개발자 가이드(Application Developer's Guide)를 검토하시기 바랍니다.

각 HTTP 요청을 처리하는데 사용할 웹어플리케이션의 선택은, 각각 정의된 Context의 컨텍스트 경로(context path)에 대해 요청 URI의 가능한 전치어(prefix) 중 가장 길게 매칭가능한 컨텍스트 경로를 가진 컨텍스트를 선택함으로써 이루어집니다. 선택된 Context는 수신된 요청을 처리하기 위해 적절한 서블릿을 선택합니다. 서블릿 선택 작업은 웹어플리케이션 배치 디스크립터(web application deployment descriptor) 파일(반드시 웹어플리케이션 디렉토리 하위의 /WEB-INF/web.xml에 위치함)에 정의된 서블릿 매핑 정보에 따라서 이루어집니다.

Context 엘리먼트는 횟수의 제한 없이 정의할 수 있으며, conf/server.xml의 Host 엘리먼트 내에 중첩시키면 됩니다. 각각의 Context는 반드시 유일한 컨텍스트 경로를 가져야 하며, 컨텍스트 경로는 path 속성으로 정의됩니다. 또 컨텍스트 경로의 문자열 길이가 0인 Context를 추가로 지정해야 하는데, 이렇게 정의한 Context는 이 가상 호스트에 대하여 default 웹어플리케이션이 되어, 다른 어떤 Context의 컨텍스트 경로에도 매칭되지 않는 모든 요청을 처리하는데 사용됩니다.

Context 엘리먼트를 Host 엘리먼트에 중첩시키는 방법 외에도, Host의 appBase로 지정된 디렉토리 안에 이들을 각각의 파일(확장자는 ".xml")로 저장하는 방법이 있습니다. 어플리케이션의 자동배치(Automatic Application Deployment)에서 더 자세한 정보를 볼 수 있습니다.

명시적으로 Context 엘리먼트를 지정하는 방법 뿐만 아니라, 당신을 위해 자동으로 Context 엘리먼트를 생성해 주는 몇가지 테크닉도 존재합니다. 어플리케이션의 자동배치(Automatic Application Deployment)와 사용자 웹어플리케이션(User Web Applications)에서 더 많은 정보를 볼 수 있습니다.

이하의 설명에서는 $CATALINA_HOME 변수명을 사용하여 당신이 Tomcat 4를 설치한 디렉토리를 참조하며, 이 디렉토리가 대부분의 상대경로에 대한 기준 디렉토리(base directory)가 됩니다. 그러나 만약 CATALINA_BASE 디렉토리를 설정하여 Tomcat 4를 여러개 설치했다면, 이러한 디렉토리 변수 참조에 대해 $CATALINA_HOME 대신 $CATALINA_BASE 를 사용해야 합니다.

 

속성(Attributes)
공통속성(Common Attributes)

Context의 모든 구현체는 다음 속성들을 제공하게 됩니다:

속성설명
className

사용할 Java 구현체 클래스의 이름. 이 클래스는 반드시 org.apache.catalina.Context 인터페이스를 구현해야 합니다. 지정하지 않으면 표준값 (아래에 정의됩니다)이 사용됩니다.

cookies

true(디폴트)로 지정하면 클라이언트가 쿠키를 지원하는 경우 세션확인의 통신수단(session identifier communication)으로 쿠키를 사용합니다. false로 지정하면 세션확인의 통신수단으로 쿠키 사용을 하지 않고, 어플리케이션에 의한 URL 다시쓰기(URL rewriting)에만 의존한다는 의미입니다.

crossContext

true로 지정하면 이 어플리케이션에서 ServletContext.getContext() 호출을 통해, 이 가상호스트에서 실행중인 다른 웹어플리케이션에 대한 요청디스패쳐(request dispatcher)를 성공적으로 얻을 수 있습니다. 보안상의 이유로 false(디폴트)로 지정하면 getContext()는 언제나 null을 반환하게 됩니다.

docBase

이 웹어플리케이션에 대한 Document Base (Context Root로도 알려져 있습니다) 디렉토리, 또는 웹어플리케이션 아카이브 파일의 경로명(웹어플리케이션을 WAR 파일로 직접 실행하는 경우)을 나타냅니다. 이 디렉토리나 WAR 파일에에 대한 절대경로명을 지정할 수도 있고, 이 Context가 정의된 Host의 appBase 디렉토리에 대한 상대경로명을 지정할 수도 있습니다.

override

이 Context가 정의된 Host의 DefaultContext에 정의된 각 설정내용을, 이 Context 엘리먼트에서 재정의(override) 할 수 있도록 하려면 true로 지정합니다. 디폴트로는 DefaultContext 엘리먼트의 설정이 사용되도록 되어 있습니다.

privileged

true로 설정하면 이 컨텍스트는 관리자서블릿(manager servlet) 같은 컨테이너 서블릿을 사용할 수 있습니다.

path

이 웹어플리케이션의 컨텍스트 경로(context path)를 나타내며, 각 요청 URI의 시작부분이 컨텍스트 경로와 같을 때 해당 웹어플리케이션이 그 요청을 처리하게 됩니다. 하나의 특정 Host 내의 컨텍스트 경로들은 모두 각각 유일해야 합니다. 만약 컨텍스트 경로를 빈 스트링("")으로 지정하면, 이 Context는 이 Host에 대한 디폴트 웹어플리케이션으로 정의된 것입니다. 디폴트 웹어플리케이션은 다른 Context 들에 해당되지 않는 모든 요청을 처리할 것입니다.

reloadable

true로 지정하면, Catalina는 /WEB-INF/classes/와 /WEB-INF/lib 안 클래스 들의 변경여부를 감시하다가, 변경이 발견되면 웹어플리케이션을 자동으로 재적재(reload)합니다. 이 기능은 개발중에는 매우 유용하지만 얼마간의 실행부하(runtime overhead)가 발생하므로, 실제 운영할 용도로 어플리케이션을 배치(deploy)할 때는 사용하지 않도록 합니다. 그러나 이미 배치가 끝난 어플리케이션이라도 Manager 웹어플리케이션을 이용하면 필요할 때 재적재 하도록 할 수 있습니다.

wrapperClass

이 Context로 관리할 서블릿 들에 대해 사용할 org.apache.catalina.Wrapper 구현체 클래스의 Java 클래스명입니다. 지정하지 않으면 표준값이 사용됩니다.

표준구현체(Standard Implementation)

Context의 표준구현체 클래스는 org.apache.catalina.core.StandardContext 입니다. 이 클래스는 위에 나열한 공통속성 외에도 다음과 같은 추가적인 속성을 제공합니다:

속성설명
debug

이 Context가 해당 Logger에 디버깅 로그를 출력하는 상세수준을 의미합니다. 숫자가 높을 수록 더 자세한 출력을 생성합니다. 지정하지 않으면, 디버깅 상세수준의 디폴트 값은 0 입니다.

swallowOutput

이 값이 true 이면, 웹어플리케이션에서 System.out과 System.err 으로 보내지는 바이트 출력은 모두 웹어플리케이션의 로거(logger)로 재지정(redirect)됩니다. 이 값을 지정하지 않으면false로 인식합니다.

useNaming

이 웹어플리케이션에서 Java2 Enterprise Edition (J2EE) 플랫폼 규약에 맞는 JNDIInitialContext를 사용가능하게 하도록 설정하려면 true(디폴트값)로 지정합니다.

workDir

이 Context에서 사용할 임시 디렉토리에 대한 경로명입니다. 이 디렉토리는 관련 웹어플리케이션의 서블릿들이 임시로 읽기-쓰기 작업을 하는 용도로 사용합니다. 웹어플리케이션의 서블릿 들은 이름이 javax.servlet.context.tempdir인 서블릿-컨텍스트 속성(타입은 java.io.File)을 통해 이 디렉토리를 볼 수 있으며, 이 내용은 서블릿 스펙에 기술되어 있습니다. 지정하지 않은 경우에는 적절한 디렉토리가 $CATALINA_HOME/work 아래에 제공됩니다.

내부 컴포넌트(Nested Components)

아래의 유틸리티 컴포넌트들은 해당 엘리먼트를 Context 엘리먼트 안에 최대 하나까지 포함시킬 수 있습니다:

  • Loader - 이 웹어플리케이션의 서블릿과 빈 클래스들을 로드하는 웹어플리케이션 클래스 로더를 설정합니다. 일반적으로 디폴트로 설정되어 있는 것을 그냥 사용하는 것으로 충분합니다.
  • Logger - 이 Context에 대한 모든 로그 메시지를 받아서 처리할 로거(logger)를 설정합니다. 이 로거는ServletContext.log() 호출을 통해 기록될 어플리케이션 로그 메시지도 처리합니다.
  • Manager - 이 웹어플리케이션의 HTTP 세션을 생성/파괴/유지 시키는데 사용될 세션관리자를 설정합니다. 일반적으로 디폴트로 설정되어 있는 세션관리자를 그냥 사용하는 것으로 충분합니다.
  • Realm - 이 웹어플리케이션만을 위한 사용자/역할 데이터베이스를 사용할 수 있는 영역(realm)을 설정합니다. 지정하지 않으면 이 웹어플리케이션은 이 Context가 정의된 Host나 Engine 에 정의된 Realm을 사용할 것입니다.
  • Resources - 이 웹어플리케이션에 관련된 정적 자원에 접근하는데 사용할 자원관리자를 설정합니다. 일반적으로 디폴트로 설정되어 있는 자원관리자를 그냥 사용하는 것으로 충분합니다.
특별기능(Special Features)
Access Logs

웹서버를 운영할 때 일반적으로 생성되는 출력 파일중 하나가 액세스 로그(access log)입니다. 이 로그는 서버가 처리하는 각 요청마다 표준 포맷에 따라 한 라인씩 출력합니다. Catalina에서는 Valve 구현체를 사용자가 임의로 선택하여, 웹서버들이 표준 포맷에 따라 생성하는 액세스 로그와 같은 포맷의 로그를 생성할 수도 있고 또는 다양한 커스텀 포맷으로 로그를 생성할 수 있도록 하고 있습니다.

당신은 Catalina에 EngineHost, 또는 Context가 처리하는 모든 요청에 대한 액세스 로그를 생성하도록 지시할 수 있는데, 이는 다음과 같이 Valve 엘리먼트를 중첩시키면 됩니다:

          <Context path="/examples" ...>
            ...
            <Valve className="org.apache.catalina.valves.AccessLogValve"
                   prefix="localhost_access_log." suffix=".txt"
                   pattern="common"/>
            ...
          </Context>
          

제공되는 설정 속성에 대한 더 많은 정보는 액세스 로그 밸브(Access Log Valve)에서 볼 수 있습니다.

컨텍스트의 자동설정(Automatic Context Configuration)

만약 표준 Context 구현체를 사용하고 있다면, Catalina가 기동될 때 또는 이 웹어플리케이션이 재적재될 때 다음의 설정단계 들이 자동으로 수행됩니다. 이 기능은 특별한 설정이 필요치 않습니다.

  • 만일 Loader 엘리먼트를 선언하지 않았다면 표준 웹어플리케이션 클래스로더로 설정됩니다.
  • 만일 Manager 엘리먼트를 선언하지 않았다면 표준 세션관리자로 설정됩니다.
  • 만일 Resources 엘리먼트를 선언하지 않았다면 표준 자원관리자로 설정됩니다.
  • conf/web.xml에 나열된 웹어플리케이션 프로퍼티들이 이 웹어플리케이션의 디폴트 값으로 처리됩니다. 이 파일은 디폴트 매핑(*.jsp 확장자를 해당 JSP 서블릿으로 매핑하는 등의), 그리고 모든 웹어플리케이션에 적용될 다른 표준 기능들을 정하는 데 사용됩니다.
  • 이 웹어플리케이션에 대한 /WEB-INF/web.xml 파일에 나열된 웹어플리케이션 프로퍼티들이 처리됩니다(이 파일이 있는 경우).
  • 만일 당신의 웹어플리케이션에서 사용자 인증을 요구하는 보안조건을 지정했다면, 당신이 선택한 로그인 방법을 적절히 구현한 인증자(Authenticator)가 설정됩니다.
컨텍스트 파라미터(Context Parameters)

이 엘리먼트 안에 <Parameter> 엘리먼트 들을 중첩시키면, 웹어플리케이션에서 서블릿-컨텍스트 초기화 파라미터(servlet context initialization parameters)로 이용가능한 파라미터이름-값 들을 설정할 수 있습니다. 예를 들어 다음과 같이 하면 초기화 파라미터를 생성할 수 있습니다:

          <Context ...>
            ...
            <Parameter name="companyName" value="My Company, Incorporated"
                   override="false"/>
            ...
          </Context>
          

이는 웹어플리케이션 배치 디스크립터(/WEB-INF/web.xml) 안에 다음과 같은 엘리먼트를 포함시키는 것과 동일합니다:

          <context-param>
            <param-name>companyName</param-name>
            <param-value>My Company, Incorporated</param-value>
          </context-param>
          

하지만 이 값을 커스터마이즈하기 위해 배치 디스크립터를 변경할 필요는 없습니다.

<Parameter> 엘리먼트에서는 다음과 같은 속성을 사용할 수 있습니다:

속성설명
description

이 컨텍스트 초기화 파라미터에 대한 간략한 설명이며, 생략가능

name

생성할 컨텍스트 초기화 파라미터의 이름.

override

웹어플리케이션 배치 디스크립터에서 여기에서 지정한 초기화 파라미터와 같은 이름의<context-param>를 지정했을 때 그 파라미터 값의 덮어쓰기(override)를 허용하지 않으려면false로 설정합니다. 디폴트값은 true입니다.

value

웹어플리케이션에서 ServletContext.getInitParameter()을 호출할 때 반환할 파라미터 값.

환경항목(Environment Entries)

웹어플리케이션에서 환경항목자원(environment entry resources)으로 사용할 수 있도록 항목의 이름-값 들을 설정할 수 있습니다. 이 설정은 <Environment> 항목을 이 엘리먼트 내에 중첩시키면 됩니다. 예를 들어 아래와 같이 환경항목을 생성할 수 있습니다:

          <Context ...>
            ...
            <Environment name="maxExemptions" value="10"
                   type="java.lang.Integer" override="false"/>
            ...
          </Context>
          

이는 웹어플리케이션 배치 디스크립터(/WEB-INF/web.xml)에서 다음의 엘리먼트를 포함시킨 것과 동일합니다:

          <env-entry>
            <env-entry-name>maxExemptions</param-name>
            <env-entry-value>10</env-entry-value>
            <env-entry-type>java.lang.Integer</env-entry-type>
          </env-entry>
          

그러나 이 값을 커스터마이즈하기 위해 배치 디스크립터를 변경할 필요는 없습니다.

<Environment> 엘리먼트에서는 다음과 같은 속성들을 사용할 수 있습니다:

속성설명
description

(선택사항)이 환경항목에 대한 사람이 읽기 쉬운 간단한 설명

name

생성할 환경항목의 이름. java:comp/env 컨텍스트에 대한 상대적인 이름입니다.

override

웹어플리케이션 배치 디스크립터에서 <env-entry>으로 같은 이름의 환경항목을 지정하는 경우, 여기에서 지정한 값을 덮어쓰기(override) 하지 않도록 하고 싶으면 false로 지정합니다. 이 값을 지정하지 않으면 덮어쓰기가 허용됩니다.

type

이 환경항목에 대해 웹어플리케이션이 예상하는 완전한(fully qualified) Java 클래스명. 반드시 웹어플리케이션 배치 디스크립터의 <env-entry-type>의 규칙에 맞는 값이어야 합니다. 그 규칙에 맞는 값 들은: java.lang.Booleanjava.lang.Bytejava.lang.Characterjava.lang.Double,java.lang.Floatjava.lang.Integerjava.lang.Longjava.lang.Short, 또는java.lang.String 입니다.

value

웹어플리케이션이 JNDI 컨텍스트로부터 요청해서 반환 받을 환경항목의 값. 이 값은 반드시 위의type에 정의된 Java type으로 변환 가능해야 합니다.

생명주기 리스너(Lifecycle Listeners)

만약 이 Context가 언제 시작되고 종료되는지 어떤 Java 객체가 알 필요가 있다면, 이 엘리먼트 안에Listener 엘리먼트를 포함시켜서 그 Java 클래스명을 선언하면 됩니다. 이 때 지정하는 Java 클래스는org.apache.catalina.LifecycleListener 인터페이스를 반드시 구현해야 하며, 해당 생명주기 이벤트 발생에 대해 통지를 받게 될 것입니다. 리스너의 설정은 다음과 같습니다:

          <Context path="/examples" ...>
            ...
            <Listener className="com.mycompany.mypackage.MyListener" ... >
            ...
          </Context>
          

Listener는 이 엘리먼트에 설정될 추가 프로퍼티를 얼마든지 가질 수 있음을 기억하십시오. 속성명은 표준 프로퍼티 메소드(getter/setter) 명명규칙을 사용하는 해당 JavaBean 속성명에 매칭됩니다.

요청필터(Request Filters)

어떤 Context, 또는 상위의 EngineHost 엘리먼트에서 수신하는 모든 요청에 대해, IP 주소나 호스트명 등을 Catalina가 검사하도록 지시할 수 있습니다. 원격지 주소나 이름은 설정된 "허가(accept)" 그리고/또는 "거부(deny)" 리스트에 대해 검사하며, 이러한 설정은 Jakarta Regexp 정규표현식(regular expression!) 라이브러리에 의해 지원되는 정규표현식 문법에 따라 정의됩니다. 허가되지 않은 위치에서 보낸 요청은 HTTP "Forbidden" 오류와 함께 거부됩니다. 필터 선언의 예는 다음과 같습니다:

          <Context path="/examples" ...>
            ...
            <Valve className="org.apache.catalina.valves.RemoteHostValve"
                   allow="*.mycompany.com,www.yourcompany.com"/>
            <Valve className="org.apache.catalina.valves.RemoteAddrValve"
                   deny="192.168.1.*"/>
            ...
          </Context>
          

지원되는 설정 옵션에 대한 더 자세한 정보는 원격지 주소 필터(Remote Address Filter)와 원격 호스트 필터(Remote Host Filter)에서 볼 수 있습니다.

자원정의(Resource Definitions)

웹어플리케이션 배치 디스크립터의 <resource-ref>와 <resource-env-ref> 엘리먼트의 JNDI 탐색(lookup)에 대해 반환될 자원의 특성도 선언 가능합니다. 그리고 어떤 자원에 대해서 객체팩토리를 사용하고(Tomcat이 아직 모르는 경우) 그 객체팩토리를 설정하는데 사용할 프로퍼티를 설정하려면, 반드시 그 자원과 같은 이름으로 자원 파라미터(Resource Parameters)를 추가로 정의해야 합니다.

예를 들어 다음과 같이 자원정의가 가능합니다:

          <Context ...>
            ...
            <Resource name="jdbc/EmployeeDB" auth="Container"
                      type="javax.sql.DataSource"
               description="Employees Database for HR Applications"/>
            ...
          </Context>
          

이것은 웹어플리케이션 배치 디스크립터(/WEB-INF/web.xml)에 다음의 엘리먼트를 포함시킨 것과 동일합니다:

          <resource-ref>
            <description>Employees Database for HR Applications</description>
            <res-ref-name>jdbc/EmployeeDB</res-ref-name>
            <res-ref-type>javax.sql.DataSource</res-ref-type>
            <res-auth>Container</res-auth>
          </resource-ref>
          

그러나 이 값을 커스터마이즈하기 위해 배치 디스크립터를 변경할 필요는 없습니다.

<Resource> 엘리먼트에서는 다음과 같은 속성들을 사용할 수 있습니다:

속성설명
auth

해당 자원관리자에 인증(sign on)할 때, 웹어플리케이션 프로그램의 코드상에서 직접 할지, 또는 컨테이너가 직접 어플리케이션의 행위(behalf)에 따라 할지를 지정합니다. 이 속성의 값은 반드시Application 또는 Container 중 하나여야 합니다. 이 속성은, 웹어플리케이션이 웹어플리케이션 배치 디스크립터에서 <resource-ref> 엘리먼트를 사용하는 경우에는 반드시 필요합니다. 그러나<resource-env-ref>를 대신 사용하는 경우에는 선택사항입니다.

description

(선택사항)이 자원에 대한 사람이 읽기 쉬운 간단한 설명

name

생성할 자원의 이름. java:comp/env 컨텍스트에 대한 상대적인 이름입니다.

scope

이 자원관리자를 통해 얻어진 연결(connection)의 공유를 허가할 것인지 지정합니다. 이 속성의 값은 반드시 Shareable 또는 Unshareable 중 하나여야 합니다. 지정하지 않으면 연결은 공유가능(shareable)이 됩니다.

type

웹어플리케이션이 이 자원에 대해 탐색(lookup)을 실행할 때 기대하는 완전한 Java 클래스명.

자원 파라미터(Resource Parameters)

이 엘리먼트는 웹어플리케이션에서 해당 자원의 이름에 대해 JNDI 탐색을 수행할 때, 객체를 반환하는데 사용할 자원관리자(또는 객체팩토리)를 설정하는 역할을 합니다. $CATALINA_HOME/conf/server.xml의 <Context><DefaultContext> 엘리먼트 내의 <Resource> 엘리먼트로 지정된 모든 자원 이름, 그리고/또는 웹어플리케이션 배치 디스크립터에서 <resource-ref> 나 <resource-env-ref> 엘리먼트에서 선언된 모든 자원 이름에 대해서는반드시 자원 파라미터(resource parameters)를 정의해야 그 자원에 성공적으로 액세스할 수 있습니다.

자원 파라미터는 이름으로 정의되며, 정확하게 어떤 파라미터 이름들의 집합을 지원하는가는 당신이 사용하고 있는 자원관리자(또는 객체팩토리)에 따라 달라집니다. 즉 해당 팩토리 클래스의 JavaBeans 프로퍼티 중 설정가능한(settable) 프로퍼티의 이름과 일치해야 합니다. JNDI 구현체는 지정한 팩토리 클래스의 인스턴스에 대해 JavaBeans의 모든 해당 속성 설정메소드를 호출함으로써 모든 설정을 마친 다음에야, 이 팩토리 인스턴스를 JNDI lookup() 호출을 통해 사용가능하도록 할 것입니다.

예로 JDBC 데이터 소스에 대한 자원 파라미터 설정은 아래와 같이 됩니다:

          <Context ...>
            ...
            <ResourceParams name="jdbc/EmployeeDB">
              <parameter>
                <name>driverClassName</name>
                <value>org.hsql.jdbcDriver</value>
              </parameter>
              <parameter>
                <name>url</name>
                </value>jdbc:HypersonicSQL:database</value>
              </parameter>
              <parameter>
                <name>user</name>
                <value>dbusername</value>
              </parameter>
              <parameter>
                <name>password</name>
                <value>dbpassword</value>
              </parameter>
            </ResourceParams>
            ...
          </Context>
          

만약 특정 자원 타입에 대해 팩토리 클래스의 Java 클래스명을 지정할 필요가 있다면, <ResourceParams> 엘리먼트 내의 <parameter> 항목에 factory라는 이름을 사용하면 됩니다.

<ResourceParams> 엘리먼트가 가질 수 있는 속성은 다음과 같습니다:

속성설명
name

설정할 자원의 이름이며, java:comp/env 컨텍스트에 대한 상대적인 이름이 됩니다. 이 이름은$CATALINA_HOME/conf/server.xml 내에 <Resource> 엘리먼트로 정의된 자원, 그리고/또는 웹어플리케이션 배치 디스크립터 내에 <resource-ref> 또는 <resource-env-ref>로 참조되는 자원의 이름과 반드시일치해야 합니다.

자원링크(Resource Links)

이 엘리먼트는 어떤 전역 JNDI 자원으로의 링크를 생성하는데 사용합니다. 그 연결명에 대하여 JNDI 탐색을 실행하면 링크된 전역자원이 반환됩니다.

예를 들어 다음과 같이 자원링크를 생성할 수 있습니다:

          <Context ...>
            ...
            <ResourceLink name="linkToGlobalResource"
                      global="simpleVal!ue"
                      type="java.lang.Integer"
            ...
          </Context>
          

<ResourceLink> 엘리먼트가 가질 수 있는 속성은 다음과 같습니다:

속성설명
global

전역 JNDI 컨텍스트내의 링크된 전역자원의 이름.

name

생성할 자원링크의 이름이며, java:comp/env에 대한 상대적인 이름입니다.

type

이 자원링크에 대해 탐색을 실행할 때 웹어플리케이션이 기대하는 완전한 Java 클래스명.

출처: http://choris.springnote.com/pages/1016402



Posted by linuxism
,