2009. 12. 30. 00:03 카테고리 없음
2009. 12. 23. 14:57 was
charset 과 pageEncoding의 차이
[출저]
http://darkhorizon.tistory.com/entry/charset-%EA%B3%BC-pageEncoding%EC%97%90-%EB%8C%80%ED%95%B4
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR" %>
- contentType 속성 : JSP파일 출력시 문자코드 및 Content-Type 헤더에
출력할 문자코드명을 지정
- pageEncoding 속성 : JSP파일 작성시의 문자코드를 지정
자바가상머신(JVM)의 내부에서는 모든 문자열이 Unicode로 표현된다.
그러므로 서블릿 콘테너는 JSP파일을 JVM에 읽어들일 때 JSP파일의
문자코드(예를들어 EUC-KR)에서 Unicode로 변환한다.
그리고 웹브라우저에 HTML문서를 출력할 때는 Unicode로부터 출력파일의
문자코드로 변환한다.
■contentType 속성의 역할
contentType 속성은 "JSP파일 출력시의 문자코드", "Content-Type 헤더에
지정할 문자코드"의 양쪽을 지정하는 기능을 갖는다.
상기 코드와 같이 기술하면 서블릿 콘테너는 콘텐츠를 EUC-KR로
Encode하여 출력한다.
또한 동시에 Content-Type 헤더를 통하여 문자코드 종류를 웹브라우저에
전달한다.
■pageEncoding 속성의 역할
pageEncoding 속성은 "JSP파일 작성시의 문자코드"를 지정하기 위한
속성으로서 JSP 1.2사양(Tomcat 4.0) 이후부터 지원된다.
예를들어, 윈도우즈에서 작성한 JSP파일이면 EUC-KR를 지정하면 된다.
UNIX의 일본어 에디터로 작성한 것이라면 EUC-JP를 지정하면 바르게 처리될
것이다.
pageEncoding 속성을 생략한 경우, JSP 1.2 사양에서는
"contentType 속성에서 지정된 문자코드로 JSP파일을 읽어들임"
이라고 규정되어 있다.
그러므로 보통은 생략해도 문자깨짐이 발생할 염려는 없다.
그렇지만 EUC-KR -> Unicode -> EUC-KR 의 문자코드 변환은
기억해 둬야 한다.
또한 include 된 JSP파일에서는 contentType 속성을 기술할 수 없으므로
pageEncoding 속성을 이용할 필요가 있다.
이 문제에 대해서는 다음회에 설명할 예정이다.
덧붙여, contentType 속성과 pageEncoding 속성에는 각기 다른 문자코드를
지정할 수도 있다.
예를들어 ShiftJIS로 작성한 JSP파일을 EUC-JP,UTF-8등으로 출력하는 것도
가능하다.
'was' 카테고리의 다른 글
Apache Mod_Security (0) | 2010.02.17 |
---|---|
톰캣 시작시 JVM 옵션 설정 (0) | 2010.02.09 |
server.xml 설정 관련 (0) | 2009.12.08 |
톰캣 plugin url (0) | 2009.12.08 |
The Apache Tomcat Native library which allows optimal performance in production environments was not found (0) | 2009.12.02 |
2009. 12. 22. 20:58 java
URL 컨텐츠 얻어 오는 소스 테스트
해당 주소의 모든 컨텐츠를 String으로 얻어오는 소스
나중에 고쳐라.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.CookieHandler;
import java.net.URL;
import java.net.URLConnection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.junit.Test;
public class UrlTest {
// private static Log log = LogFactory.getLog(UrlTest.class);
@Test
public void getContent() throws Exception {
getURL("http://java.sun.com", "utf-8", true);
}
private String getURL(String surl, String ENCODING, boolean isGetHeader) throws Exception{
String Header = "";
String Cookie = "";
String ret = "";
String param = "";
try {
URL url = new URL(surl);
URLConnection urlC = url.openConnection();
urlC.setUseCaches(false);
urlC.setDoOutput(true);
urlC.setRequestProperty("Cookie", Cookie);
if(!param.equals("")) {
OutputStream outStream = urlC.getOutputStream();
Writer writer = new OutputStreamWriter(outStream);
writer.write(param);
}
urlC.connect();
InputStreamReader isr = null;
BufferedReader br = null;
String temp;
StringBuffer buffer = new StringBuffer();
try {
isr = new InputStreamReader(urlC.getInputStream(), ENCODING);
br = new BufferedReader(isr);
while((temp = br.readLine()) != null) {
//System.out.println(temp);
buffer.append(temp);
}
br.close();
isr.close();
Header = "";
if(isGetHeader) {
Header = getHeader(urlC, Header);
}
ret = buffer.toString();
} catch(IOException e) {
ret = "fail.." + e;
}
} catch(IOException e) {
ret = "fail." + e;
}
//System.out.println(ret);
return(ret);
}
private String getHeader(URLConnection urlC, String Header) {
Map map = urlC.getHeaderFields();
System.out.println(map);
int n = 0;
String field = "a";
while(field != null && !field.equals("")) {
field= urlC.getHeaderField(n);
Header += urlC.getHeaderFieldKey(n)+"="+field+"\n";
n++;
}
/*
* HTTP 헤더 정보는 다음과 같은 형태로 얻을수 있다.
* null=HTTP/1.1 200 OK
* Date=Sun, 27 Jul 2008 08:21:29 GMT
* Server=Microsoft-IIS/6.0
* X-Powered-By=ASP.NET
* Content-Length=6
* Content-Type=text/html
* Set-Cookie=NAME=NAME2=VALUE2&NAME1=VALUE1; path=/
* Set-Cookie=ASPSESSIONIDQCQCSQDD=GMPNAABCMELOFMCPFPCJOOHG; path=/
* Cache-control=private
* null=null
*/
System.out.println(Header);
return Header;
}
private String retrieveCookie(URL url) throws Exception {
String cookieValue = null;
CookieHandler handler = CookieHandler.getDefault();
if (handler != null) {
Map headers = handler.get(url.toURI(), new HashMap());
List values = (List)headers.get("Cookie");
for (Iterator iter=values.iterator(); iter.hasNext();) {
String v = (String)iter.next();
if (cookieValue == null)
cookieValue = v;
else
cookieValue = cookieValue + ";" + v;
}
}
System.out.println(cookieValue);
return cookieValue;
}
}
쿠키 관련은 다음 사이트 참조를 참조 할것
http://programmers.tistory.com/204
'java' 카테고리의 다른 글
톰캣, 자바 메모리 관련 (0) | 2010.02.03 |
---|---|
파일 다운 로드 관련 (0) | 2010.02.03 |
파일 업로더 (0) | 2009.12.10 |
힙 사이즈 구하기 (0) | 2009.12.04 |
jdk 설치 윈도우, 리눅스 (0) | 2009.11.28 |