close

Trust Me!! Trust You!!


  • Blog
  • Local Log
  • Tag Cloud
  • Key Log
  • Guestbook
  • RSS Feed
  • Write a Post
  • Admin

혹시 블로그 스킨이 깨져 보이시나요? 최신버전의 Internet Explorer(Windows용), Opera, Firefox를 사용해보세요.

※ JSP, 톰캣에서 한글 사용하기

웹 프로그래밍
2013/03/15 21:59
 

주소창에 /test.jsp?str=핳햏 이런걸... 쳤을때...
정확하게 페이지에 보이게 할 방법이 없는듯 ㅠ.ㅠ ASP,ASP.NET은 되는데 ㅎㅎㅎ
(크롬은 됨, IE안됨 ... )

※ JSP, 톰캣에서 한글 사용하기

이하로 설명하는 것은 학원에서 EUC-KR 배운것을 UTF-8로 바꾸면서 경험한 것을 토대로 작성하였다.
톰캣 5.5 버전을 기본으로 설명하겠다. 다른 버전은 사용해보지 않았기에.

1. 기본 세팅의 톰캣

톰캣을 설치하면 기본 charset은 Latin-1(8859_1)으로 되어있다.

1) 페이지 설정
UTF-8을 쓰고자 하는 경우 *.html, *.htm, *.jsp 파일은 UTF-8 형식으로 저장한다.
EUC-KR, MS949는 ANSI, MS949등의 기본 형식으로 저장하면 된다.


모든 HTML, JSP에는 아래와 같은 META태그를 넣을 것을 권장한다.
<META HTTP-EQUIV="contentType" CONTENT="text/html;charset=UTF-8">
<!--EUC-KR인 경우 UTF-8을 EUC-KR로 바꾼다-->

JSP에서는 페이지 상단에 page 지시자를 다음과 같이 넣는다.
<%@ page contentType="text/html;charset=UTF-8" %>
<!--EUC-KR인 경우 UTF-8을 EUC-KR로 바꾼다-->


2) POST 방식의 데이터 전송
POST방식으로 전송된 데이터는 UTF-8이든, EUC-KR이든 다음과 같은 라인을 추가하면 해결 된다.
request.setCharacterEncoding("UTF-8");
//EUC-KR인 경우 UTF-8을 EUC-KR로 바꾼다.


3) GET 방식의 데이터 전송
GET방식으로 전송된 데이터는 URL을 통해 전송되기 때문에 위의 방식으론 쓸 수 없다. URL에서의 데이터를 Latin-1(8859_1)인코딩으로 서버에서 처리하기 때문이다. 이를 톰캣의 버그라고 단정짓는 일부 서적의 말은 잘못된것이다.

불러온 데이터를 아래와 같이 처리해 주어야 한다.
request.setCharacterEncoding("UTF-8");
String data = new String(request.getParameter("data").getBytes("8859_1"),"UTF-8");
//Latin-1(8859_1)로 읽어들인 데이터를 다시 UTF-8로 재해석하는 코드
//EUC-KR인 경우  UTF-8을 EUC-KR로 바꾼다.


4) 한글 파일 전송
Latin-1(8859_1)로 세팅된 톰캣 서버에서는 URL을 무조건 영어로 처리하므로 한글 파일은 절대로 읽어들일 수 없다. 파일을 영어로 바꾸어 저장하거나, 한글 파일을 영어로 바꾸는 처리를 해주어야 한다.


2. 톰캣의 세팅을 UTF-8로 바꾸기

톰캣의 conf라는 폴더를 보면 server.xml과 server-minimal.xml 이란 파일을 볼 수 있다. 텍스트 에디터로 열어서 <connector...>라는 항목을 찾아 다음과 같이 설정하자.
server.xml
<Connector port="8080" maxHttpHeaderSize="8192"
    maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
    enableLookups="false" redirectPort="8443" acceptCount="100"
    connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8" />

server-minimal.xml
<Connector port="8080" URIEncoding="UTF-8">
server-minimal.xml이 존재하지 않거나 server.xml만 바꾸었을때 제대로 동작하면 server-minimal.xml은 세팅할 필요 없다.

이 세팅은 웹페이지의 URL에서 문자열을 읽어올 때 서버가 처리하는 URL의 인코딩 타입을 변경하는 것이다. Internet Explorer에서 "URL을 항상 UTF-8로 보냄"이 켜져 있으면 브라우저는 서버에 UTF-8로 보낸다. 이를 서버에서 읽어들일때 UTF-8이 세팅되어 있어야 하는 것이다.

이제 기본세팅과의 차이점을 보자.

페이지 설정과 POST방식으로 전송된 데이터의 처리는 그대로 두어도 좋다. 서버를 UTF-8로 세팅한 만큼 가급적 UTF-8의 방식으로 페이지 설정을 하자.

GET방식으로 전송된 데이터의 처리는, 다음 항목이 필요가 없어진다. 당연하다. 있으면 오히려 에러가 발생할 것이다. 앞부분에 주석처리를 해버리자.
request.setCharacterEncoding("UTF-8");
//String data = new String(request.getParameter("data").getBytes("8859_1"),"UTF-8");
//Latin-1(8859_1)로 읽어들인 데이터를 다시 UTF-8로 재해석하는 코드

