반응형
반응형
반응형


SAXParseException

<,&는 태그에만 사용가능하고 데이터로 사용 불가능 하다.

& => &amp;

반응형

'프로그래밍 > Java' 카테고리의 다른 글

ajax, jsp 에서 한글 깨짐 문제.  (1) 2009.04.23
서블릿 설정  (0) 2009.04.09
inputStream <-> String  (0) 2009.03.03
jstl 예제 - fn, fmt, foreach  (2) 2009.02.18
JSTL  (0) 2009.02.18
반응형
inputStream -> String

StringBuffer out = new StringBuffer();
     byte[] b = new byte[4096];
     for (int n; (n = inputStream.read(b)) != -1;) {
         out.append(new String(b, 0, n));
     }
  out.toString();

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

String -> inputStream

  InputStream bai = new ByteArrayInputStream(out.toString().getBytes("UTF-8"));
반응형

'프로그래밍 > Java' 카테고리의 다른 글

서블릿 설정  (0) 2009.04.09
[xml] xml parsing - SAXParseException  (0) 2009.03.13
jstl 예제 - fn, fmt, foreach  (2) 2009.02.18
JSTL  (0) 2009.02.18
[이클립스] JVM 메모리 용량 세팅  (0) 2009.02.11
반응형

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

${fn:length(group.value) }

${fn:substring(str, 0, 10) }

 

<fmt:parseNumber var="res" value="${a%b}" integerOnly="true" />

 

<c:forEach var="val" items="${list}" varStatus="stat">
${capaStatus.index} 0 부터 시작.
${capaStatus.count} 1 부터 시작.

반응형

'프로그래밍 > Java' 카테고리의 다른 글

[xml] xml parsing - SAXParseException  (0) 2009.03.13
inputStream <-> String  (0) 2009.03.03
JSTL  (0) 2009.02.18
[이클립스] JVM 메모리 용량 세팅  (0) 2009.02.11
[JSTL] 사용법  (0) 2009.02.11
반응형


설정#

web.xml

<taglib>
     <taglib-uri>jstl-c</taglib-uri>
     <taglib-location>/WEB-INF/tlds/jstl/c.tld</taglib-location>
</taglib>
<taglib>
     <taglib-uri>jstl-fmt</taglib-uri>
     <taglib-location>/WEB-INF/tlds/jstl/fmt.tld</taglib-location>
</taglib>
<taglib>
    <taglib-uri>jstl-fn</taglib-uri>
    <taglib-location>/WEB-INF/tlds/jstl/fn.tld</taglib-location>
</taglib>

 

jsp 에서

<%@ taglib uri="jstl-c" prefix="c" %>

<%@ taglib uri="jstl-fmt" prefix="fmt" %>

<%@ taglib uri="jstl-fn" prefix="fn" %>

 

EL#
  1. 생존범위 속성 맵

    1. pageScope 
    2. requestScope 
    3. sessionScope 
    4. applicationScope 
  2. 요청 파라미터 맵 

    1. param 
    2. paramValues 
  3. 요청 헤더 맵 

    1. header 
    2. headerValues 
  4. 쿠키 맵 

    1. cookie 
  5. 컨텍스트 초기화 파라미터 맵(서블릿 초기화 파라미터 아님) 

    1. initParam 
  6. 실제 pageContext 객체에 대한 참조. 이것은 빈임

    1. pageContext

      1. pageContext 접근자

        1. getErrorData() 
        2. getPage() 
        3. getRequest() 
        4. getResponse() 
        5. getServletConfig)() 
        6. getServletContext() 
        7. getSession() 
      2. JspContext로 부터 상속받은 접근자

        1. getAttribute() 
        2. getAttributeNamesInScope() 
        3. getAttributesScope()
        4. getExpressionEvaluator() 
        5. getOut() 
        6. getVariableResolver() 



스크립팅

  1. <$= request.getHeader("host") %>

EL 내장 객체

  1. ${header["host"]}
  2. ${header.host}
  3. ${headerValues.host[]}


스크립팅

  1. <%= request.getMethod() %>

EL 내장 객체

  1.  ${pageContext.request.method}


core#

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

  • 일반적인 것 

    • <c:out> 
    • <c:set> 
    • <c:remove> 
    • <c:catch> 
  • 조건

    • <c:if> 
    • <c:choose> 
    • <c:when> 
    • <c:otherwise> 
  • URL 관련

    • <c:import> 
    • <c:url> 
    • <c:redirect> 
    • <c:param> 
  • 반복

    • <c:forEach> 
    • <c:forEachToken> 



