2009년 12월 28일 월요일

toad 사용자 지침서

 

옥희인가 암튼 어디서 받은건지 기억나지 않음

SpringSource Tool Suite Download

STS Downloads

Description Link Size Hash
Eclipse 3.5.1
Windows springsource-tool-suite-2.3.0.RELEASE-e3.5.1-win32-installer.exe 209MB sha1 - md5
Windows springsource-tool-suite-2.3.0.RELEASE-e3.5.1-win32.zip 349MB sha1 - md5
Windows (64bit) springsource-tool-suite-2.3.0.RELEASE-e3.5.1-win32-x86_64-installer.exe 209MB sha1 - md5
Windows (64bit) springsource-tool-suite-2.3.0.RELEASE-e3.5.1-win32-x86_64.zip 349MB sha1 - md5
Mac OS X (Carbon) springsource-tool-suite-2.3.0.RELEASE-e3.5.1-macosx-carbon-installer.dmg 210MB sha1 - md5
Mac OS X (Carbon) springsource-tool-suite-2.3.0.RELEASE-e3.5.1-macosx-carbon.tar.gz 344MB sha1 - md5
Mac OS X (Cocoa)* springsource-tool-suite-2.3.0.RELEASE-e3.5.1-macosx-cocoa-installer.dmg 210MB sha1 - md5
Mac OS X (Cocoa)* springsource-tool-suite-2.3.0.RELEASE-e3.5.1-macosx-cocoa.tar.gz 344MB sha1 - md5
Mac OS X (Cocoa, 64bit)* springsource-tool-suite-2.3.0.RELEASE-e3.5.1-macosx-cocoa-x86_64-installer.dmg 209MB sha1 - md5
Mac OS X (Cocoa, 64bit)* springsource-tool-suite-2.3.0.RELEASE-e3.5.1-macosx-cocoa-x86_64.tar.gz 344MB sha1 - md5
Linux (GTK) springsource-tool-suite-2.3.0.RELEASE-e3.5.1-linux-gtk-installer.sh 209MB sha1 - md5
Linux (GTK) springsource-tool-suite-2.3.0.RELEASE-e3.5.1-linux-gtk.tar.gz 345MB sha1 - md5
Linux (GTK, 64bit) springsource-tool-suite-2.3.0.RELEASE-e3.5.1-linux-gtk-x86_64-installer.sh 209MB sha1 - md5
Linux (GTK, 64bit) springsource-tool-suite-2.3.0.RELEASE-e3.5.1-linux-gtk-x86_64.tar.gz 345MB sha1 - md5

Update Site Installation

STS can also be installed from the following update sites:
  • Releases: http://www.springsource.com/update/e3.5
  • Milestone releases: http://www.springsource.com/milestone/e3.5
  • Nightly snapshots: http://www.springsource.com/snapshot/e3.5

Requirements

The following pre-requisites must be fulfilled in order to install STS:

  • Operating System: Microsoft Windows XP or Vista, Apple Mac OS X, Linux
  • Java Runtime: latest version of JDK 5 or 6 (a JRE will not be enough to use all STS features)
  • Hardware: 500MB free disk space, 2GB memory

Installation Instructions

Please follow this installation instructions with great care.

Windows

Download the STS executable installer (*.exe) from the list above. Once downloaded, please double-click the installer to launch the installation process. Follow the on-screen instructions to finish the installation.

If you are downloading the ZIP archive please do not use the extraction utility that comes with Windows as it has been reported that this is causing problems during extraction. Instead please use the free 7-Zip utility.

Mac OS X

Download the STS Mac OS disk image (*.dmg) from the list above. Once downloaded, please mount the disk image by double-clicking the downloaded dmg file. Open the volume named 'SpringSource' and double-click on the installer to launch the installation. Follow the on-screen instructions to finish the installation.

At this time we do not recommend to use any of the Cocoa builds for Mac OS. There a numerous open performance related problems with the Cocoa port reported at Eclipse.org.

 

Linux

Download the STS self-extracting shell script (*.sh) that matches your OS and machine architecture. Once downloaded, launch the installation by running the following command in a terminal session:

