[JSP/Servlet] request.getParameter() 한글깨짐 현상 - 필터 적용하기

DANI·2023년 11월 12일

JSP/Servlet

목록 보기
5/9
post-thumbnail

🔴 request 기본 객체 : 파라미터로 값 받아오기 (RequestParameterMain.jsp)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>RequestParameterMain</title>
</head>

<body>
<%
	String name = "홍길동";
	int age = 20;
%>

<form action="RequestParameterResult.jsp" method="post">
이름 : <input type="text" name="name" value="<%=name %>"> <br />
나이 : <input type="number" name="age" value="<%=age %>" > <br />
취미 : 
<input type="checkbox" name="hobby" value="game"> 게임
<input type="checkbox" name="hobby" value="movie"> 영화
<input type="checkbox" name="hobby" value="travel"> 여행<br />
<button type="submit">전송</button>

</form>
</body>
</html>

🔴 request 기본 객체 : 파라미터로 값 받아오기 (RequestParameterResult.jsp)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>RequestParameterResult</title>
</head>
<body>
<%
	
	String name = request.getParameter("name");
	int age = Integer.parseInt(request.getParameter("age"));
	String[] hobby = request.getParameterValues("hobby");
	%>
	<%=name %>님의 나이는 <%=age %>살이며 취미는 
	<% 
	for(String hobbys : hobby){
		out.print(hobbys + " "); 
	}
	%>
	입니다.
</body>
</html>

💻 렌더링


🚫 Error 발생 : 한글깨짐 오류가 발생했다!

🔑 해결 방안 : Post 방식의 표현에서 한글 깨짐

request.getParameter로 한글이 깨질 경우, 그 전에

request.setCharacterEncoding("utf-8"); 를 먼저 추가하면 해결이 되지만,,,
계속해서 추가할 수는 없으니 필터를 적용해보자


💡 why?


request.getParameter은 기본적으로 ISO-8859-1로 디코딩하는데, 보내는 쪽 charset이 utf-8이기 때문에 utf-8로 보내게 된다.

따라서 받는 쪽에서도 utf-8로 입력된 한글을 받게되는데
request.getParameter은 ISO-8859-1로 디코딩하기때문에 한글이 깨져 나온다.




💻 필터 적용하기

1. 톰캣 홈페이지 접속

https://tomcat.apache.org/tomcat-9.0-doc/config/filter.html

2. Set Character Encoding Filter 찾기


톰캣 홈페이지에 설정 적용 방법이 나와있다!


4. 내 프로젝트의 web.xml 수정하기


✅ 아래 코드 추가

<filter>
  	<filter-name>SetCharacterEncoding</filter-name>
  	<filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
        <!-- utf-8로 인코딩 값 설정 -->
  		<init-param>
  			<param-name>encoding</param-name>
  			<param-value>utf-8</param-value>
  		</init-param>
</filter>
  
<!-- 모든 url에 필터를 적용시키겠다 -->
<filter-mapping>
  	<filter-name>SetCharacterEncoding</filter-name>
  	<url-pattern>/*</url-pattern>
</filter-mapping>

0개의 댓글