JSP

POST방식에 대한 자동한글처리를 해주는 Filter(필터) 만들기

bang2001 2013. 7. 25. 19:42
POST방식은 패킷 내부에 데이터를 포함하여 전달하는 방식이다. 따라서 JSP 작성시 
GET방식처럼 

<%@ page language="java" contentType="text/html; charset=EUC-KR" %>

위 방법(지시어에 한글처리를 한다고 선언하는 방법)처럼 할 수 있는것이 아닌,
service() 메소드의 매개변수인 HttpServletRequest 타입의 request라는 객체변수에
메소드를 사용하여 한글처리를 해야 한다. 

ex) <% request.setCharacterEncoding("EUC-KR"); %>

하지만 이 POST방식에서의 한글처리 방법은 매번 JSP 페이지마다 위의 코드를 삽입해야 한다는
번거로움이 존재한다. 이때 이러한 번거로움을 덜기 위해서 Filter를 제작하여 사용하면 된다.

다음 그림은 Filter에 대한 역할을 간단한 그림으로 표현한 것이다.

---------------------------------------------------------------------------------------------

 



-----------------------------------------------------------------------------------------

위 그림에서 알 수 있듯이 Filter는 말 그대로 중간에서 들어오는 데이터들에 대해서
한글처리를 하는 역할을 하게 된다. 이 필터를 만드는 방법은 먼저 java로 필터의 역할을
하는 클래스를 생성한 이후 web.xml 파일을 수정하면 된다. 아래를 참고해보자.

-----------------------------------------------------------------------------------------

package my.filter;

import java.io.*;
import javax.servlet.*;

public class EncodeFilter implements Filter
{
public EncodeFilter(){}
@Override
public void init(FilterConfig conf) throws ServletException{}
@Override
public void destroy(){}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOExceptionServletException
{
/* request를 보내기 전에 전처리할 코드가 있다면 여기서 처리한다.
* response를 보낸 후 후처리할 코드가 있다면 여기서 처리한다. */
req.setCharacterEncoding("EUC-KR");
chain.doFilter(req, res);
}//doFilter()==================================================================
}/////////////////////////////////////////////////////////////////////////////

/** 서블릿 필터는 Servlet 2.3이상에서 사용가능하다.
 *  필터는 웹 어플리케이션에서 사용하는 서블릿이나, jsp에 영향을 미치지 않고,
 *  request, response를 조작할 수 있도록 만들어 졌다.
 *  서블릿 필터는 request, response가 서블릿이나 jsp에 도달하기 전에 필요한 전 처리를
 *  가능하게 해주고, 필터들을 여러개 사용하면 연쇄적으로 사용할 수 있도록 해준다.
 *  단, 필터를 등록하고 사용해야 한다.
 *  "컨텍스트/WEB-INF/web.xml" 에 필터등록을 해야한다. */

/* web.xml 파일에 다음과 같이 작성해야 한다.
 *   
  <filter>
   <description>Encode Filter</description> <!-- 필터설명 -->
   <display-name>EncodeFilter</display-name>
   <filter-name>EncodeFilter</filter-name>
   <filter-class>my.filter.EncodeFilter</filter-class>
  </filter>
  
  <filter-mapping><!-- 모든 jsp파일에 대해서 필터를 걸어주었다. -->
   <filter-name>EncodeFilter</filter-name>
   <url-pattern>*.jsp</url-pattern>
  </filter-mapping>
  
 * */
-------------------------------------------------------------------------------------------

위와같이 하면 된다. 여기서 어려운점은 web.xml파일이 어디경로에 있는지 알 수 없다면 
위의 방법을 적용하는데 힘들수 있다. 이클립스에서 작업하는 분들이라면 

WebContent -> WEB-INF -> web.xml

에서 찾을 수 있다.
 
※ 참고로 url-pattern 의 내용에서 보면 단순히 파일의 포멧형식(확장자)에 대한 한글처리가 아닌 브라우져의 상단에서
    확인할 수 있는 url에서 요청하는 경로가 마지막에 확장자가 .jsp에 대한 요청에 대해서만 한글 처리를 해주는것이다.

    따라서 스프링의 경우 보통 url확장자를 htm으로 주는 경우가 많은데, 그럴 경우 *.htm을 추가해야 한다.

'JSP' 카테고리의 다른 글

JSP 한글파일명 다운로드 기능 구현 방법  (0) 2013.08.01
forward와 redirect의 차이점  (0) 2013.07.25
DBCP 구현하기  (0) 2013.07.25
JSP include 하는 방법 (총 2가지)  (0) 2013.07.25
서블릿에서 한국어 표현하기!  (0) 2013.07.25