$ sh springsource-tool-suite-2.3.0.RELEASE-e3.5.1-linux-gtk-installer.sh 

*******************************************************************************
*                   SpringSource Tool Suite 2.3.0.RELEASE                     *
*                                 Installer                                   *
*******************************************************************************
preparing the installer...
... done
starting UI installer. please follow instructions on screen...

2009년 12월 18일 금요일

자바스크립트 쿠키(cookie)

자바스크립트 쿠키는 CGI의 HTTP Cookie와 내용 및 작동하는 법은 같으나 약간의 차이가 있습니다. 아래는 자바스크립트 쿠키에 대한 개요입니다.

 

  1. 자바스크립트에서 지원하는 사용자의 특정 정보를 저장하는 기법
  2. 클라이언트의 브라우저에 저장되나 서버에는 저장되지 않습니다.
  3. 일정 기간 동안만 유효하게 할 수 있고, 유효기간(만료기한)이 설정되지 않을 경우
    브라우저 종료시 자동으로 사라집니다.
  4. 클라이언트에는 브라우저가 실행중에는 메모리에, 종료될 경우 만료기한에 따라
    cookies.txt라는 파일에 저장될 수 있습니다.
  5. 웹 서버의 환경변수 HTTP_COOKIE에는 저장되지 않습니다.

 

자바스크립트 쿠키는 서버와는 무관하기 때문에 일반적으로 잘 사용하지는 않습니다. 그러나, 클라이언트 내에서는 얼마든지 쿠키의 정보유지기법을 사용할 수 있으므로 간단한 방문 기록 남기기 등에서는 쓰일 수 있습니다. 자바스크립트에서 쿠키를 참조하기 위해서는 document.cookie객체를 사용합니다.
아래는 가장 일반적으로 사용되는 쿠키 관련 자바스크립트 함수들입니다. 아래 함수의 주요 기능은 document.cookie객체의 문자열 조작을 통하여 쿠키로부터 값을 빼내는데 사용됩니다.
function getCookieVal (offset) { var endstr = document.cookie.indexOf (";", offset); if (endstr == -1) endstr = document.cookie.length; return unescape(document.cookie.substring(o
Technorati 태그:
ffset, endstr)); } function GetCookie (name) { var arg = name + "="; var alen = arg.length; var clen = document.cookie.length; var i = 0; while (i < clen) { //while open var j = i + alen; if (document.cookie.substring(i, j) == arg) return getCookieVal (j); i = document.cookie.indexOf(" ", i) + 1; if (i == 0) break; } //while close return null; } function SetCookie (name, value) { var argv = SetCookie.arguments; var argc = SetCookie.arguments.length; var expires = (2 < argc) ? argv[2] : null; var path = (3 < argc) ? argv[3] : null; var domain = (4 < argc) ? argv[4] : null; var secure = (5 < argc) ? argv[5] : false; document.cookie = name + "=" + escape (value) + ((expires == null) ? "" : ("; expires=" + expires.toGMTString())) + ((path == null) ? "" : ("; path=" + path)) + ((domain == null) ? "" : ("; domain=" + domain)) + ((secure == true) ? "; secure" : ""); }
위의 함수에서 사용자가 쓸 함수는 GetCookie(), SetCookie()입니다. 사용하는 문법은 아래와 같습니다.
GetCookie
설정되어 있는 쿠키의 값을 가져옵니다.
쿠키값 = GetCookie(name) 인수 설명)
name(필수 요소)
저장된 Cookie의 이름
예)
cookieval = GetCookie('myCookie');
SetCookie
쿠키의 값을 설정한다.
SetCookie(name, value, [expires], [path], [domain], [secure]) 인수 설명)
name(필수 요소)
Cookie에 저장하고자 하는 이름
value(필수 요소)
Cookie에 저장된 이름(name)에 대한 값
expires(생략 가능)
Cookie가 설정된 후 Cookie가 무효화되는 시간이다.
(GMT Type - "Wdy, DD-Mon-YYYY HH:MM:SS GMT")
설정된 시간이 지나게 되면, 이 Cookie는 사용할 수 없게 된다. 만약 expires에 설정된 시간보다 더 일찍 브라우저가 종료될 경우, 브라우저는 자동으로 cookies.txt라는 파일을 생성하여 그 정보를 이 파일에 저장해 둡니다.
Netscape 4.x의 경우)
C:\Program Files\Netscape\Users\[Profile name]\cookies.txt
Internet Explorer 4.x의 경우)
C:\windows\Cookies\[remote user name]@[domain].txt
path(생략 가능)
문서의 경로명을 설정합니다. 설정하지 않으면 현재 Cookie를 보내는 문서의 URL상의 경로(도메인 명 제외)로 설정됩니다.
domain(생략 가능)
웹 서버의 도메인 명을 설정합니다. 설정하지 않으면 현재 Cookie를 보내는 문서가 속한 도메인 명으로 설정됩니다.
secure(생략 가능)
HTTPS Server(HTTP over SSL)와 같은 Secure Server에서 Cookie를 보낼 경우 이 값을 설정해 줍니다.
예 1) 쿠키값만 설정할 경우
SetCookie('myCookie', 1234);
예 2) 쿠키값 및 만료일을 설정할 경우
var ExpDate = new Date();
ExpDate.setTime(ExpDate.getTime() + 1000*60*60*24); SetCookie('myCookie', 1234, ExpDate); ※ 위의 예제는 만료일을 쿠키가 생성되는 현재 시간 + 1일로 설정합니다. 만약, 만료일을 쿠키가 생성된 후 1시간으로 설정하겠다면 위의 예제에서 24(시간)를 1(시간) 로 바꾸어 주면 됩니다.

