jsp와 servlet에서의 한글처리

1 minute read

jsp 와 servlet 에서의 한글처리

: 인코딩방법을 잘 설정해주지 않아 한글출력이 깨지는 모습을 많이 봤을거다.

한글을 값으로 넘길때도 깨지지 않게 한글처리 하는걸 알아보자

  • POST 방식
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>


		<form action="mSignUp" method="post">
				이름 : <input type="text" name="m_name"><br>
				별명 : <input type="text" name="m_nickname"><br>
				<input type="submit" value="sign up">
		</form>
</body>
</html>
package com.servlet;

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

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("/mSignUp")
public class mSignUp extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		PrintWriter out = response.getWriter();
		String mName = request.getParameter("m_name");
		String mNickName = request.getParameter("m_nickname");

		out.println("<p>mName: "+mName);
		out.println("<p>mNickName: "+mNickName);

	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

post 방식으로 한글을 넘겼을때 ???가 나와 제대로 출력하지 못하는 모습을 보여준다.

image-20200318202913535

image-20200318202212000

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

servlet 파일에 이 코드를 추가해주면 한글이 깨지지 않고 잘 출력된다.

image-20200318202945959

  • GET방식
<% request.setCharacterEncoding("UTF-8");  %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
		<%!
				String mName;
				String mNickname;
		%>
		
		<%

				mName = request.getParameter("m_name");
				mNickname = request.getParameter("m_nickname");

		%>
		
		이름:<%= mName %><br>
		이름:<%= mNickname %>
		
</body>
</html>

jsp 파일에다가 맨위에 있는 requset.setCharacterEncoding(“UTF-8”)을 입력해주면 된다 !

image-20200318202843064

  • Filter

    마지막으로 Filter가 있다. 브라우저와 웹서버가 request , response하면서 중간에 필터를 거쳐 저렇게 코드를 매번 써주지 않아도 한글이 깨지지 않게 잘 출력된다 !

TempFilter.java 클래스

package com.servlet.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class TempFilter implements Filter {

	@Override
	public void destroy() {
		System.out.println("-- filter destroy() --");

	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		System.out.println("-- filter doFilter() --");
		request.setCharacterEncoding("UTF-8");
		chain.doFilter(request, response);
		
	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {
		System.out.println("-- filter init() --");
	}
	
}

먼저 Filter 인터페이스를 구현하는 클래스를 만들어준다. 그 다음

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_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>encoPjt</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  <filter>
  		<filter-name>tempFilter</filter-name>
  		<filter-class>com.servlet.filter.TempFilter</filter-class>
  </filter>
  <filter-mapping>
  		<filter-name>tempFilter</filter-name>
  		<url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

Comments