① set
     - JSP의 setAttribute()와 같은 역활
     - 기본형
       <c:set   var="변수명"
                    value="변수명에 할당된 값"
                    target="자바빈 객체명이나 Map 객체명"
                    property="자바빈 객체나 Map 객체의 값을 설정할 프로퍼티 명"
                    scope="변수의 공유 범위(유효기간)으로 page|request|session|application" />
     - 예제
          <c:set var="country" value="${'Korea'}" />
          <c:set var="intArray" value="<%=new int[] {1,2,3,4,5}%>" />
          <c:set var="sum" value="${sum+i}" />
 
② out
     - JSP의 표현식을 대체하는 것으로 많이 사용됨
     - 기본형
          <c:out var="변수명"
                    default="기본값"
                    escapeXML="true|false" />
 
     * escapeXML
     > 생략시 기본값은 true
     > true일 경우 값 중에 포함된 <>&'" 문자들을 각각 &lt;, &gt;, &amp;, &#039;, &#034;로 출력

     - 예제
          <c:out value="${sum}" />
          <c:out value="${val}" />
 
③ remove
     - JSP의 removeAttribute()와 같은 역활
     - 기본형
          <c:remove var="변수명"
                              scope="변수의 공유 범위로 page(생략 시 기본)|request|session|application" />
     - 예제
          <c:remove var="browser" />
 
④ catch
     - body 위치에서 실행되는 코드의 예외를 잡아내는 역할
     - 기본형
          <c:catch var="에러가 발생할 때 에러 메세지가 포함될 변수명" />
     - 예제
          <c:catch var="errmsg">
               line 1~
               <%=1/0%>
               line 2~
          </c:catch>
          <c:out value="${errmsg}" />
 
⑤ if
     - 조건문에 사용
     - 기본형
          <c:if   test="조건 판별식"
                    var="변수명"
                    scope="변수의 공유범위 page|request|session|application"
     - 예제
          <c:if test="${country != null}">
               국가명 : <c:out value="${country}" />
          </c:if>
 
⑥ choose
     - 자바의 switch문과 동일
     - 조건에서 문자열 비교가 가능
     - 하나 이상의 <when>과 하나의 <otherwise> 서브 태그를 가짐
 
⑦ when
     - choose 태그의 서브태그
     - choose 태그내에서 여러번 사용될 수 있다.
     - 기본형
          <c:when test="조건 판별식" />
 
⑧ otherwise
     - choose 태그의 서브태그
     - choose 태그내에서 한번만 사용될 수 있다.
     - 예제 :
          <c:choose>
               <c:when test="${country == 'Korea'}">
               나라 : <c:out value="${country}" />
          </c:when>
 
          <c:when test="${country == 'Canada'}">
               나라 : <c:out value="${country}" />
          </c:when>
   
          <c:otherwise>
               선택된 나라가 없습니다.
          </c:otherwise>
     </c:choose>
 
⑨ forEach
     - 객체 전체에 걸쳐 반복 실행할 때 사용
     - 기본형
          <c:forEach   items="반복할 객체명"
                              begin="시작값"
                              end="종료값"
                              step="증가값"
                              var="변수명"
                              varStatus="별도의 변수" />

⑩ forTokens
     - 문자열을 주어진 구분자(delimiter)로 분할
     - 기본형
          <c:forTokens items="반복할 객체명"
                              delims="구분자"
                              begin="반복할 시작값"
                              end="반목 마지막값"
                              step="증가값"
                              var="변수명"
                              varStatus="별도의 변수"
     - 예제
          <c:forTokens var="color" items="빨강색,주황색.노란색.초록색,파랑색,남색.보라색" delims=",.">
               color : <c:out value="${color}" /><br>
          </c:forTokens>
 
⑪ import
 - 웹 어플리케이션 내부의 자원 및 http, ftp와 같은 외부에 있는 자원에 대해 접근
 - 기본형
  <c:import url="읽어올 URL"
     var="읽어올 데이터를 저장할 변수명"
     scope="변수의 공유 범위"
     varReader="리소스의 내용을 Reader 객체로 읽어올 때 사용"
     charEncoding="읽어온 데이터의 캐릭터셋 지정" />
 
⑫ redirect
     - response.sendRedirect()를 대체하는 태그로 지정한 다른 페이지로 이동
     - 기본형
          <c:redirect url="이동할 URL" />
 
⑬ url
     - 쿼리 파라미터로 부터 URL 생성
     - 기본형
          <c:url var="생성한 URL이 저장될 변수명"
                    value="생성할 URL"
                    scope="변수의 공유 범위" />
 
