Carpe diem  
  Front Page
Notice | Tag | Location | Guestbook | Admin   
 
'jsp'에 해당하는 글(2)
2009/06/04   JSP Get 방식 한글 parameter 처리 (3)
2007/01/22   커스텀 태그(Custom Tag) 파일


2009/06/04 11:15 2009/06/04 11:15
JSP Get 방식 한글 parameter 처리
개발을 하면서 한글과 원수 사이가 되는 것 같다.
FLEX 개발 때도, Ajax 도... 한글 처리가 항상 제일 오래 걸린다..

췟..

------------------------------------------

Tomcat 5.5 / JSP
get 방식
------------------------------------------

String strTemp= request.getParameter("server");
byte[] arr = strTemp.getBytes("iso8859_1");
String strServer = new String(arr, "euc-kr");


크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
Tag : ,


2007/01/22 12:18 2007/01/22 12:18
커스텀 태그(Custom Tag) 파일

출처 : http://kr.sun.com/developers/techtips/e2004_02_27.html

JavaServer Pages (JSP pages)의 커스텀 태그는 HTML 태그와 유사하다. 하지만 커스텀 태그는 태그와 관련된 핸들러 클래스에 의해 런타임시에 텍스트 형식의 출력값으로 대체된다. 지난 테크팁인
Using Custom Tags에서 이와 같은 클래스의 생성방법에 대해 이야기했다. 이번달의 첫번째 팁은 커스텀 태그를 구현하는 더 새롭고 쉬운 방법을 설명한다.

JSP 2.0이전에는 커스텀 태그를 생성하려면 자바 태그 핸들러 클래스로 구현하는 것이 유일한 방법이었다. 또한 핸들러 클래스 개발자는 태그를 웹 컨테이너에게 설명하는 역할을 하는 TLD파일을 생성해야만 했다. 커스텀 태그의 힘은 강력하지만 이를 이용하려면 프로그래밍 스킬이 요구되고 JSP 페이지가 어떻게 HTML로 변환하는지를 확실하게 알고 있어야 한다.

JSP 2.0 태그 파일의 새로운 기능은 비개발자도 재사용이 가능한 커스텀 태그를 작성할 수 있게 할 뿐만 아니라 프로그래머도 더 쉽게 작업할 수 있도록 도와준다. JavaServer Pages Standard Tag Library (JSTL) 과 expression language (EL)으로 이루어진 JSP 2.0 구문을 이용하면, 자바 코드를 작성할 필요없이 커스텀 태그를 생성할 수 있다.

태그 파일은 JSP 페이지에서 재사용이 가능한 컴포넌트이다. 이를 사용하면 다음과 같은 이점이 있다.

  • Scriptlets을 숨기거나 제거하는데 사용될 수 있다.
  • 자르기와 붙이기가 아닌, 레퍼런스로를 이용하여 코드를 재사용가능하도록 만든다.
  • JSP 페이지를 작성하기 쉽고, 매우 논리적이며, 유지하기 쉽도록 만든다.
  • 비개발자에 의해 작성될 수 있다.
  • 태그 파일의 구성은 자바가 아닌 HTML에 더 가깝다. 따라서 JSP 페이지는 단일 언어로 작성된 것처럼 보인다.
  • 태그 파일은 하이 레벨 컴포넌트를 형성하기 때문에 생산성을 높이고 개발속도를 빠르게 한다.
  • 커스텀 태그에 의해 사용되는 TLD파일은 흔히 자동적으로 생성된다.
  • 현존하는 페이지를 리팩토링하기 위해 사용될 수 있다. 코드의 공통 부분은 애플리케이션 뷰간에 공유되는 태그 파일로 통합될 수 있다.

태그 파일이 커스텀 태그 핸들러 클래스를 완벽하게 대체하지는 못한다. 태그 파일은 재사용이 가능한 컨텐츠를 관련된 레이아웃과 프리젠테이션으로 캡슐화할 때 적합하다. 반면 커스텀 태그는 JSP페이지에서 애플리케이션 로직(logic)을 재사용할 때 더 효과적이다. 가령, 페이지 헤더와 풋터(꼬리말)는 태그 파일을 위한 최적의 애플리케이션이다. 이와 비교해서 JSTL의 커스텀 태그는 자바 언어 핸들러 클래스로서 구현된다.

태그 파일의 특징

태그 파일은 사실 태그 핸들러 클래스로 번역/컴파일된다. 태그 핸들러와 태그 핸들러 클래스의 단 한가지 다른 점은 태그 핸들러는 JSP 구문으로 쓰여지고 태그 핸들러 클래스는 자바 언어로 작성된다는 점이다.

