jsp와 servlet에서의 한글처리
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 방식으로 한글을 넘겼을때 ???가 나와 제대로 출력하지 못하는 모습을 보여준다.
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
servlet 파일에 이 코드를 추가해주면 한글이 깨지지 않고 잘 출력된다.
- 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”)을 입력해주면 된다 !
-
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