본문으로 바로가기

JSP에서 한글 깨지는 문제 해결하기

category 코딩/JSP 2016. 11. 8. 14:31





JSP에서 한글을 입력할 경우 깨지는 경우가 있는데 전송 방식에 따라 다른 처리를 해줘야 한다.



소스코드


  • parameter01.jsp


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>parameter01.jsp 파리미터값 입력 페이지</title>
</head>
<body>
    <form action="parameter02.jsp" method="get">
        이름 : <input type="text" name="name" size="10"><br>
        주소 : <input type="text" name="address" size="30"><br>
        취미 :
            <input type="checkbox" name="hobby" value="game">게임
            <input type="checkbox" name="hobby" value="travel">여행
            <input type="checkbox" name="hobby" value="reading">독서
            <br>
        <input type="submit" value="전송">
    </form>
</body>
</html>
cs


  • parameter02.jsp


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
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
 
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>parameter02.jsp 파리미터값 출력 페이지</title>
</head>
<body>
 
    이름 : <%= request.getParameter("name"%><br>
    주소 : <%= request.getParameter("address"%><br>
    취미 : 
    <%
        // 체크박스는 배열로 처리해야 한다.
        String[] values = request.getParameterValues("hobby");
        if(values != null){
            for(int i=0; i<values.length; i++){        
    %>
        <%=values[i] %>
    <%                        
            }
        }
    %>
</body>
</html>
cs




GET 방식





form에서 파라미터를 전달할 때 GET 방식으로 지정해 보자.





텍스트 입력창에 한글을 입력 후 전송을 클릭한다.





그러면 파라미터 값이 전달된다. 그런데 한글로 입력한 값은 ???로 깨져서 보인다.





GET 방식일 경우 xml에 코드를 추가해줘야 한다. 이클립스를 실행시키면 Project Explorer에 Servers가 있을 겻이다. 여기에 있는 server.xml 파일을 연다. 참고로 톰캣이 설치된 폴더를 통해서도 server.xml에 접근이 가능하다. 아래 경로를 확인해 보면 server.xml이 있을 것이다.



  • 경로 : C:\Program Files\Apache Software Foundation\Tomcat 8.0\conf





server.xml을 보면 위와 같은 부분이 있을 것이다. 여기에 URIEncoding="euc-kr" 라는 코드를 추가하면 된다.



1
<Connector URIEncoding="euc-kr" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
cs



이런식으로 connectionTimeout 앞에 집어넣으면 된다.





그리고 다시 텍스트 입력창에 한글을 입력 후 전송하면 이번에는 한글이 깨지지 않고 표시된다.




POST 방식 




다음은 전송 방식을 post로 변경해 보자. post 방식의 경우 파라미터를 받는 페이지에서 인코딩 처리를 해야 한다. 여기서는 parameter02.jsp 가 파라미터를 받는 페이지이므로 여기서 처리를 해야 한다.





parameter02.jsp 에서 위에 보이는 소스코드를 입력해 주면 된다.



1
2
3
4
<%
    // 인코딩
    request.setCharacterEncoding("euc-kr");
%>
cs




RSS구독 링크추가 트위터 이메일 구독