JSDK 1.1 호환 환경에서의 서블릿 한글 처리 방법


[ 다음 글들 ] [ 이어서 글올리기(답하기) ] [ 자바 묻고 답하기 ]

글쓴이 :김덕태 1998년 4월 23일 01:31:43

서블릿에서 한글 처리를 방법이 여러가지가 있으나, 다음 예제 프로그램은
자바의 일반적인 유니코드 처리 모델을 따르면서 프로그래밍을 하는
표준화된 방법이며, 잇점으로는 프로그래밍하기 간편하면서 프로그램의
별다른 수정없이 필요에 따라 문서 인코딩을 손쉽게 바꿀 수 있는 방법입니다.


단, 다음 서블릿들 예제 프로그램은 JSDK (Java Servlet Developer Kit) 1.1
호환 환경에 맞추어져 있습니다.


자바가 좀더 인코딩 이름을 제대로 지원하게 되면, 예제 프로그램내의
약간의 지저분한 코드도 필요없어질 것입니다.


JSDK 1.1은 JDK 1.2에 내장되어 있으며 javax.servlet 패키지 1.1과
servletrunner 프로그램으로 이루어져 있습니다.


http://calab.kaist.ac.kr/~dtkim/java/ 에서 가져가실 수도 있습니다.


============ DoGetTest.java ============
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class DoGetTest extends HttpServlet
{
    public void doGet( HttpServletRequest req, HttpServletResponse res )
        throws ServletException, IOException
    {
        res.setContentType("text/html; charset=euc-kr");
        // PrintWriter out = res.getWriter(); // servlet 패키지 1.1의 버그!
        PrintWriter out = new PrintWriter(
            new OutputStreamWriter(res.getOutputStream(), "KSC5601") );
        String title = "doGet 테스트";
        out.println( "<HTML><HEAD><TITLE>" );
        out.println( title );
        out.println( "</TITLE></HEAD><BODY>" );
        out.println( "<H1>" + title + "</H1>" );
        out.println( "<P>HTML 문서입니다." );
        out.println( "</BODY></HTML>" );
        out.close();
    }
}

============ UTF8Servlet.java ============
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class UTF8Servlet extends HttpServlet
{
    public void doGet( HttpServletRequest req, HttpServletResponse res )
        throws ServletException, IOException
    {
        res.setContentType( "text/html; charset=utf-8" );
        // PrintWriter out = res.getWriter(); // servlet 패키지 1.1 버그!
        PrintWriter out = new PrintWriter(
            new OutputStreamWriter(res.getOutputStream(), "UTF8") );
        String title = "UTF-8 출력 테스트";
        out.println( "<HTML><HEAD><TITLE>" );
        out.println( title );
        out.println( "</TITLE></HEAD><BODY>" );
        out.println( "<H1>" + title + "</H1>" );
        out.println( "UTF-8 인코딩의 8859-1문자: "
                     + "\u00a1\u00a2\u00a3\u00a4" );
        out.println( "UTF-8 인코딩의 현대 한글 문자: "
                     + "\uac00\uac01\uac02\uac03" );
        out.println( "</BODY></HTML>" );
        out.close();
    }
}

============ UnicodeServlet.java ============
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class UnicodeServlet extends HttpServlet
{
    public void doGet( HttpServletRequest req, HttpServletResponse res )
        throws ServletException, IOException
    {
        res.setContentType( "text/html; charset=csUnicode" );
        // PrintWriter out = res.getWriter(); // servlet 패키지 1.1 버그!
        PrintWriter out = new PrintWriter(
            new OutputStreamWriter(res.getOutputStream(), "UnicodeLittle") );
                                   
        String title = "유니코드 출력 테스트";
        out.println( "<HTML><HEAD><TITLE>" );
        out.println( title );
        out.println( "</TITLE></HEAD><BODY>" );
        out.println( "<H1>" + title + "</H1>" );
        out.println( "유니코드 인코딩의 8859-1문자: "
                     + "\u00a1\u00a2\u00a3\u00a4" );
        out.println( "유니코드 인코딩의 현대 한글 문자: "
                     + "\uac00\uac01\uac02\uac03" );
        out.println( "</BODY></HTML>" );
        out.close();
    }
}

============ FormServlet.java ============
import java.util.*;
import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class FormServlet extends HttpServlet
{
    public void doGet( HttpServletRequest req, HttpServletResponse res )
        throws ServletException, IOException
    {
        res.setContentType("text/html; charset=euc-kr");
        PrintWriter out = new PrintWriter(
            new OutputStreamWriter(res.getOutputStream(), "KSC5601") );
        out.println("<html><head><title>HTML Form 테스트"
                          + "</title></head>");
        out.println("<body></h1>" + "HTML Form " + req.getMethod()
                           + " 의 결과: </h1>");
        out.println(
            "이름 = " + toHangul(req.getParameterValues("name")[0]) );
        out.println(
            "주소 = " + toHangul(req.getParameterValues("address")[0]) );
        out.println("</body></html>");
        out.close();
    }
    public void doPost( HttpServletRequest req, HttpServletResponse res )
        throws ServletException, IOException
    {
        doGet( req, res );
    }
    public static String toHangul( String str )
        throws UnsupportedEncodingException
    {
        if ( str == null )
            return null;
        return new String( str.getBytes("8859_1"), "KSC5601" );
    }
}


---
Deogtae Kim (김덕태)
CA Lab. CS Dept. KAIST
http://calab.kaist.ac.kr/~dtkim/java



다음 글들:



이어서 글올리기(답하기)

이름:
E-Mail:
제목:
내용:
관련 URL(선택):
URL 제목(선택):
관련 이미지 URL:


[ 다음 글들 ] [ 이어서 글올리기(답하기) ] [ 자바 묻고 답하기 ]