⑭ param
     - 기본형
          <c:param name="파라미터 명"
                         value="파라미터 값" />
               <c:url var="registrationURL" value="/customers/register">
               <c:param name="name" value="${param.name}" />
               <c:param name="country" value="${param.country}" />
          </c:url>


<c:set var="temp" value="Hello!&nbsp;World" />
<c:out value="${ temp }" default="value is null"/><br>
<c:out value="${ temp }" default="value is null" escapeXml="false" /><br>
<c:out value="${ temp2 }" default="value is null" /><br>

<c:remove var="timezone" scope="session"/>
<c:set var="timezone" scope="session">CST</c:set>

<c:out value="${cookie['tzPref'].value}" default=="CST"/>


function#

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>


${fn:substring(name, 1, 10)}


fn:contains(string, substring)  
string이 substring을 포함하면 true 리턴. 

fn:containsIgnoreCase(string,substring)
대소문자에 관계없이, string이 substring을 포함하면 true 리턴. 

fn:endsWith(string, suffix)   
string이 suffix로 끝나면 true 리턴. 

fn:escapeXml(string)    
string에 XML과 HTML에서 특별한 의미를 가진 문자들이 있으면, XML 엔티티 코드로 바꿔준 뒤 문자열 리턴. 

fn:indexOf(string,substring)  
string에서 substring이 처음으로 나타나는 인덱스 리턴. 

fn:join(array, separator)
   
array(배열) 요소들을 separator를 구분자로 하여 연결해서 리턴 

fn:length(item)
      
item 이 배열이나 컬렉션이면 요소의 갯수를, 문자열이면 문자의 갯수를 리턴. 

fn:replace(string, before, after)
 
string 내에 있는 before 문자열을 after 문자열로 모두 바꿔서 리턴. 

fn:split(string, separator)
   
string 내의 문자열을 separator에 따라 나누어서 배열로 구성해 리턴. 

fn:startsWith(string, prefix)
  
string이 prefix로 시작하면 true 리턴. 

fn:substring(string, begin, end)
 
tring에서 begin 인덱스에서 시작해서 end 인덱스에 끝나는 부분
(end 인덱스에 있는문자 포함)의 문자열을 리턴.

fn:substringAfter(string, substring)

string에서 substring이 나타나는 이후의 부분에 있는 문자열을 리턴. 

fn:substringBefore(string, substring)

string에서 substring이 나타나기 이전의 부분에 있는 문자열을 리턴. 

fn:toLowerCase(string)
    
string을 모두 소문자로 바꿔 리턴. 

fn:toUpperCase(string)
    
string을 모두 대문자로 바꿔 리턴. 

fn:trim(string)
      
string 앞뒤의 공백(whitespace)을 모두 제거하여 리턴.


fmt#

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

  • 국제화

    • <fmt:message> 
    • <fmt:setLocale> 
    • <fmt:setTimeZone>
    • <fmt:bundle> 
    • <fmt:setBundle> 
    • <fmt:param> 
    • <fmt:requestEncoding> 
  • 포맷팅

    • <fmt:timeZone> 
    • <fmt:setTimeZone> 
    • <fmt:formatNumber> 
    • <fmt:formatDate>
    • <fmt:parseNumber> 
    • <fmt:parseData> 
    • <fmt:parseNumber> 



jstl fmt로 날짜보여줄때, pattern attribute에 의한 날짜 표현 방식들

pattern="yyyy-MM-dd aa h:mm:ss"    
2007-12-13 오전 9:36:48

pattern="yyyy-MM-dd aa hh:mm:ss"  
2007-12-13 오전 09:36:48

pattern="yyyy-MM-dd H:mm:ss"      
2007-12-13 9:36:48

pattern="yyyy-MM-dd HH:mm:ss"    
2007-12-13 09:36:48


<fmt:setLocale value="fr_CA" scope="session"/>
<fmt:setTimeZone value="Australia/Brisbane" scope="session"/>

<fmt:formatDate value="${blogEntry.created}" dateStyle="full"/>
<c:out value="${blogEntry.title}" escapeXml="false"/>
<fmt:formatDate value="${blogEntry.created}" pattern="h:mm a zz"/>
<fmt:formatNumber value="0.02" type="currency" currencySymbol="원"/>

<fmt:formatNumber value="9876543.61" type="number"/>

[type="{number|currency|percent}"]


<fmt:parseDate value="${usDateString}" parseLocale="en_US" type="both" dateStyle="short" timeStyle="short" var="usDate"/>


