본문 바로가기

JSP 게시판

1-1. 서블릿 UTF-8 설정

# 서블릿 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