아래의 예제는 쿠키값을 설정하고, 만료일을 쿠키가 설정된 후 1시간 이후로 설정하는 예제입니다.

쿠키는 설정된 후에 브라우저가 활성화 되어 있고 만료일이 경과되지 않는 한 브라우저에 따라 설정된 디렉토리 내의 cookies.txt를 지우더라도 값이 유지된다는 점을 주의하기 바랍니다. 지금까지 자바스크립트에 대해 알아 보았습니다. 물론 부족한 점이 많겠지만 지금까지 설명한 내용만 가지고도 여러분이 보다 동적이고 기능적인 홈페이지를 만드는데 많은 도움이 될 것입니다.

2009년 12월 7일 월요일

torrent 사이트

http://www.itorrent.co.kr/

http://talk.7xx.org/

http://www.torrendio.org/bbs/

http://www.torrentdown.com/

http://www.toshare.kr/

http://www.tntok.com/

http://www.movierg.com/

 

Bit Che 프로그램으로 각 토렌드 싸이트를 검색

http://www.convivea.com/product.php?id=2 여기서 다운받으면 됩니다.

windows7 cmd → mrt

시작 -> 실행 -> mrt -> Enter

 

mrt 가 무슨 약자인지는 모르겠습니다. (혹시 Microsoft RXXX TXXX ... ㅎㅎ)

 

이렇게 하니 악성소프트웨어를 잡아주는 프로그램이 뜹니다. 매달 나오는 필수 업데이트가 악성코드 DB라는 것을 알았습니다.

 

mrt와 함께 스위치를 적절히 사용

 

/Q 또는 /quiet - 자동 모드(사용 시 UI가 표시되지 않음)
/? 또는 /help - 사용법 표시
/N - 검색 전용 모드
/F - 전체 검사 사용
/F:Y - 위와 동일하지만 감염된 파일을 자동으로 삭제

익스플로러8 HTML 접속 제한 늘리기

 

http://msdn.microsoft.com/en-us/library/cc304129(VS.85).aspx

 

기존부터 유명한 팁입니다.

다만 익스 6, 7에서의 레지스트리 위치와 8의 레지스트리 위치가 바뀌었더군요. 이 팁은 익스 8 용입니다.

 

html 서버 동시접속 제한이 웹 규격상 HTTP 1.0 server는 2, HTTP 1.1server 는 4라고 합니다.

 