sql#

<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>

  • 데이터베이스 접근

    • <sql:query> 
    • <sql:update> 
    • <sql:setDataSource> 
    • <sql:param> 
    • <sql:dataParam> 



xml#

<%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x" %>

  • 코어 xml 액션 

    • <x:parse> 
    • <x:out> 
    • <x:set> 
  • xml 흐름 제어

    • <x:if> 
    • <x:choose> 
    • <x:when> 
    • <x:otherwise> 
    • <x:forEach> 
  • 변환 액션

    • <x:transform> 
    • <x:param> 


출처 : http://ebizdocs.springnote.com/pages/1327406?print=1

반응형

'프로그래밍 > Java' 카테고리의 다른 글

inputStream <-> String  (0) 2009.03.03
jstl 예제 - fn, fmt, foreach  (2) 2009.02.18
[이클립스] JVM 메모리 용량 세팅  (0) 2009.02.11
[JSTL] 사용법  (0) 2009.02.11
StringTokenizer 와 String.split()  (0) 2009.02.11
반응형
JVM 메모리 용량 세팅.


-Xms128m -Xmx128m -XX:MaxPermSize=128m


이클립스

 Window -> Preferences -> Tomcat -> JVM Settings -> Append to JVM Parameters

에 추가.

반응형

'프로그래밍 > Java' 카테고리의 다른 글

jstl 예제 - fn, fmt, foreach  (2) 2009.02.18
JSTL  (0) 2009.02.18
[JSTL] 사용법  (0) 2009.02.11
StringTokenizer 와 String.split()  (0) 2009.02.11
JSTL fmt  (0) 2009.02.11
반응형

▣ JSTL(JSP Standard TAG Library)의 사용
   - 많이 사용되는 사용자 정의 태그를 모아서 JSTL이라는 규약이 만들어졌습니다. 
   - 스크립틀릿, 표현식을 사용하는 것보다 훨씬 간결한 문법 구조를 지원합니다.
   - JSTL은 5가지의 태그를 지원합니다.
    라이브러리    기능                                 접두어    관련 URL
   -----------------------------------------------------------------------------------------------
   Core          변수지원, 흐름 제어, URL 처리        c         http://java.sun.com/jsp/jstl/core
   XML           XML 코어, 흐름 제어, XML 변환        x         http://java.sun.com/jsp/jstl/xml
   국제화        지역, 메시지 형식, 숫자 및 날짜 형식 fmt       http://java.sun.com/jsp/jstl/fmt
   데이터베이스  SQL                                  sql       http://java.sun.com/jsp/jstl/sql
   함수          콜렉션 처리, String 처리             fn        http://java.sun.com/jsp/jstl/functions

 

1. 설치(JSTL을 사용하기 위한 환경)
   - http://jakarta.apache.org/taglibs/doc/standard-doc/intro.html
     . Standard Taglib nightly snapshot에서 다운합니다.

   - 압축을 해제한 후 "F:\JAVA\jstl\jakarta-taglibs-standard-20050804\jakarta-taglibs\standard\lib"폴더안
     에 있는'jstl.jar', 'standard.jar'파일을 "D:\tomcat-5.0.19\common\lib" 폴더로 복사합니다.

 

 

 

▩ Core Tag

기능        태그명     기능설명
---------------------------------------------------------------------------
변수 지원   set        jsp에서 사용될 변수를 설정합니다.
            remove     설정한 변수를 제거합니다.
---------------------------------------------------------------------------
흐름 제어   if         조건에 따라 내부 코드를 수행합니다.
            choose     다중 조건을 처리할 때 사용됩니다.
            forEach    Collection의 각 항목을 처리할 때 사용합니다.
            forTokens  구분자로 분리된 각각의 토큰을 처리할 때 사용합니다.
---------------------------------------------------------------------------
URL 처리    import     URL을 사용하여 다른 자원의 결과를 삽입합니다.
            redirect   지정한 경로로 이동합니다.
            url        URL을 재 작성합니다.
---------------------------------------------------------------------------
기타 태그   catch      예외 처리에 사용합니다.
            out        jspWriter에 내용을 알맞게 처리한 후 출력합니다.
---------------------------------------------------------------------------

 

 

 

▩ EL & JSTL의 사용 - Core Tag: 변수 지원 태그의 사용

1. 변수지원 태그, http://127.0.0.1:8080/jstl/setTag.jsp
<%@ page contentType = "text/html; charset=euc-kr" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="num1" value="${20}" />
<c:set var="num2">
10.5
</c:set>
<c:set var="today" value="<%= new java.util.Date() %>" />
<html>
<head>
    <title>set 태그와 remove 태그</title>