JSP 2.0-compliant 컨테이너는 웹 아카이브 디렉토리인 WEB-INF/tags내에서 태그 파일을 찾게 된다. 태그 파일은 WEB-INF/lib의 JAR 파일안에 묶일 수도 있다. JSP 페이지를 구현할 때 웹 컨테이너가 태그 파일과 관련된 태그를 마주치게 되면, 태그 파일의 JSP컨텐츠 출력값은 계산되어서 응답 스트림에 포함되게 된다. 태그 파일은 애트리뷰트를 정의할 수 있고 JSP 2.0 expression language (EL)에 대한 접근이 가능하다. 또한 태그 파일은 실행이 완료된 후에도 존재하는 EL 변수들을 생성할 수 있다.

태그 파일은 애트리뷰트 지시어를 이용해서 애트리뷰트를 선언하게 된다. 다음은 이 팁의 샘플코드로부터 발췌한 예제이다. 태그 파일은 단일 애트리뷰트 지시어로 시작한다.

<%@ attribute name="format" required="false" %>

날짜를 생성하는 태그는 위의 라인을 이용해서 컨테이너에게 가능한 "format" 애트리뷰트를 찾으라고 명령한다. 필수 애트리뷰트일 경우에는 지시어의 "required" 애트리뷰트가 "true"로 설정된다. 이 지시어들은 전개시에 웹 컨테이너가 고유의 TLD 파일을 생성하도록 해준다.

태그는 애트리뷰트를 통해서 입력값을 받는다. 태그 파일에 의해 생성되는 출력 텍스트이외에도 태그는 EL변수를 생성함으로써 데이터를 "output" 할 수 있다. 태그 파일은 다음과 같이 값을 태그 파일이 호출되었던 페이지에 값을 리턴할 수도 있다.

  
<%@ variable name-given="filesincluded" scope="AT_END" %>

"name-given"은 태그가 수행된 후, 페이지내에 설정되는 변수의 이름을 제공한다. "AT_END"는 태그 파일이 완성되면 변수가 설정된다는 것을 말한다.

태그 파일 예제

이번 샘플 코드는 지난 2002/9월의 테크팁 "Using Custom Tags"에서 작성했던 커스텀 태그를 재구현하는 태그 파일을 포함하고 있다. 오리지널 태그는 다음 세 가지 중 한가지 방법으로 서버에 날짜의 포맷을 지정한다.

  • 만약 포맷이 설정되지 않았거나 비어있다면, 태그는 디폴트 포맷으로 날짜를 프린트한다.
  • 포맷 파라미터가 $사인으로 시작되면, 태그는 스트링의 나머지 부분을 환경 엔트리의 이름으로 사용한다. 태그는 지명된 환경 엔트리를 찾아서 그것의 값을 포맷으로 사용하게 된다.
  • java.text.SimpleDateFormat과 호환되는 "format" 파라미터가 포맷 스트링을 포함하고 있다면, 스트링은 날짜의 포맷을 지정하는데 쓰이게 된다.

태그 파일에 의해 지정된 태그는 약간 다르게 작동한다. 포맷 파라미터가 $으로 시작하면, 태그는 환경 엔트리 대신 서블릿 컨텍스트 초기화 파라미터를 찾는다. (JSTL 1.0의 expression language는 환경 엔트리를 액세스할 수 있는 빌트 인 서포트를 포함하지 않았다.)

샘플 태그 파일인 date.tag는 파일이 요구하는 애트리뷰트를 정의하는 몇몇 지시어로 시작한다. 또한 이 태그가 사용하는 다른 태그 라이브러리를 위한 namespaces를 식별해내기도 한다.

<%@ attribute name="format" required="false" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>

날짜 태그 파일의 다음 블록은 포맷 스트링을 결정하기 위해 <c:choose>태그를
사용한다. <c:choose>는 JSP페이지에서 if/then/else기능을 선택하기 위한 태그이다.
처음 "when"구문은 포맷이 null이거나 비어있을 때 EL변수 "format"을 디폴트 값으로
설정하기 위한 것이다.

<c:choose>
<%-- If format is blank, set default --%>
<c:when test="${format == null or format == ''}">
<c:set var="format" value="EEEE, d MMMM yyyy 'at' kk:mm:ss z"/> </c:when> ...

"format"이 비어있는 상태가 아니라면, 그것은 "$"사인으로 시작하거나 또는 "$"으로 시작하지 않는다. 첫번째 경우에서, <choose> 태그의 <otherwise>절은 첫번째 "$"을 없애버리고 주어진 이름을 이용해서 "format" 변수의 값을 컨텍스트 파라미터의 컨텐츠로 대체하게 된다.

 
<c:otherwise>
<%-- Else if format starts with "$", look up in context param,
and set "format" to its value. --%>
<c:if test="${fn:substring(format,0,1) == '$'}">
<c:set var="format_name" value="${fn:substringAfter(format,'$')}"/>
<c:set var="format" value="${initParam[format_name]}"/>
</c:if>
<%-- Otherwise leave it as it is --%>
</c:otherwise>
</c:choose>

