검색결과 리스트
웹프로그램에 해당되는 글 66건
- 2008.03.28 XMLHttpRequest를 사용할 때 한글 파라미터의 인코딩 처리 방법
- 2008.03.26 ajax 활동아리미 예제
- 2008.03.21 Connection pool
- 2008.03.18 JDOM SUN 사에있는글..
- 2008.03.13 다른 플로그에서 퍼왔습니다. 링크하는법좀 트랙백인가.?
- 2008.03.13 MS-SQL 2005 Tomcat _ Context 설정
글
- XMLHttpRequest 사용시 한글 파라미터 전송 방법
자바캔에 실린 'XMLHttpRequest를 이용한 웹 채팅 구현'이란 글에서 한글 문제를 iframe을 사용하여 해결했는데, 그 방식 말고 자바캔의 댓글 추가에서 사용한 한글 처리 방식에 대해서 설명해보도록 하겠다.
XMLHttpRequest의 한글 파라미터 문제 해결 방법에 대해서 살펴보기 전에, 웹브라우저가 파라미터 값을 전송할 때 어떻게 인코딩하는 지 살펴보도록 하자. 대부분의 한글 사이트는 다음과 같이 캐릭터셋이 "euc-kr"인 HTML 문서를 사용할 것이다.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ko" lang="ko"> <head> <meta http-equiv="content-type" content="text/html; charset=euc-kr" /> <title>test</title> </head> <body> <form name="test" action="form.jsp"> <input type="text" name="name" /><input type="submit"/> </form> </body> </html>
위 문서는 name 파라미터를 form.jsp로 전송하는 FORM을 갖고 있는데, name 필드에 '한글'을 입력한 뒤 submit 버튼을 누르면 다음과 같이 파라미터 값이 변환되어 전송된다.
euc-kr 캐릭터셋에 맞춰 '한글' 을 인코딩한 값 http://..../form.jsp?name=%C7%D1%B1%DB
위에서 '%C7%D1%B1%DB'는 '한글'을 euc-kr 캐릭터셋에 맞춰서 인코딩한 결과이다. IE나 파이어폭스 등의 웹 브라우저는 문서의 캐릭터셋에 맞춰서 파라미터를 인코딩하여 전송하기 때문에, 만약 문서의 캐릭터셋이 utf-8 이면 '한글' 파라미터를 다음과 같이 인코딩하여 전송하게 된다.
utf-8 캐릭터셋에 맞춰 '한글' 을 인코딩한 값 http://..../form.jsp?name=%ED%95%9C%EA%B8%80
문서 캐릭터셋이 euc-kr인 경우와 utf-8인 경우 전송되는 파라미터의 인코딩된 값도 다른 것을 확인할 수 있다.
이제, 다시 본론으로 돌아와서 XMLHttpRequest가 전송하는 파라미터에 대해서 살펴보자. XMLHttpRequest도 파라미터를 웹서버에 전송하기 때문에 파라미터 값을 알맞게 인코딩 해 주어야 한다. 그런데, 아쉽게도 XMLHttpRequest 자체적으로 인코딩 처리를 지원해주지는 않는다. 따라서, 자바스크립트가 지원해주는 인코딩 처리 함수를 사용해야 한다. 자바 스크립트가 제공하는 인코딩 처리 함수는 escape()와 encodeURIComponent()의 두가지가 있다. 이 두가지는 동작 방식이 다른데, 다음표는 두 함수의 실행 결과를 보여주고 있다.
인코딩 처리 | 인코딩된 값 | 설명 |
---|---|---|
두 함수의 실행 결과는 문서 캐릭터셋이 euc-kr 이거나 utf-8 인 경우 모두 동일하다. | ||
escape('한글') | %uD55C%uAE00 | 유니코드 값을 표현 |
encodeURIComponent('한글') | %ED%95%9C%EA%B8%80 | utf-8로 인코딩. encodeURI() 함수도 동일한 결과 출력 |
두 함수의 실행 결과를 보면 encodeURIComponent() 함수가 utf-8로 인코딩한 결과를 보여줌을 알 수 있다. 따라서, XMLHttpRequest로 한글 파라미터를 전송할 때에는 다음과 같은 방법을 사용하면 된다.
- 웹브라우저에서: 자바스크립트 encodeURIComponent() 함수를 사용하여 파라미터 값을 utf-8로 인코딩하여 전송한다.
- 서버에서: 파라미터 값을 utf-8로 디코딩하여 읽어온다.
웹브라우저의 코드를 작성하면 다음과 같을 것이다. (POST 방식으로 전송할 때에도 같은 방법으로 파라미터를 인코딩하면 된다.
)<script type="text/javascript"> function sendData() { var xmlHttp = null; if( window.XMLHttpRequest ){ xmlHttp = new XMLHttpRequest(); } else{ xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } if( xmlHttp ){ var nameValue = document.memberForm.name.value; var idValue = document.memberForm.id.value; var param = "name="+encodeURIComponent(nameValue)+"&id="+encodeURIComponent(idValue); xmlHttp.open('GET', 'http://www.some.com/receive.jsp?'+param, true); xmlHttp.onReadyStateChange = function(){ if( xmlHttp.readyState == 4 ){ alert(xmlHttp.responseText); } } xmlHttp.send(null); } } </script>
서버에서는 파라미터를 utf-8로 읽어오기만 하면 된다. 예를 들어, JSP를 사용한다면 다음과 같이 파라미터의 인코딩을 utf-8로 지정하면 된다.
<% request.setCharacterEncoding("utf-8"); ... String name = request.getParameter("name"); %>
PHP나 ASP.net과 같은 다른 서버 프로그래밍 언어에서도 JSP와 같은 방식으로 파라미터 값을 utf-8로 디코딩하여 읽어오면 파라미터를 알맞게 처리할 수 있다.
틀 프레임워크, 틀 자바스크립트 등을 개발하였으며, JSP 2.0 프로그래밍, JSP 실전 Know-how, Jakarta Project 등의 책을 집필하였다. 자바캔의 운영자이며, 현재 CVNet e-biz 팀에서 근무하고 있다.
설정
트랙백
댓글
글
Ajax.Responders.register({
onCreate: function() {
if($('indicator') && Ajax.activeRequestCount > 0)
Effect.Appear('indicator',{duration: 0.25, queue: 'end'});
},
onComplete: function() {
if($('indicator') && Ajax.activeRequestCount == 0)
Effect.Fade('indicator',{duration: 0.25, queue: 'end'});
}
});
설정
트랙백
댓글
글
대부분의 어플리캐이션에서 가장 부하가 많이 걸리는 부분은 DB 에 접속 하는 부분이라고 합니다. 그에따라 대부분의 상용 사이트 혹은 동시접속자가 생기는 솔루션의 경우에는 DataBase Pool 이라는 기법을 이용하여 Connection 되어있는 객체를 생성하고, 요구사항이 있을때 임대해 주는 방식을 많이 사용합니다. 이 부분을 직접 작성해 보는것 또한 많은 것을 학습할 수 있는 기회가 되지만, 실제 서비스되는 곳에 실험적으로 만들어진 코드를 사용하기는 현실적으로 많이 어려운것 같습니다.
따라서 apache 재단의 Java 서브 프로젝트인 jakarta 에서 DBCP 라는 프레임워크(?) 많이들 이용하고 있습니다. 물론, 학습시에 말이죠. :-)
자바를 배워 나아간다는것은, 영업직들의 화려한 활약으로 인해서 EJB 가 필수적인 스킬이 되어 가고 있는 상황이고 EJB 라는 녀석 자체가 초기 투자비용이 워낙 큰 녀석이다보니 WAS 에서 학습시에 세팅에 열을 올리는 대부분의 것들을 자체적으로 지원해 주기 마련입니다. 그래서 DBCP(DB Connection Pool) 에 대한 전반적인 지식이 없이 EJB 로 넘어가는 사례를 많이 보곤 합니다. 하지만 제가 항상 강조하듯이 지식을 끌어안지 못하고 과정을 학습하는것은, 차후에 그것을 기반으로 한 상위의 무언가를 배울때 걸림돌이 될 것이 확실하다고 생각합니다.
그래서 결론은, 'DBCP 에 대한 전반적인 지식을 끌어안고 상위로 나아가자' 가 되겠죠. :-)
항상 포스팅을 할 때마다 느끼는것이지만, 사설이 너무 길어지는거 같습니다.
1> 라이브러리 복사.
2> server.xml ==> <Resource /> 추가
3> context.xml 혹은 server.xml ==> <ResourceLink /> 추가
4> web.xml ==> <resource-ref> ... </resource-ref> 추가
5> TEST!!
1-1> DBCP 라이브러리 복사.
common-collections-3.2.jar
common-dbcp-1.2.1.jar
common-pool-1.3
위의 3개 파일을 <context>/WEB-INF/lib 디렉토리에 복사.
1-2> oracle JDBC 드라이버 파일 복사.
ojdbc14.jar
위 파일을 <context>/WEB-INF/lib 디렉토리에 복사.
[<TOMCAT_HOME>/common/lib 디렉토리에 복사]
2> server.xml 파일의 <GlobalNamingResources> 의 내부태그로 <Resource /> 추가
<Resource auth="Container" driverClassName="oracle.jdbc.driver.OracleDriver" maxActive="20" maxIdle="10" maxWait="-1" name="jdbc/project" password="tiger" type="javax.sql.DataSource" url="jdbc:oracle:thin:@127.0.0.1:1521:xe" username="scott" />
3> context.xml 혹은 server.xml 파일의 <Context> 의 내부태그로 <ResourceLink /> 추가
<ResourceLink global="jdbc/project" name="jdbc/project" type="javax.sql.DataSource" />
4> web.xml 파일에 <resource-ref> 추가.
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/project</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
5> TEST!!퍼온곳 http://blog.rooine.com/trackback/8 입니다.
<%@ page contentType="text/html" pageEncoding="UTF-8"
import="java.sql.*"
import="javax.sql.*"
import="javax.naming.*"
%>
<html>
<head>
<title></title>
</head>
<body>
<%
try {
Context initCtx = new InitialContext();
Context envCtx = (Context)initCtx.lookup("java:/comp/env");
DataSource ds = (DataSource)envCtx.lookup("jdbc/project");Connection conn = ds.getConnection();
out.write("DB Connection..");
conn.close();
}
catch(Exception e) {
e.printStackTrace();
}
%>
</body></html>
설정
트랙백
댓글
글
난이도 : 중급
2007 년 8 월 28 일 JDOM은 XML과 함께 작동하는 고유한 자바 툴킷으로서, XML 애플리케이션의 신속한 개발을 목적으로 설계되었습니다. JDOM의 디자인에는 자바 언어의 신택스부터 의미까지 포괄되어 있습니다. 하지만, 기존의 XML API보다 과연 얼마나 나을까요? 여러분이 직접 예제를 실행해 보고, 오픈 소스 프로젝트의 디자인 목표와 비교 개발자인 여러분들도 80-20 규칙에 대해 들어봤을 것이다. 프로세스나 방법론이 모든 물론, 소프트웨어 제품과 표준이 80-20 규칙을 늘 따르는 것은 아니다. 여러 가지 면에서, 자바 언어는 XML을 위한 프로그래밍 언어가 되었다. Apache Software Foundation과 IBM alphaWorks의 노력으로 XML 문서의 많은 자바 개발자들은 XML을 매일 사용하지만, Sun은 XML을 자바 플랫폼에
이러한 패키지들의 추가가 자바 개발자들에게는 좋은 일이지만, 고급의 자바-XML 상호 운용성으로 큰 도약을 이룬 것이 아닌 기존 API 표준에 대한 일반적인 순응을 나타낸다. 핵심 자바 플랫폼에서 부족한 것은 XML 문서를 자바 객체로서 조작할 수 있는 매력적인 인터페이스이다. JDOM을 생각해 보자. 유명한 자바 개발자이자 작가인 Brett McLaughlin과 Jason Hunter의 생각의 산물인 JDOM은 2000년 초반에 Apache 계열의 라이센스 하에서 오픈 소스 프로젝트로서 시작되었다. 폭넓은 자바 개발자 베이스로부터 기여와 피드백, 버그 픽스를 받아들였고, 자바 코드에서 XML 데이터에 액세스 하여, 조작 및 결과를 만들어 내는 완벽한 자바 플랫폼 기반의 솔루션 구현을 목표로 설정했다.
JDOM은 XML 문서들을 프로그래밍 방식으로 조작하는 대안 API의 필요성을 이해하려면, W3C DOM의 디자인 제약 조건에 대해 살펴보자.
프로그래머에게, 이러한 제약 조건은 (메모리 사용과 인터페이스 규모 면에서) 무겁고 다루기 어렵다는 것을 의미한다. 반대로, JDOM은 자바 중심의, 경량의 API이다. DOM의 원리를 조정하여 위에 언급한 불편함을 해소시켰다.
JDOM은 표준 자바 코딩 패턴을 사용한다. 가능하다면, 복잡한 팩토리 패턴 대신에 자바 Listing 1. 구현할 XML 문서 샘플
주: 아래 Listing 2부터 7까지 샘플 문서를 구현할 것이다. 먼저, 루트(root) 엘리먼트를 만들고 이를 문서에 추가한다. Listing 2. Document 구현하기
이 단계는 새로운 다음에는, Listing 3. Attribute 추가하기
엘리먼트를 추가하는 것도 매우 단순하다. Listing 4. 엘리먼트와 하위 엘리먼트
Listing 5. 간결한 형식으로 엘리먼트 추가하기
이 문장들 모두 같은 일을 수행한다. 첫 번째 예제는 보다 읽기 쉽지만, 두 번째는 많은 엘리먼트들을 한번에 구현한다면 더욱 읽기 쉬울 것이라고 말할 수도 있겠다. 문서 구현을 완료하려면 다음과 같이 한다. Listing 6. 나머지 엘리먼트 추가하기
주석 섹션이나 기타 표준 XML 유형을 추가하는 것도 같은 방식이다. Listing 7. 주석 추가하기
문서 조작은 비슷한 방식으로 발생한다. 예를 들어, Listing 8. 자식 엘리먼트에 액세스 하기
이 문은 실제로 엘리먼트 이름 Listing 9. 자식 엘리먼트 제거하기
이 호출은 엘리먼트만 제거한다. 나머지 문서는 바뀌지 않은 채로 남아있다. Listing 10. JDOM을 XML 텍스트로 바꾸기
Listing 11. FileWriter를 사용하여 XML 출력하기
JDOM의 재미있는 기능들 중 하나는 다른 API들과의 상호 운용성이다. JDOM을 사용하여, JDOM의 또 다른 사용법은 이미 존재하는 XML 데이터를 읽고 조작하는 기능이다. 잘 구성된 XML 파일을 읽는 것은 Listing 12. SAXBuilder를 사용하여 XML 파일 파싱하기
Listing 2부터 7까지의 방식과 똑같이 이 프로세스를 통해 구현된 문서를 조작할 수 있다. JDOM의 또 다른 적용은 이를 Apache의 Xalan 제품과 결합하는 것이다. (참고자료) 위 자동차 예제를 사용하여, 특정 자동차에 대한 상세를 제공하는 온라인 자동차 딜러용 웹 페이지를 구현할 것이다. 우선, 이 문서는 우리가 사용자에게 제공하고자 하는 자동차에 대한 정보를 나타낸다. 그런 다음, 이 JDOM 이 경우, 우리가 사용할 XSL 스타일시트는 Listing 13. 자동차 기록을 HTML로 변형하는 XSL 문서
이제, Listing 14. JDOM과 Xalan을 사용하여 HTML 문서 생성하기
이 예제에서, 아웃풋은 자바 서블릿의 몇 줄의 코드로, JDOM은 다양한 기능을 실행한다. 우리는 XML에서 파싱하고 프로그래밍 방식으로 XML 문서를 생성하고, 그러한 문서들을 조작했고, XML 중심의 웹 페이지를 생성하는데 이를 사용했다. |
설정
트랙백
댓글
글
int to String
String str = Integer.toString(i);
String str = "" + i;
String to int
int i = Integer.parseInt(str);
int i = Integer.valueOf(str).intValue();
double to String
String str = Double.toString(d);
long to String
String str = Long.toString(l);
float to String
String str = Float.toString(f);
String to double
double d = Double.valueOf(str).doubleValue();
String to long
long l = Long.valueOf(str).longValue();
long l = Long.parseLong(str);
String to float
float f = Float.valueOf(str).floatValue();
decimal to binary
String binstr = Integer.toBinaryString(i);
decimal to hexadecimal
String hexstr = Integer.toString(i, 16);
String hexstr = Integer.toHexString(i);
Integer.toHexString( 0x10000 | i).substring(1).toUpperCase());
hexadecimal(String) to int
int i = Integer.valueOf("B8DA3", 16).intValue();
int i = Integer.parseInt("B8DA3", 16);
ASCII Code to String
String char = new Character((char)i).toString();
Integer to ASCII Code
int i = (int) c;
Integer to boolean
boolean b = (i != 0);
boolean to Integer
int i = (b)? 1 : 0;
설정
트랙백
댓글
글
Context 설정 MS - SQL - 2005
------------------------------------------------------------------------------
<?xml version='1.0' encoding='utf-8'?>
<Context crossContext="true" debug="5" docBase="사용자" path="/사용자" reloadable="true">
<Logger className="org.apache.catalina.logger.FileLogger" prefix="사용자log." suffix=".txt" timestamp="true"/>
<Resource auth="Container" name="umsdb" type="javax.sql.DataSource"/>
<Resource auth="Container" description="사용자명 Conntion Pool" name="Catalina/localhost/사용자위치" type="javax.sql.DataSourcee"/>
<ResourceParams name="umsdb">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>100</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>10000</value>
</parameter>
<parameter>
<name>password</name>
<value>패스워드</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:sqlserver://아이피:포트;DatabaseName=DB명</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>com.microsoft.sqlserver.jdbc.SQLServerDriver</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>30</value>
</parameter>
<parameter>
<name>username</name>
<value>아이디</value>
</parameter>
</ResourceParams>
</Context>
위에 2부분이 병경되었다.
jar 파일은 열어보면 해드오류 난다 머리가없는것이다.
RECENT COMMENT