</head>
<body>
변수 num1 = ${num1} <br>
변수 num2 = ${num2} <br>
num1 + num2 = ${num1 + num2} <br>
오늘은 ${today} 입니다.

<c:remove var="num1" scope="page" />

<p>
삭제한 후의 num1 = ${num1} <br>
삭제한 후의 num1 + num2 = ${num1 + num2}
</body>
</html>

 

 


2. Map 객체의 사용, http://127.0.0.1:8080/jstl/setTag2.jsp
<%@ page contentType = "text/html; charset=euc-kr" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="map" value="<%= new java.util.HashMap() %>" />
<html>
<head>
    <title>set 태그와 remove 태그</title>
</head>
<body>
<c:set target="${map}" property="name" value="왕눈이" />

변수 map에 저장된 name 값: ${map.name}

</body>
</html>

 

 

 

▩ EL & JSTL의 사용 - Core Tag: 흐름 제어 태그의 사용

1. if 흐름제어 태그의 사용
   - http://127.0.0.1:8080/jstl/ifTag.jsp
   - http://127.0.0.1:8080/jstl/ifTag.jsp?name=tree
   - http://127.0.0.1:8080/jstl/ifTag.jsp?name=tree&age=25
   - 한글은 비교가 안됩니다.

<%@ page contentType = "text/html; charset=euc-kr" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head><title>if 태그</title></head>
<body>
<c:if test="true">
무조건 수행<br>
</c:if>

<c:if test="${param.name == 'tree'}">
name 파라미터의 값이 ${param.name} 입니다.<br>
</c:if>

<c:if test="${18 < param.age}">
당신의 나이는 18세 이상입니다.
</c:if>
</body>
</html>

 

 


2. choose Tag
   - when tag는 조건이 true이면 실행합니다.
   - http://127.0.0.1:8080/jstl/chooseTag.jsp

<%@ page contentType = "text/html; charset=euc-kr" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head><title>choose 태그</title></head>
<body>

<ul>
<c:choose>
  <c:when test="${param.name == 'bk'}" >
    <li> 당신의 이름은 ${param.name} 입니다.
  </c:when>
  <c:when test="${param.age > 18}" >
    <li> 당신은 18세 이상입니다.
  </c:when>
  <c:otherwise>
    <li> 당신은 'bk'가 아니고 18세 이상이 아닙니다.
  </c:otherwise>
</c:choose>
</ul>

</body>
</html>

 

 


3. forEach 태그
   - Collection, Map, 배열에 저장되어 있는 값에 순차적으로 접근시에 사용합니다.
   - http://127.0.0.1:8080/jstl/forEachTag.jsp

<%@ page contentType = "text/html; charset=euc-kr" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
    java.util.HashMap mapData = new java.util.HashMap();
    mapData.put("name", "아로미");
    mapData.put("today", new java.util.Date());
%>
<c:set var="intArray" value="<%= new int[] {1,2,3,4,5} %>" />
<c:set var="map" value="<%= mapData %>" />
<html>
<head><title>forEach 태그</title></head>
<body>
<h4>1부터 100까지 홀수의 합</h4>
<c:set var="sum" value="0" />
<c:forEach var="i" begin="1" end="100" step="2">
<c:set var="sum" value="${sum + i}" />
</c:forEach>
결과 = ${sum}

<h4>구구단: 4단</h4>
<ul>
<c:forEach var="i" begin="1" end="9">
   <li>4 * ${i} = ${4 * i}
</c:forEach>
</ul>

<h4>int형 배열</h4>

<c:forEach var="i" items="${intArray}" begin="2" end="4">
    [${i}]
</c:forEach>

<h4>Map</h4>

<c:forEach var="i" items="${map}">
    ${i.key} = ${i.value}<br>
</c:forEach>

</body>
</html>

 

 


4. forTokens Tag
   - http://127.0.0.1:8080/jstl/forTokensTag.jsp
<%@ page contentType = "text/html; charset=euc-kr" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<html>
<head><title>forTokens 태그</title></head>
<body>

콤마와 점을 구분자로 사용:<br>
<c:forTokens var="token"
             items="빨강색,주황색.노란색.초록색,파랑색,남색.보라색"
             delims=",.">
${token}
</c:forTokens>

</body>
</html>


반응형

'프로그래밍 > Java' 카테고리의 다른 글