코멘트에 적혀있듯이, "format"이 "$"로 시작하지 않으면, 그것의 값은 변하지 않는다.
페이지의 이 지점에서, EL "format"변수의 값은 날짜의 포맷을 지정하기 위해 사용될 스트링으로 설정된다. useBean라인은 현재 시간을 나타내는 Date객체를 생성하고 fmt:formatDate 메소드는 이 날짜를 주어진 "format"에 설정하게 된다.

<%-- Now actually create and format the date --%>
<jsp:useBean id="now" class="java.util.Date"/>
<fmt:formatDate value="${now}" pattern="${format}"/>

이것으로 태그 파일이 완성되었다.
태그 파일을 이용하는 것은 더욱 간단하다. 샘플 페이지 DatePage.jsp 의 윗부분에 있는 지시어는 /WEB-INF/tags 디렉토리에 있는 모든 태그가 접두사 "mytags"를 이용해서 액세스 가능하다는 것을 말한다. 지시어는 다음과 같다.

    
<%@ taglib tagdir="/WEB-INF/tags" prefix="mytags" %>

자, 이제 JSP 태그 파일을 다른 커스텀 태그처럼 간단하게 사용할 수 있다. 샘플 페이지 DatePage.jsp에서 발췌한 코드이다.

   
The time and date at the server in the default format are <b><mytags:date/></b>.
<br>
The time zone at the server is <b><mytags:date format="zzzz"/></b>.<br>
The server date is <b><mytags:date format="M/d/yyyy"/></b>.<br>
The server time is <b><mytags:date format="hh:mm:ss a"/></b>.<br>

각각의 는 태그 파일을 호출하는 결과를 낳고, 태그는 서버에 해당 시간과 날짜를 출력하게 된다.

이 예제는 JSP태그 파일을 간단히 소개하는 것에 그친다. 사실 JSP태그 파일은 여기서 언급한 것 이상의 많은 옵션을 갖고 있다. JSP태그 파일에 대한 자세한 정보는 J2EE 1.4 튜토리얼의 "
Custom Tags in JSP Pages"장을 참고하기 바란다.

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
Tag : , ,


BLOG main image
Passionate, Crazy
 Notice
 Category
전체 (71)
여행 (22)
취미/여가 (8)
지식/공부 (28)
독서/감상 (6)
 TAGS
MEDC 결혼식 화장품 스린야시장 custom tag 날씨 여름휴가 FLEX 용어사전 NSString MP3 대만 나눔 어거스트 러쉬 의미 마우스 Mac 핸드메이드 비트 매니아 금강산 한글 Greg Oracle 미샤 가을 하고싶은것 스타 바이트 설치 호우 iphone 도전 야구 다이어리 교육 아저씨 괴물 멀티캠퍼스 휴식 아기 팝페라 시부야 일본여행 명품 대만여행정보 행복 설봉호 먹거리 ASP.NET 에반게리온 댓글 VC++ 하얏트 부동산 건강 고베 HUT 언론 타이페이역 프로그래머 선물 온라인 촛불 치산 네이버 앨빈 토플러 코코아 전시회 여행준비 오라클 MFC 호랑이 독서 해모수 뮤직비디오 Dame 이타바시혼쵸 카르멘 한글처리 고3 환형연결리스트 java 배경음악 ELS구로 댄스 호텔 월드비전 이라크 Dashboard 영상 온라인 주죠역 제거 닮은꼴 노력 아이스쇼 KC
 Calendar
«   2012/02   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29      
 Recent Entries
[Hibernate] criteria or...
[Hibernate] 중복된 row...
[freemarker] 숫자 콤마 빼기
고베의 일품 야경을 늦게...
간사이 지역 여행 준비하기
object param 값
[FLEX] Renderer를 이용하...
아이폰 SDK - md5
NSString 문자열 길이를 U...
JSP Get 방식 한글 parame... (3)
 Recent Comments
get방식으로 받은 한글이...
데잇 - 2009
당연히 해봤죠 ~ ^^; 여...
euni - 2009
request.setCharacterEnco...
꼼즈 - 2009
궁금하던 정보 잘 얻고 갑...
해피포터 - 2008
나는 언제 성장하는 거냐?
SEAN。 - 2008
받아들이는 관점에 따라...
euni - 2008
성장이 맞는 것 같지만,...
euni - 2008
거럼 뭐가 메카지? ㅋㅋㅋ...
euni - 2008
종합선물세트 아닐까요 ㅎㅎ
ho - 2008
성장만화 아니었습니까?
SEAN。 - 2008
 Recent Trackbacks
 Archive
2011/10
2010/06
2010/03
2009/09
2009/06
 Link Site
소니톤/개발/애니/여행/e-...
지식보다 지혜를...
 Visitor Statistics
Total : 185885
Today : 7
Yesterday : 44
태터툴즈 배너
rss