JAVA

[JSP] Servlet 한글 깨짐 해결 / 한글 처리 방식

menus 2023. 9. 21. 01:51
728x90

 

 

안녕하세요 !      ( •̀ ω •́ )✧

 

 

이번 글에서는 JSP에서 한글을 처리하는 방식을 알아보겠습니다 !

 

( 저는 jdk-17버전, tomcat 9버전을 사용하여 eclipse로 진행했습니다. )

 

 

 


 

 

 

우선 eclipse 내에서 Dynamic Web Project를 생성해줍니다.

 

저는 다음과 같이 korJSP 라는 이름으로 프로젝트를 만들었습니다.

 

프로젝트 폴더 안의 webapp 폴더 하위에 korJSP라는 jsp 파일을 생성해준 뒤,

 

다음과 같이 작성해주었습니다.

 

 

 

korJSP.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>JSP - 한글 처리</title>
</head>
<body>
	<form action=./kor method=post>
		이름 : <input type="text" name="name">
		<input type="submit" value="전송">
	</form>
</body>
</html>

 

이름을 입력받을 input태그를 생성해주고, form의 데이터를 전송해줄 submit타입의 input태그도 만들어주었습니다.

 

 

Java Resources 폴더 아래 src/main/java 폴더에 KorJSP라는 클래스를 만들어준 뒤

 

다음과 같이 작성해주었습니다.

 

 

 

KorJSP.java

package korJSP;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class KorJSP extends HttpServlet  {
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		PrintWriter out = response.getWriter();
		out.print("<html><head><title>Query 문자열 테스트</title></head>");
		out.print("<body>");
		out.print("<h1>POST 방식으로 요청되었습니다.</h1>");
		
		String name = request.getParameter("name");
		out.print("이름 : " + name + "<br/>");
		
		out.println("</body></html>");
		out.close();
	}
}

 

이제 jsp에서 전달한 값을 받아줘야하는데, web.xml에서 servlet-mapping을 해주도록 하겠습니다.

 

프로젝트 폴더 아래, src > main > wepapp > WEB-INF 하위에 web.xml을 다음과 같이 작성해줍니다.

 

 

 

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>korJSP</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.jsp</welcome-file>
    <welcome-file>default.htm</welcome-file>
  </welcome-file-list>
  
  <servlet>
  	<servlet-name>KorJSP</servlet-name>
  	<servlet-class>korJSP.KorJSP</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>KorJSP</servlet-name>
  	<url-pattern>/kor</url-pattern>
  </servlet-mapping>
  
</web-app>

 

 

servlet-mapping을 /kor로 해주었고, jsp에서 form의 action을 ./kor로 연결해둡니다.

 

이렇게 작성하면 . . . 

 

 

위와 같은 화면을 확인할 수 있습니다 !

 

이때 입력칸에 이름을 입력하고 전송버튼을 누르면 . . .

 

 

이렇게 한글이 깨지는 것을 볼 수 있습니다.

 

한글 깨짐을 방지하려면 KorJSP.java 파일에 아래 코드를 추가해줍니다.

 

request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");

 

이렇게 코드를 넣어주면 korJSP.jsp 에서 servlet에 UTF-8 형식으로 request하게 되며,

 

servlet은 화면에 요청받은 UTF-8 형식으로 response합니다.

 

수정된 뒤의 화면입니다.

 

위에서는 doPost를 이용해 POST방식을 썼지만, GET도 사용할 수 있습니다.

 

doGet을 이용해 GET 방식을 이용할 때 한글을 인코딩 하려면 jsp파일 내에 

 

<meta charset="UTF-8">

 

위 코드를 추가해주면 됩니다.

 

 

다음은 doGet() 이 포함된 KorJSP.java의 전체 코드입니다.

 

 

 

KorJSP.java

package korJSP;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class KorJSP extends HttpServlet  {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
		out.print("<html><head><title>Query 문자열 테스트</title></head>");
		out.print("<body>");
		out.print("<h1>GET 방식으로 요청되었습니다.</h1>");
		
		String name = request.getParameter("name");
		out.print("이름: " + name + "<br/>");
		
		out.println("</body></html>");
		out.close();
	}
	
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset=UTF-8");
		
		PrintWriter out = response.getWriter();
		out.print("<html><head><title>Query 문자열 테스트</title></head>");
		out.print("<body>");
		out.print("<h1>POST 방식으로 요청되었습니다.</h1>");
		
		String name = request.getParameter("name");
		out.print("이름 : " + name + "<br/>");
		
		out.println("</body></html>");
		out.close();
	}
	
}

 

 


POST : URL에 정보가 전달되지 않는 방식으로 개인정보와 같은 민감한 정보가 있을 때 사용

GET : URL에 정보가 전달되기 때문에 일반적으로 검색창과 같은 기능에 사용


 

여기까지 JSP에서 POST와 GET방식으로 한글 처리 하는 방법을 알아보았습니다  !

 

감사합니다  !