JSTL  (0) 2009.02.18
[이클립스] JVM 메모리 용량 세팅  (0) 2009.02.11
StringTokenizer 와 String.split()  (0) 2009.02.11
JSTL fmt  (0) 2009.02.11
배열 정렬.  (0) 2009.02.11
반응형
StringTokenizer 와 String.split()
가끔씩 StringTokenzer를 사용해서 문자열을 분해 할 때 특정 요소의 값이 없을 경우 처리하는 것에 대한 질문을 받아서 문자열을 특정 구분자를 기준으로 분해 하는 것에 대해 정리를 해봤습니다.

jdk1.4.x를 기준으로 정리한 것입니다.

잘 못 된 부분이 있으면 지적 해주십시요.

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

특정 구분자(경계기호:Delimter)를 기준으로 문자열을 분해 할 때 흔히 사용하는 방법이 java.util.StringTokenizer를 이용해서 분해를 하거나 jdk1.4대에 새로 추가 된 java.lang.String.split(String regex)을 사용하는 방법입니다.



이들 둘은 "문자열에서 특정 구분자를 기준으로 문자열을 분해 한다"는 기본 기능은 같지만 그 결과는 "분해 할 문자열이 어떻게 구성이 되어 있느냐"에 따라서 서로 다른 결과값을 도출합니다.



예를 살펴보기 위해서 다음과 같은 가정을 하겠습니다.

분해 할 문자열은 "아이디, 이름, 전자우편주소,휴대전화"로 구성 된다.
"아이디, 이름" 이외의 항목은 있을 수도 있고 그렇지 않을 수도 있다.
각 항목을 구분하는 구분자는 ","로 한다.
1. 먼저 각 항목이 모두 존재 하는 경우를 살펴 보겠습니다. 이 경우라면 다음과 같은 형태가 될 것입니다.

neoburi,inkuk,neoburi@neoburi.com,019-366-5815
이 경우는 다음과 같이 분해를 할 수 있을 것입니다.

String str = "neoburi,inkuk,neoburi@neoburi.com,019-366-5815";

String[] values = str.split(",");

또는,

StringTokenizer values = new StringTokenizer( str, "," );

이 때에는 String.split(String regex)이나 StringTokenizer의 결과 값은 같게 나옵니다.



그런데 문제는 이렇게 모든 항목이 존재하지 않는 경우가 있을 때입니다.




2. 일부 항목만으로 문자열이 구성 된 경우를 살펴 보겠습니다.



예를 든다면 다음과 같은 값을 가질 때겠지요.

"아이디,이름,,전화번호" 일 경우
"아이디,이름,전자우편," 일 경우
또는 "아이디,이름,," 일 경우
1) "아이디,이름,,전화번호" 일 경우를 살펴 보겠습니다.

문자열은 다음과 같이 구성이 될 것입니다.



String str = "neoburi,inkuk,,019-366-5815";



String[] values = str.split(",");을 사용 할 경우 해보면 결과는 아래와 같습니다.
for( int x = 0; x < values.length; x++ ){

System.out.println( "문자(열) " + (x+1) + " : " + values[x] );

}



결과 :

문자(열) 1 : neoburi

문자(열) 2 : inkuk

문자(열) 3 :

문자(열) 4 : 019-366-5815



StringTokenizer tokens = new StringTokenizer( str, "," );를 사용 할 경우
for( int x = 1; tokens.hasMoreElements(); x++ ){

System.out.println( "문자(열) " + x + " : " + tokens.nextToken() );

}



결과 :

문자(열) 1 : neoburi

문자(열) 2 : inkuk

문자(열) 3 : 019-366-5815



결과와 같이 split(String regex)을 이용한 경우에는 비록 값이 존재하지 않더라고 해당 데이터가 없다는 것을 확실하게 판단을 할 수 있습니다. 즉 구분자를 기준으로 데이터가 없는 부분도 그 결과를 반환해준다는 얘기지요.



그렇지만 StringTokenizer는 비록 구분자로 문자열간 구분이 되어 있더라도 구분자와 구분자 사이에 데이터가 존재하지 않으면 (",,"의 경우) 해당 데이터는 무시를 하고 실제 값이 존재하는 부분만 값을 반환합니다.



두 결과 사이에는 많은 차이가 남을 볼 수 있습니다.

2) "아이디,이름,전자우편," 일 경우

이 역시 문자열은 다음과 같이 구성이 될 것입니다.



String str = "neoburi,inkuk,neoburi@neoburi.com,";



