(2022) 공부 (Study)

🔥 JSP 기본 정리 - #15 한글 처리 방법

수낭 2020. 12. 31. 16:18

 

 이번 시간에는 JSP 파일에서 한글을 정상적으로
인식 및 출력하도록 하는 방법에 대해서 학습해보겠습니다.


🔑 목차

🎉 1. 한글 처리 방법

🎉 2. Filter를 사용한 방법 (Chain 기법)

 

한글정상적으로 출력될 수 있는 방법에 대해서 학습해보자.

 servlet에서 setCharacterEncodingsetContentType 함수를 호출 및 설정해준다.
사용될 .jsp 파일에서 setCharacterEncodingUTF-8로 설정해준다.

 serverxml 파일에서 Connector 태그의 URIEncoding 속성을 추가해주고
 
해당 속성을 “UTF-8”로 설정한다..
 EUC-KRUTF-8 두 가지 중, UTF-8만국 언어를 다 지원하기에 더 잘 쓰인다.

 

🚩 1.  한글 처리 방법

< POST 방식 >

(1) JSP에서 Servlet으로 post 방식

우선, 요즘 모든 언어에 쓰이고 인기있는 UTF-8의 형식으로 바꿔주자.

<전송하는 jsp 파일>

<%@ 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_nick"><br>
			<input type="submit" value="로그인">
		</form>
	</body>
</html>

contentType, pageEncoding 모두 UTF-8로 바꿔준다..
 meta 태그의 charset 또한 UTF-8로 바꿔준다.
 form 태그의 action을 해당 Servlet으로 설정해준다.

<전송받는 servlet 파일>

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
	throws ServletException, IOException {
	
	request.setCharacterEncoding("UTF-8");
	response.setContentType("text/html; charset=UTF-8");

	String m_name = request.getParameter("m_name");
	String m_nick = request.getParameter("m_nick");
	
	PrintWriter out = response.getWriter();
	out.print("<p>이름 : " + m_name + "</p>");
	out.print("<p>별명 : " + m_nick + "</p>");
}

위는, 전송된 request에서 m_name과 m_nick 라는 이름으로 저장된 파라미터를
변수에 저장 및 출력하는 구문이다.

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

이렇게 2줄만 작성해주면 된다.
  (가장 위에 작성되어야 한다.)
항상 동일하기 때문에, /추천한다.

이름 및 별명을 입력 - 로그인
정상 출력

(2) JSP에서 JSPpost방식

<전송하는 jsp 파일>

<%@ 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.jsp" method="post">
			이름 : <input type="text" name="m_name"><br>
			별명 : <input type="text" name="m_nick"><br>
			<input type="submit" value="로그인">
		</form>
	</body>
</html>

위는, 처음 로그인 화면의 .jsp 코드이다.

<form action="mSignUp.jsp" method="post">
...
</form>

전송받는 파일jsp이므로, .jsp 확장자명을 추가해줘야 한다.

<전송받는 jsp 파일>

<% 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 m_name;
		String m_nick;
		%>
		<%
		m_name = request.getParameter("m_name");
		m_nick = request.getParameter("m_nick");
		%>
		
		<p>이름 : <%=m_name %></p>
		<p>별명 : <%=m_nick %></p>
	</body>
</html>

 위는, 로그인 성공 시 출력할 화면의 .jsp 코드이다.

<% request.setCharacterEncoding("UTF-8"); %>

가장 윗 줄에, 위 구문을 추가해주면 된다.

이름과 별명을 입력 - 로그인
정상 출력

< GET 방식 >

 GET 방식은 POST 방식처럼 할 수 없고,
 
server.xml 파일을 통해서 할 수 있다.

- server.xml 파일에서 Ctrl+F 단축키로 Connector connection ... 내용을 찾는다.

 Connector 태그의 부분은 위와 같다.

<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8090" protocol="HTTP/1.1" redirectPort="8443"/>
    <!-- A "Connector" using the shared thread pool-->
	
    ...

Connector 태그에 URLEncoding=”UTF-8” 속성만 넣어주면 된다.

마지막으로 Tomcat 클릭, Publish to server 버튼을 통해 싱크를 맞춰준다.
(
eclipse에 있는 server.xml 파일은 임시 복사본이기 때문에, 서버에 넘겨주는 작업)

 

🚩 2. Filter를 사용한 방법

 Filter브라우저에서 오는 데이터를 한 번 걸러서 웹 서버로 보내고,
웹 서버에서 오는 데이터를 한 번 걸러서 브라우저보내는 역할을 한다.

 Filter라는 것을 이용하면, 조금 전에 배웠던 한글 처리 작업
좀 더 쉽게 할 수 있다.

 Filter인터페이스이기 때문에, 이를 사용하기 위해서는
따로
사용자 정의 class를 만들어서 Filterimplements 해야 한다.

 Filter implements하게 되면, 3가지 메소드구현해야 한다.
    1) init(), 2) doFilter(), 3) destory()

폴더 - New - Filter 선택

<filter 파일>

public class TempFilter implements Filter {
	public void init(FilterConfig fConfig) throws ServletException {
		System.out.println("---filter init---");
	}

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

 Filter 파일의 코드는 위와 같다.

request.setCharacterEncoding("UTF-8");

 앞의 방법들과 동일하게 위의 문장만 추가해주면 된다.
(위에서 .jsp 파일의 가장 윗단에 선언했던 구문)

<web.xml 파일>

...

</web-app>
    <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>

 filter 태그를 사용한 모습은 위와 같다.

<url-pattern>/*</url-pattern>

 “/*모든 파일에 대해 Filter 적용한다는 의미이다.

"한글" 정상 출력

 

JSP를 주제로한 포스팅은 이 포스팅이 마지막입니다.
다음 주제를 기대해주세요! 😁