반응형

웹에서 입력한 한글을 받아서 출력할 때 한글이 깨지는 경우

글. 수알치 오상문

 

이클립스 사용 중(이클립스 환경은 UTF-8을 사용하도록 설정한 상태),

웹에서 한글 이름을 입력받고, 그 내용을 다시 웹에 출력하는데 한글 이름만 깨지는 경우가 있다.

(단순히 웹 소스 코드에 한글을 적어서 출력할 때는 한글이 정상적으로 동작한다.)

 

[입력 화면]

[결과 화면]

콘솔에 출력해도 전달받은 한글 부분이 깨지는데, 전달받은 글자 코드 설정을 해야 문제가 해결된다.

다음처럼 요청 데이터의 인코딩을 UTF-8로 설정하는 부분을 추가하면 한글이 정상 출력된다.

 

request.setCharacterEncoding("UTF-8");

 

 

 

[입력 받는 HTML 코드]

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Test</title>
</head>
<body>
    <h1>이름을 입력하세요.</h1>
    <form action="intro" method="post">
        <input type="text" name="name" style="width: 50px;">
        <input type="submit" value="Submit">
    </form>
</body>
</html>

 

 

[입력 내용을 받아서 다시 웹에 출력하는 Java 코드]

package exam;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(description = "Intro Servlet", urlPatterns = { "/intro" })
public class Intro extends HttpServlet {
    private static final long serialVersionUID = 1L;    

        public Intro() {
            super();
        }

        @Override
        public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");  // 이곳에서 요청에 대한 코드 지정
        String name = request.getParameter("name");
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        out.println(name + "님, 안녕하세요.");  // 웹에 반환 출력 
        System.out.println(name + "님, 안녕하세요.");  // 콘솔 출력 테스트 
    }         
}

 

 

반응형

+ Recent posts