String[] values = str.split(",");
for( int x = 0; x < values.length; x++ ){

System.out.println( "문자(열) " + (x+1) + " : " + values[x] );

}



결과 :

문자(열) 1 : neoburi

문자(열) 2 : inkuk

문자(열) 3 : neoburi@neoburi.com



StringTokenizer tokens = new StringTokenizer( str, "," );
for( int x = 1; tokens.hasMoreElements(); x++ ){

System.out.println( "문자(열) " + x + " : " + tokens.nextToken() );

}

결과 :

문자(열) 1 : neoburi

문자(열) 2 : inkuk

문자(열) 3 : neoburi@neoburi.com



위에서 보는 바와 같이 분해하고자 하는 문자열의 마지막 요소가 존재하지 않을 경우 String.split(String regex)과 StringTokenizer는 같은 결과를 보여줍니다.



두 결과사이에는 차이가 없음에도 불구하고 잃어 버리는 데이터가 생겼습니다. 개발자는 분명히 사용자의 정보로부터 4개의 항목을 얻어 표현을 하고 싶지만 그렇게 할 수가 없습니다. 물론 어거지로 한다면 가능은 하겠지만요.^^



그러면 String.split(String regex)과 StringTokenizer를 사용 하더라고 분해하고자 하는 마지막 항목이 없을 경우는 분해 할 방법이 없을까요? 그렇지 않습니다.



API를 어느정도 보신 분들이라면 아마 "그것은 이렇게 하면 되지!"라고 속으로 생각 하실 겁니다.



java.lang.String클래스에는 split()메소드가 2개가 있습니다.

하나는 split( String regex )이고
다는 하나는 split( String regex, int limit )입니다.
String.split( String regex, int limit )를 사용해서 분해를 해보겠습니다.

String[] values = str.split(",", 4);
for( int x = 0; x < values.length; x++ ){

System.out.println( "문자(열) " + (x+1) + " : " + values[x] );

}



결과 :

문자(열) 1 : neoburi

문자(열) 2 : inkuk

문자(열) 3 : neoburi@neoburi.com

문자(열) 4 :



비록 마지막 분해 요소의 값이 존재하지 않더라고 split( String regex, int limit )를 이용하면 고스란히 원하는 형태의 데이터를 얻는 것을 볼 수 있습니다.


StringTokenizer의 경우는 구분자 사이에 분해할 요소의 값이 존재하지 않으면 무시하게 되어 있습니다. 완전하게 모든 요소의 값이 존재하는 경우라면 사용을 해도 되겠지만 예에서 본 바와 같이 가변적인 데이터라면 사용하기 불편한(?) 것이 사실입니다.




String.split()의 경우 limit를 저정 하지 않았을 경우에는 제일 마지막에 오는 요소의 값이 없을 경우 그 요소를 무시하도록 되어 있습니다. 이 역시 데이터가 정형화 되어 있는 경우라면 사용해도 무리 없겠지만 가변요소가 존재 한다면 StringTokenizer와 크게 다를 게 없습니다.



대신 limit를 지정 했을 경우 해당 숫자만큼만 분해를 합니다. limit는 분해를 한 후 얻고자 하는 String[]의 요소크기라고 보시면 됩니다.

limit가 분해하고자 하는 요소의 개수와 같거나 클 경우 요소의 개수만큼의 String[]을 되돌려 주지만, 요소의 개수보다 작을 경우 지정한 숫자만큼의 String[]으로 되돌려 줍니다.

반응형

'프로그래밍 > Java' 카테고리의 다른 글

[이클립스] JVM 메모리 용량 세팅  (0) 2009.02.11
[JSTL] 사용법  (0) 2009.02.11
JSTL fmt  (0) 2009.02.11
배열 정렬.  (0) 2009.02.11
UTF-8 개발에 관한 정리  (0) 2009.02.11
반응형
JSTL

날짜 포멧..
<fmt:parseDate value='2007-11-11' var='contStartDate' pattern='yyyy-MM-dd'/>
<fmt:formatDate value='${contStartDate}' pattern='yyyyMMdd'/>



숫자 포멧.
<fmt:formatNumber type="number" maxFractionDigits="0" minFractionDigits="0" value="${item.price}" />

반응형

'프로그래밍 > Java' 카테고리의 다른 글

[JSTL] 사용법  (0) 2009.02.11
StringTokenizer 와 String.split()  (0) 2009.02.11
배열 정렬.  (0) 2009.02.11
UTF-8 개발에 관한 정리  (0) 2009.02.11
Request 내부 객체  (0) 2009.02.11
반응형
배열 정렬 함수.

ex)

