한글을 사용할 경우에 깨지지 않고 정상적으로 출력하는 방법에 대해 알아보자.
한글을 이용해서 post 방식으로 넘긴다면
이런 식으로 깨져서 넘어가고 나타나게 된다.
이럴 땐
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
국제 표준인 UTF-8로 설정을 하면 된다.
일단 이름이랑 사는 곳을 입력 받을 jsp를 만들어보자.
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="mSignUp" method="post">
이름 : <input type = "text" name="m_name"><br>
사는 곳 : <input type="text" name="m_location">
<input type="submit" value="sign up">
</form>
</body>
</html>
post 방식으로 mSignUp에 mapping 된 곳으로 넘긴다.
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet("/mSignUp")
public class SignUp extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
String mName = request.getParameter("m_name");
String mLoc = request.getParameter("m_location");
out.print("<p> mName : " + mName + "</p>");
out.print("<p> mLoc : " + mLoc + "</p>");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
이렇게 mapping 된 Servlet에
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
을 추가하고 실행해보자.
아까와 다르게 한글이 제대로 표시되는 것을 볼 수 있다.
이번엔 Servlet이 아닌 jsp로 넘기는 경우를 살펴보자.
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="mSignUp.jsp" method="post">
이름 : <input type = "text" name="m_name"><br>
사는 곳 : <input type="text" name="m_location">
<input type="submit" value="sign up">
</form>
</body>
</html>
action을 mSignUp.jsp로 바꾸어 주고
<% request.setCharacterEncoding("UTF-8");%>
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<html>
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<%!
String mName;
String mLoc;
%>
<%
mName = request.getParameter("m_name");
mLoc = request.getParameter("m_location");
%>
이름 : <%= mName%> <br>
사는 곳: <%=mLoc%>
</body>
</html>
이렇게 jsp 파일을 만들어준다.
그러면 이렇게 한글이 제대로 출력 되는 것을 볼 수 있다.
만약
<%@ page contentType="text/html;charset=UTF-8" language="java"%>
<html>
<head>
<title>Title</title>
</head>
<body>
<%!
String mName;
String mLoc;
%>
<%
mName = request.getParameter("m_name");
mLoc = request.getParameter("m_location");
%>
이름 : <%= mName%> <br>
사는 곳: <%=mLoc%>
</body>
</html>
이런 jsp 파일을 사용했다면
이렇게 깨져서 나오는 것을 볼 수 있다.
이렇게 하나씩 코드를 추가하는 것 말고 filter를 사용해서 한글 출력을 할 수 있는데
filter interface를 구현해서 web.xml에 추가하는 것이다.
import jakarta.servlet.*;
import java.io.IOException;
public class myFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("-- filter doFilter() --");
//request filter
servletRequest.setCharacterEncoding("UTF-8");
servletResponse.setCharacterEncoding("UTF-8");
filterChain.doFilter(servletRequest, servletResponse);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("-- filter init() --");
}
@Override
public void destroy() {
System.out.println("-- filter destroy() --");
}
}
filter를 implements 해서 doFilter 안에 UTF-8로 인코딩 하는 코드를 달아준다.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<filter>
<filter-name>myFilter</filter-name>
<filter-class>myFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>myFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
그리고 xml에 이렇게 filter 관련된 태그를 달아주면 위처럼 한글이 깨지지 않게 된다.
'백엔드 > JSP, Servlet' 카테고리의 다른 글
JSP & Servlet 11일차 (0) | 2023.02.05 |
---|---|
JSP & Servlet 10일차 (0) | 2023.01.16 |
JSP & Servlet 9일차 (0) | 2023.01.15 |
JSP & Servlet 8일차 (0) | 2023.01.04 |
JSP & Servlet 7일차 (0) | 2023.01.04 |