# 서블릿 UTF-8 설정
JSP와 서블릿 공부를 하던 도중 한글이 안되는 문제점을 확인하였다.
UsrHomeMain.jsp
package com.hjs.exam.exam2;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/usr/home/main")
public class UsrHomeMain extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().append("안녕").append(request.getContextPath());
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
한글을 써본 결과 : ??으로 출력된다 [한글을 인식못함]

## 한글 문제 해결
● requset.setCharacterEnconding("UTF-8");
● respone.setCharacterEnconding("UTF-8");
● respone.setContentType("text/html;charset=utf-8");
requset.setCharacterEnconding("UTF-8");
폼 태그에서 입력한 값을 전송할 때는 GET방식과 POST방식으로 보내는 값이 '한글'일 결우 깨지지 않게 전달하기 위해 사용하는 것이 request.setCharacterEncoding("UTF-8"); 이다.
respone.setCharacterEnconding("UTF-8");
서블릿에서 화면에 데이터를 출력하기 위해서는 out.println을 사용을 하는데 위의 코드없이 out.print("안녕")을 한다면 '안녕'이 출력되는 것이 아니라 ????과 같은 물음표가 출력이 된다.
이러한 문제점을 해결하기 위한 방법이 response.setCharacterEncoding("UTF-8");를 추가하는 것이다.
respone.setContentType("text/html;charset=utf-8");
그런데 respone.setCharacterEnconding("UTF-8"); 이 문장만 사용하면 '안녕'이라고 나오지 않고 '댊뀘'과 같ㅇ느 처음보는 이상한 문자가 출력된다.
이는 브라우저마다 기본적으로 문자콛를 해석하는 default가 다르기 때문이다.
그러니 브라우저에게 'utf-8로 사용하게 해줘'라는 메세지를 전달해야 한다.
이러한 메세지를 보내는 문장이 바로 respone.setContentType("text/html;charset=utf-8");이다.
package com.hjs.exam.exam2;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/usr/home/main")
public class UsrHomeMain extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("name");
// 들어오는 파리미터를 UTF-8로 해석
request.setCharacterEncoding("UTF-8");
// 서블릿이 HTML 파일을 만들때 UTF-8 로 쓰기
response.setCharacterEncoding("UTF-8");
// HTML이 UTF-8 형식이라는 것을 브라우저에게 알린다.
response.setContentType("text/html; charset=UTF-8");
response.getWriter().append("안녕");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}

한글이 잘 되는 것으로 해결 완료
'JSP 게시판' 카테고리의 다른 글
| 1. STS 설치 및 EMMET 플러그인 설치 (0) | 2021.08.05 |
|---|