그렇지만 저건 Dial - up 에 적합한 것이고 대역폭이 남아도는 광랜 환경에서는 저걸 늘려주는 게 좋겠죠.

 

저기 권장값은 6으로 되어 있습니다.

 

HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER)
     SOFTWARE
          Microsoft
               Internet Explorer
                    MAIN
                         FeatureControl
                              FEATURE_MAXCONNECTIONSPERSERVER
의 explorer.exe 키값을 6으로 바꿔줍니다.


HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER)
     SOFTWARE
          Microsoft
               Internet Explorer
                    MAIN
                         FeatureControl
                              FEATURE_MAXCONNECTIONSPER1_0SERVER
여기에서도 explorer.exe 키값을 6으로 바꿔줍니다.

 

6보다 더 늘릴 수도 있는데, 마구 올린다고 더 빨라지는 건 아닙니다.

 

체감상 개인마다 차이는 있겠지만 보통 약간의 체감향상 정도는 느끼는 분이 많더군요.

 

아래 레지스트리를 동봉합니다. 익스 8 용이고 본문의 내용과 같은 위치입니다.

 

클릭하여 레지를 설치하면 본문의 팁이 적용됩니다.

 

http://windowsforum.kr/?mid=w7_02&page=7&document_srl=346279

 

Windows7 창의 스냅기능

윈도우7 관련 기사를 보던중... 버즈에 팁이 하나 소개되서요.. 아시는 분은 아시리라 봅니다.

 

1. 윈도우 창의 스냅기능

 

맨위의 실행되고 있는 창을 정렬하려 하면, 타이틀 바를 클릭해서 모니터 위와 좌우 끝으로 마우스를 이동해보자.

적당한 분할로 창크기가 변경된다.

 

(수정)

또는, 키보드의 윈도우키 + 화살표 로 최대화, 최소화, 모니터 좌우 정렬이 된다. 

예를 들면, 윈도우 + 좌측화살표 하면 활성창이 모니터 좌측 절반 크기로 사이즈가 변한다.

다시 윈도우 + 우측화살표 하면 이전 창 사이즈로 복원이 된다. 최소화 복원은 되지 않는다.

멀티모니터를 사용할 경우, 마우스로 움직이면 전체 모니터를 기준으로 좌우 끝까지 가야하지만,

키보드를 사용하면 주 모니터에서만 작동한다.

 

2. 창 숨기기 기능

 

실행되고 있는 맨 위의 창을 클릭해서 좌우로 흔들어보자. 다른 창은 모두 최소화 된다.

 

 

출처: 버즈 http://www.ebuzz.co.kr/content/buzz_view.html?uid=82233&portal=001_00001

Windows7에서 업로드 속도 하락시 해결방안

1.  cmd를 관리자권한으로 실행

2. 명령프롬프트에 아래의 값을 입력 후 엔터
netsh interface tcp set global autotuninglevel=highlyrestricted

기본값은 highlyrestricted를 normal로 바꿔주시면 됩니다.

 

출처는 파코x

 

기본값이 normal 이고 highlyrestricted으로 바꿔주는 명령어입니다.

 

netsh interface tcp show global 하시면 설정상태를 보실 수 있습니다.


상세

펼쳐두기..


 

Windows7 Oracle client 11G R1 세팅 안될때

다음 디렉토리에

..\win32_11gR1_client\client\stage\prereq\client\refhost.xml

 

파일에 다음과 같이 추가를 하시고 다시 세팅하시면 됩니다.

  <CERTIFIED_SYSTEMS>

     <!-- 중략-->

    <!--Microsoft Windows 7-->
    <OPERATING_SYSTEM>
      <VERSION VALUE="6.1"/>
    </OPERATING_SYSTEM>    
     <!-- 중략-->

</CERTIFIED_SYSTEMS>

 

 

 

출처 : http://windowsforum.kr/?mid=w7_02&page=4&document_srl=453277

인코딩 euc-kr, ksc5601, iso-8859-1, 8859_1, ascii, UTF-8

http://bins4088.textcube.com/7/trackback/

