728x90

한글을 사용할 경우에 깨지지 않고 정상적으로 출력하는 방법에 대해 알아보자.

 

한글을 이용해서 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

+ Recent posts