String[] arr;

Arrays.sort(arr);

오름차순으로 정열됨.

^^

반응형

'프로그래밍 > Java' 카테고리의 다른 글

StringTokenizer 와 String.split()  (0) 2009.02.11
JSTL fmt  (0) 2009.02.11
UTF-8 개발에 관한 정리  (0) 2009.02.11
Request 내부 객체  (0) 2009.02.11
JSP 액션, 선언, 스크립트릿  (0) 2009.02.11
반응형
UTF-8 개발에 관한 정리입니다.

1. 모든 문서는 UTF-8 인코딩으로 저장되어야 합니다.

에디트 플러스의 경우 도구 -> 기본설정 -> 파일 부분에서 새 파일 형식을

UTF-8 로 해놓음으로써 새파일 작성시 UTF-8을 기본으로 작성할수 있고,

이미 다른 인코딩 타입에서 작성된 문서인 경우 내용을 모조리 Ctrl+C로 복사후

문서 -> 인코딩 변경 로드에서 UTF-8로 변경후 다시 붙여넣기 하면 됩니다.

 

이클립스의 경우 Package Explorer 에서 프로젝트에서 우측 버튼을 누른 후

Properties->Info->Text file encoding->Other 을 UTF-8 로 잡아주면 됩니다.

( 기존 다른 인코딩 타입에서 작성된 문서 내부 한글은 모조리 깨지게 됨 )

 

* ascii 로 작성된 자바스크립트 파일을 utf 문서에서 불러와 수행시킬 경우

자바스크립트 에러 나는 문제도 있더군요.(한글 주석이 영향을 줬을수도...)

 

2. jsp 파일 상단에는 다음과 같은 방식으로 UTF-8 설정합니다.

<%@ page contentType = "text/html;charset=utf-8" %>

 

3. 서블릿은 다음과 같은 방식으로 UTF-8을 설정합니다.

request.setCharacterEncoding("utf-8")

 

4. 자바스크립트에서 encodeURIComponent 처리 및 톰캣 server.xml 의 설정 변경

위 1,2,3번의 방식으로 하면 post 방식의 데이터는 잘 받지만

get 방식의 데이터는 한글이 깨집니다.

이와 같은 경우 자바스크립트의 encodeURIComponent 함수와

server.xml 을 이용하여 처리하면 됩니다.

 

4.1 server.xml

톰캣 폴더의 conf 폴더에는 server.xml 파일이 존재합니다.

에디터로 열어보면

 

예)

    <Connector port="8080" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               connectionTimeout="20000" disableUploadTimeout="true" />

 

값이 약간 틀릴수 있지만 초기 셋팅 값이 보통 저러하고,

Connector 은 초기에 2개가 있는데 8080 포트 부분을 수정하면 됩니다.

수정하는 방법은

URIEncoding="UTF-8" 을 추가하면 됩니다.

 

예)

    <Connector port="8080" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="utf-8" />

 

위와 같이 했다고 해결되는 것은 아닙니다. get 방식으로 데이터를 전송하면

자바 파일에서 확인 했을 경우 물음표 값만 넘어옵니다.

 

get 방식으로 보낼 경우 자바스크립트로 변환을 해줍니다.

예를 들어 "한글"을 자바스크립트에서

<SCRIPT>alert( encodeURIComponent("한글") )</SCRIPT>

처럼 encodeURIComponent 함수로 변환하게 되면 %ED%95%9C%EA%B8%80 으로

변환됩니다. 이 값을 주소에 "한글" 대신에 넣게 되면 자바에서 알아서 잘~ 받습니다 ^^

 

5. HttpURLConnection 을 통하여 UTF-8 로 된 URL 을 읽을 경우.

다른 부분은 동일하고, 

BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));

로 변경합니다.

 

6. jsp -> bean 데이터 전송은 문제 없지만 jsp -> jsp 에서 한글이 깨진다면

받는 부분에서

 String test = request.getParameter("test ");

 test = new String(test .getBytes("8859_1"), "UTF-8");

처럼 변환해서 저장합니다.

 

ps. 참고 사이트

http://cafe.naver.com/phpinfo.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=434


반응형

'프로그래밍 > Java' 카테고리의 다른 글

JSTL fmt  (0) 2009.02.11
배열 정렬.  (0) 2009.02.11
Request 내부 객체  (0) 2009.02.11
JSP 액션, 선언, 스크립트릿  (0) 2009.02.11
파일 다운로드 구현할때 한글 이름 깨지는 문제..  (0) 2009.02.11

+ Recent posts