================================================================================
String charset[] = {"euc-kr", "ksc5601", "iso-8859-1", "8859_1", "ascii", "UTF-8"};
String name = "한글";
for(int i=0; i<charset.length ; i++){
for(int j=0 ; j<charset.length ; j++){
if(i==j) continue;
System.out.println(charset[i]+" : "+charset[j]+" :"+new String(name.getBytes(charset[i]),charset[j]));
}
}
================================================================================

 

펼쳐두기..


2009년 12월 2일 수요일

UTF-8 관련 개발 [인코딩]

OKJSP( http://www.okjsp.pe.kr/seq/72792 )

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

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

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

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

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

 

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

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

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

 

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

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

 

 

 

 

utf-8 인코딩을 이용한 한글 url 처리
[ 조회수: 393 ]
 

개요

  • utf-8 은 유니코드를 위한 가변길이 문자 인코딩 방식중 하나로 켄 톰프슨과 롭 파이크가 만들었다.
  • 유니코드 한문자를 표시하기 위해 1byte~4byte 까지 가변적으로 표현한다.
  • U+0000부터 U+007F 범위에 있는 아스키 문자들은 UTF-8에서 1바이트만으로 표시된다. 4바이트로 표현되는 문자는 모두 기본 다중언어 평면(BMP) 바깥의 유니코드 문자이며, 거의 사용되지 않는다.

구조

  • U+007F(0~127) 까지의 문자는 7비트 아스키 문자와 동일하게 표시된다.
  • U+007F 이후의 문자는 4byte 까지의 비트 패턴으로 표시되며 7비트 아스키 문자와 혼동되지 않게 하기 위해 모든 바이트의 최상위 비트는 1 이다.
코드 범위 UTF-16BE 표현 UTF-8 표현 설명
000000 ~00007F 00000000 0xxxxxxx 0xxxxxxx 아스키와 동일한 범위
000080 ~0007FF 00000xxx xxxxxxxx 110xxxxx 10xxxxxx 첫바이트는 110 으로 시작하고, 나머지 바이트는 10으로 시작함
000800 ~00FFFF xxxxxxxx xxxxxxxx 1110xxxx 10xxxxxx 10xxxxxx 첫바이트는 1110으로 시작하고 , 나머지는 10으로 시작함
010000 ~10FFFF 110110yy yyxxxxxx 110111xx xxxxxxxx 11110zzz 10zzxxxx 10xxxxxx 10xxxxxx UTF-16 "surrogate pair" 영역(yyyy=zzzzz -1)

clear=all>

utf-8 인코딩 예제

'위'(한글) --> U+C7404(유니코드)
U+0800부터 U+FFFF 사이의 영역에 있으므로, 표에 따라 1110xxxx 10xxxxxx 10xxxxxx 형식으로 인코딩
C704(16진수) --> 1100-0111-0000-0100(2진수) --> 11101100 10011100 10000100(utf-8 인코딩)
결과적으로 이 문자는 3바이트로 인코딩 되면 16진수로 표기하면 EC 9C 84가 된다.

(첫 128 문자는 1바이트로 표시되고, 그 다음 1920 문자 (판독 기호가 붙은 라틴 문자, 그리스 문자, 키릴 문자, 콥트 문자, 아르메니아 문자,
히브리 문자, 아랍 문자)는 2바이트로 표시되며, 나머지 문자들 중 BMP 안에 들어 있는 것은 3바이트, 아닌 것은 4바이트로 표시된다.)

관련자료

utf-8 체크

    1. 입력된 문자열이 utf-8로 인코딩 되었는지 하기 위해서는 utf-8 의 인코딩 패턴을 조사한다. 즉 바이트 배열의 패턴이 utf-8 인코딩 패턴(1110xxxx 10xxxxxx 10xxxxxx)과 맞는지를 비교한다.
    2. 000080 ~0007FF 범위의 110xxxxx 10xxxxxx 패턴 일 경우엔 중복되는 코드값으로 인해 utf-8 인코딩인지 아닌지 체크하는것은 사실상 불가능하다.
      110xxxxx 10xxxxxx 패턴의 utf-8 판독

      110xxxxx 10xxxxxx 패턴의 코드일 경우 utf-8로 인코딩 되었는지 아닌지를 확인하는것은 사실상 불가능하다.
      하지만 utf-8로 인코딩 되면 아스키 영역은 1byte 한글은 3byte 내지는 4byte를 사용하므로 단순하게 생각하여 2 바이트 110xxxxx 10xxxxxx 패턴의 경우는 utf-8 인코딩이 아님을 유추할수 있다.
      판독 기호가 붙은 라틴 문자, 그리스 문자, 키릴 문자, 콥트 문자, 아르메니아 문자, 히브리 문자, 아랍 문자 등이 입력되면 판독 오류가 발생하겠지만 이는 무시해도 좋을듯 하다.

    3. Null 값의 경우 자바에서는 변형된 utf-8 인코딩 방식에 따라 1byte가 아닌 2byte(11000000 10000000)로 표기하므로 110xxxxx 10xxxxxx 의 경우 null 인지 비교해야 정확한 판독이 가능하지만 입력된 값의 인코딩여부를 판독하므로 상황에 따라서는 무시해도 괜찮을듯 하다.
    4. CJK 2바이트+한글 2바이트 가 '1110xxxx 10xxxxxx 10xxxxxx 0xxxxxxx' 와 같은 패턴으로 utf-8 3바이트 와 아스키1바이트 조합과 유사할 경우 앞자리 3바이트를 유니코드 형태로 역치환 해서 000800 ~00FFFF 범위가 맞는지 체크한다.

utf-8 인코딩 체크 예제

utf-8 인코딩 판독 예제

1. '위'.getBytes("ISO-8859-1") : -20 , -100, -124
2. unsigned byte = 236, 156, 132
3. 16진수 : EC , 9C, 84
4. 2진수 : 11101100 10011100 10000100
5. urf-8 패턴제거: 00001100 00011100 00000100
6. 유니코드 타입으로 치환 : 00001100<<12 + 0011100<<6 + 00000100 = 11000000 00000100
7. 16진수 : 000800 <= 00E704 =< 00FFFF

package util;

import java.io.UnsupportedEncodingException;

/** 
 *  <pre>
 *  작성자 : 이종희 (qola@naver.com)
 *  JAlbum.com (http://jalbum.net/download.jsp?ref=list) 소스 참고함.   
 *  <b>특정 문자열이 utf-8 인코딩인지 아닌지 체크한다.</b>
 * 
 *  utf-8 인코딩 패턴인  110xxxxx 10xxxxxx , 1110xxxx 10xxxxxx 10xxxxxx 인지 비교한다.
 *  2바이트 (110xxxxx 10xxxxxx) 패턴의 유니 코드 중복으로 인해 100% 검증할수 없지만 
 *  한글의 경우 3byte 로 표기 되므로  2바이트 패턴일 경우 utf-8 인코딩이 아닌것으로 간주한다.
 *  
 *  따라서 000080 ~0007FF 영역의 라틴 문자, 그리스 문자, 키릴 문자, 콥트 문자, 
 *  아르메니아 문자, 히브리 문자, 아랍 문자 등은 utf-8 인코딩을 비교할수 없다. 
 *  
 *  수정된 utf-8의 의한 null값 \u0000 은 11000000 10000000 로 표기되지만 무시하기로 한다.
 *  
 *  </pre>
 */

public class UTFUtil {
	   
	
	public static boolean isUTF8(String str) throws Exception{
		byte[] bytes=str.getBytes("ISO-8859-1");
		return isUTF8(bytes,0,bytes.length);
	}
	   
	public static boolean isUTF8(byte[] buf, int offset, int length) {

	       boolean yesItIs = false;
	       for (int i=offset; i<offset+length; i++) {
	          if ((buf[i] & 0xC0) == 0xC0) { // 11xxxxxx 패턴 인지 체크 
	             int nBytes;
	             for (nBytes=2; nBytes<8; nBytes++) {
	                int mask = 1 << (7-nBytes);
	                if ((buf[i] & mask) == 0) break;
	             }
	            
                      //CJK영역이나 아스키 영역의 경우 110xxxxx 10xxxxxx 패턴으로 올수 없다.
	             if(nBytes==2) return false;
	             
	             // Check that the following bytes begin with 0b10xxxxxx
	             for (int j=1; j<nBytes; j++) {
	                if (i+j >= length || (buf[i+j] & 0xC0) != 0x80) return false;
	             }
                
                if(nBytes==3){
                	// 유니코드 형태로 역치환 해서 0x0800 ~ 0xFFFF 사이의 영역인지 체크한다. 
                    char c = (char) (((buf[i] & 0x0f) << 12) + ((buf[i+1] & 0x3F) << 6) + (buf[i+2] & 0x3F));
                    if(!(c >= 0x0800 && c <= 0xFFFF)){
                        return false;
                    }	                	
                }
	                
	             yesItIs = true;
	          }
	       }
	       return yesItIs;
	 }
	    
}

clear=all>

 

 

한글 URL 사용시 문제 발생 케이스

  • IE에는 유니코드 지원을 위해 기본적으로 URL을 UTF-8 로 전송해 주지만 옵션 사항이므로 사용자 마다 환경이 다를수 있다.
  • utf-8로 다시 보내는 기능을 제공하지 않는 브라우저도 존재한다.
  • RSS 리더와 같은 별도의 클라이언트를 사용할경우 서버인코딩, 클라이언트, 브라우저 인코딩 이 모두 일치하여야만 한다.

해결책

  • REQUEST 요청시 URL이 UTF-8 인코딩 방식인지 아닌지를 체크하여 UTF-8 방식이면 "ISO-8859-1 --> UTF-8" 형태로 인코딩 변환을 해주고 그렇지 않으면 "ISO-8859-1 --> MS949" 로 인코딩 변환을 시켜준다.

구현 예제

  • APACHE MOD_REWRITE
    • 아래 예와 같이 MOD_REWRITE를 이용해 특정 패턴의 URL을 REWRITE 시킨다.
      RewriteEngine   on
          # // http://tag.naver.com/tag2/한글 --> http://tag.naver.com/tag/index.jsp?tag=한글
          RewriteRule ^/tag2/(.+)$  /tag/index.jsp?tag=$1 [PT]
  • JSP 샘플
    • isUTF8() 체크 메소드를 이용해 파라메터의 인코딩을 각각 처리해준다.
      <%@page language="java" contentType="text/html;charset=utf-8"%>
      <%@page import="java.net.URLEncoder, util.*" %>
      
      <html>
      <head>
      	<meta http-equiv="Content-type" content="text/html; charset=utf-8">
      </head>
      
      <body>
        index.jsp... <br>
        
        <%
          String uri=request.getRequestURL().toString();
        	String tag=request.getParameter("tag");
        	byte[] tagBytes=tag.getBytes("ISO-8859-1");
        	
        	out.println("byte[]===");
        		for(int i=0;i<tagBytes.length;i++){
        			out.println(tagBytes[i]+",");
        		}
        	out.println("<br>");  
        	
        	boolean isUTF8=UTFUtil.isUTF8(tag);
        	
        	if(isUTF8) {
        		out.println(util.Enco.toUtf(tag));
        		out.println("<br>");
        		out.println(isUTF8);
        		
        	}else{ 
        		out.println(new String(tag.getBytes("ISO-8859-1"),"ms949"));
        		out.println("<br>");
        		out.println(isUTF8);
        	}
        %>
        
        <a href="http://tag_test.com/tag2/한글">http://tag_test.com/tag2/한글</a><br>
        <a href="http://tag_test.com/tag2/코리아">http://tag_test.com/tag2/코리아</a><br>
        <a href="http://tag_test.com/tag2/위">http://tag_test.com/tag2/위</a>
      </body>
      </html>
       

UTF-8과 java.net.URLDecoder 클래스

java.lang.Object

 ↑ java.net.URLDecoder

public class URLDecoder extends Object

 

특별한 encode 방식을 사용해 application/x-www-form-urlencoded 캐릭터 라인을 디코드합니다. 지정된 encode 방식을 사용해, %xy의 형식의 연속 순서가 나타내는 문자를 결정합니다.

 

 

 

 

2009년 12월 1일 화요일

java [] 배열은 함수인자로 넘겨도 내부가 포인터구조여서 값이 변한다

배열만 열외인듯

[code java] public class TestInt { public void aa0(int a) { } public static void aa1(int []a){ a[0]=1; System.out.println("a[0]="+a[0]); } // public ~~ main(){ // int []a = {30,31}; // // a[0] = 30; // aa(a); // // a[0] = 1; // // // } public static int aa2(int i){ i=1; System.out.println("i="+i); return i; } public static void main(String[] args) { int a = 30; int a1[] = {30}; // a = 30; int t = aa2(a); aa1(a1); // a = 30; System.out.println("t="+t); System.out.println(a); System.out.println(a1[0]); } } [/code]

 

a = 30

a[0] = 1

이클립스 프로젝트 이름 바꾸기

이클립스에서 tomcat에 물릴때(add and remove에서 보이는 부분) 참고

org.eclipse.wst.component를 수정해준다

 

workspace → project명 → .settings → org.eclipse.wst.component 파일 수정

 

 

<?xml version="1.0" encoding="UTF-8"?>
<project-modules id="moduleCoreId" project-version="1.5.0">
    <wb-module deploy-name="바꿀 프로젝트명">
        <wb-resource deploy-path="/" source-path="/WebContent"/>
        <wb-resource deploy-path="/WEB-INF/classes" source-path="/src"/>
        <wb-resource deploy-path="/WEB-INF/classes" source-path="/test"/>
        <property name="java-output-path" value="build/classes"/>
        <property name="context-root" value="/"/>
    </wb-module>
</project-modules>

이클립스 디버그 방법

<이클립스 디버그 방법>

 

1. 톰켓서버를 먼저 실행

 

2. 라인에 더블클릭하면 파란 동그라미 생긴다. 여기서 부터 디버그를 하겠다는 표시

 

3. 웹어플사이트에 액션을 수행하면
    창이 뜨고 확인 누르면된다.
    그러면 디버그 모드로 간다

 

4. F6은 한줄씩디버그 하기

   오른쪽 위에 variable 과 병행하면서 코드를 본다.

 

5. F5는 안에 있는 메소드로 들어가고 싶을때 사용.
    그리고 들어가면 다시 F6으로 한줄씩 디버깅체크

 

6. F7은 중도에 다시 돌아가고 싶을 때

    F8은 한번에 검사하고 싶은곳을 같이 보고싶을 때


7. 한가지 변수에만 검사하고싶다.

    블럭해서 오른쪽 마우스클릭 후 watch 선택

 

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

 

<이클립스 자주쓰는 단축키 및 기술>

 

 Code Assist :  Ctrl + Space (자동으로 이클립스 코드 보여주는 기능)

 Quick Fix : Ctrl + 1 (에러시 빨간에러표시시 Ctrl + 1 을 누르면 방법 제시)

 Quick Hierarchy : Ctrl + T (계층 구조 보기)
 
 Quick Outline : Ctrl + O (아웃라인구조 보기)

 Source Code Navigation : F3, Alt + Forward

    메소드를 들어가 보고싶을때(ctrl을 누르고 클릭해도가능)
    Alt + Back 다시 돌아갈때

 Line move : Ctrl + L (라인 이동)
 
 Mark Occurrences : 형광등 기능. 관련된 것에 같은색으로 표시됨.

 Search : Ctrl + F (소스내 검색기능)
   Ctrl + H (파일이나 자바나 플러그인 등 검색시)

 Comment : Ctrl + /   (블럭 지정하여 자동으로 주석 처리하기)

 Import : Ctrl + Shift + O (import 에러시 필요한 정보를 제시하여준다)

2009년 11월 27일 금요일

workspace in use or cannot be created, choose a different one

이클립스 실행시 아래 에러문발생시

 

workspace in use or cannot be created, choose a different one

 

 

1. eclips 프로세스를 강제로 종료 시키거나

2. workspace/.metadata 폴더의 .lock 파일 삭제