한글 파일의 전송은 다음과 같이 처리한다.
<a href = "http://[server]:[port]/[folder]/<%= java.net.URLEncoder.encode( "한글파일.html" ,  "UTF-8" )%>">
한글파일 링크</a>
이렇게 하면 URLEncoder에 의해서 %xx%xx 형식의 UTF-8로 인코딩된 URL코드가 링크될 것이다.

그외에 Internet Explorer에서는 “URL을 항상 UTF-8로 보냄”이 기본 체크 되어있으므로 주소창에 한글을 직접 써도 서버에서 알아서 처리해준다. 물론 저 항목을 끄면 또 에러 발생.. (FireFox에서는 OS에 따라 MS949로 보낼 수도 있으므로 주의하자.)


3. 톰캣의 세팅을 EUC-KR로...

역시 conf 폴더에서 server.xml과 server-minimal.xml 이란 파일을 찾아 텍스트 에디터로 열어서 <connector...>라는 항목을 찾아 다음과 같이 설정하자.
server.xml
<Connector port="8080" maxHttpHeaderSize="8192"
    maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
    enableLookups="false" redirectPort="8443" acceptCount="100"
    connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="EUC-KR" />

server-minimal.xml
<Connector port="8080" URIEncoding="EUC-KR">
server-minimal.xml이 존재하지 않거나 server.xml만 바꾸었을때 제대로 동작하면 server-minimal.xml은 세팅할 필요 없다.

역시 페이지 세팅은 서버가 EUC-KR인 만큼 EUC-KR로 하는 것이 바람직하다....(젠장)

GET방식으로 전송된 데이터의 처리는, 역시 다음 항목이 필요가 없어진다. 앞부분에 주석처리를 하자.
request.setCharacterEncoding("EUC-KR");
//String data = new String(request.getParameter("data").getBytes("8859_1"),"EUC-KR");
//Latin-1(8859_1)로 읽어들인 데이터를 다시 EUC-KR로 재해석하는 코드

한글 파일의 전송도 마찬가지다.
<a href = "http://[server]:[port]/[folder]/<%= java.net.URLEncoder.encode( "한글파일.html" ,  "EUC-KR" )%>">
한글파일 링크</a>
뭐.. Internet Explorer에서 "URL을 항상 UTF-8로 보냄" 설정에 상관 없이 클릭하면 잘 될 것이다. 단.. 주소창에 직접 입력하려면 저 설정을 꺼야 된다.(개발자는 이를 고객에게 강요는 하지 말라. 어플리케이션 개발을 시작할때부터 한글을 직접 주소창에 입력하는 경우를 철저히 배제해야 한다.)

EUC-KR로 세팅한 이상 EUC-KR에서 지원하는 2350자 이외의 한글에 대해서는 보장이 되지 않는다. 차라리 MS949 방식을 권장하겠다

이올린에 북마크하기
No received trackback. / No comment.

Trackback Address :: http://viper150.cafe24.com/trackback/205

You can also say.

Prev 1 ... 95 96 97 98 99 100 101 102 103 ... 298 Next
블로그 이미지
이것저것 불펌금지도 퍼다가 담습니다. 외부에 비공개된 페이지 입니다. By. 어른왕자

카테고리

  • 전체 (298)
    • 사는 이야기 (115)
    • 웹 프로그래밍 (102)
    • App 프로그래밍 (22)
    • IT 뉴스&기타 (22)
    • 박한별 (4)
    • 역사&기타지식 (9)

태그목록

  • 2d
  • SLRCLUB
  • 아이폰6
  • IU
  • sysdate
  • 고전
  • JSP
  • 전산직
  • svn connector
  • 자본
  • java doc
  • 교육
  • CRC32
  • 전쟁
  • 바코드
  • TV 보기
  • Honesty
  • 과음
  • 획갈림
  • 레지스트리
  • WM_CONCAT
  • hiddenmenu
  • 날짜비교
  • 직장의신
  • 최적화
  • 울트라에디터
  • 명품지갑
  • BrowserHelperObjects
  • api
  • 계산

최근에 올라온 글

  • 보험사의 조정신청 대응방법.
  • 어느 천재의 앞선 시선.
  • [병맛더빙] 누구게..... (1)
  • 韓경제 `회색 코뿔소` 상황...
  • SVN Connector 설치 URL.
  • 군대를 가지 않는 서울대생.
  • “운은 하늘의 귀여움 받는...
  • 목장에서 알바하다가 캐스...
  • [펌]믿고 거르는 관상.
  • 하루에 1세트씩 하면 좋다...

최근에 달린 댓글

  • <p align="center"><a href="h... 라임애드 02/14
  • <div style="OVERFLOW: hidden... 고사니 02/12
  • <p align="center"><a href="h... 라임정보 02/07
  • <p><img src="https://i.imgur... 브레드 01/22
  • <p><img src="https://i.imgur... 브레드 01/22

최근에 받은 트랙백

  • công ty may đồng phục. công ty may đồng phục 01/08
  • Israelnightclub`s recent blo... Israelnightclub`s recent blo.. 01/06
  • Suggested Browsing. Suggested Browsing 01/06
  • similar site. similar site 01/06
  • לאתר הבית שלנו. לאתר הבית שלנו 01/06

글 보관함

  • 2019/03 (1)
  • 2018/12 (1)
  • 2018/09 (1)
  • 2018/08 (1)
  • 2018/02 (1)

달력

«   2021/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            

링크

  • Total : 263342
  • Today : 2
  • Yesterday : 29
Tattertools
Eolin
rss

어른왕자's blog is powered byTattertools1.1.2.2 : Animato