jb.log

..loading

한글 인코딩

September 22, 2019

servlet 클래스에서 한글을 출력하면 한글이 깨지는 것을 볼 수 있다. 해당 문제점은 다음과 같이 해결할 수 있다.

public class HelloServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse res) 
            throws ServletException, IOException 
    {   
    //출력 데이터의 인코딩을 UTF-8로 설정
        res.setCharacterEncoding("UTF-8");
        res.setContentType("text/html; charset=UTF-8");
        
        PrintWriter out = res.getWriter();
        
        out.println(data);
    }
}

하지만 Servlet 클래스는 하나만 있는 것이 아니다. 프로젝트의 규모가 커질 수록 Servlet 클래스를 여러개 생성하게 되는데, 그 때 마다 위와 같이 인코딩설정을 해주는 것은 같은 코드를 반복하여 사용하게 되는 것 이다.

필터(Filter)

클라이언트에서 온 요청은 servlet이 받기 이전에 Filter라고 하는 클래스에서 먼저 중간 처리를 할 수 있다. 다음 같은 클래스를 생성해보자.

public class CharacterEncodingFilter implements Filter 
{
    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
            throws IOException, ServletException 
    {
        
        req.setCharacterEncoding("UTF-8");
        
        res.setCharacterEncoding("UTF-8");
        res.setContentType("text/html; charset=UTF-8");

        chain.doFilter(req, res);
    }
}

위 클래스에 대한 설명은 다음과 같다.

  • 클래스명은 사용자가 임의로 지정
  • Filter 인터페이스를 구현 받음
  • doFilter 메소드를 오버라이딩하여 해당 로직을 작성

물론 위의 필터 역시 web.xml에 filter 속성으로 등록해주어야 한다.

Filter Mapping

필터 클래스를 톰캣에서 읽기 위해 매핑해줄 수 있는데 servlet과 마찬가지로 web.xml에 기술하는 방법과 어노테이션을 이용한 방법이 있다.

web.xml에서 등록

<filter>
  <filter-name>characterEncodingFilter</filter-name>
  <filter-class>com.example.web.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>characterEncodingFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

annotaction(@) 등록

@WebFilter("/*")
public class CharacterEncodingFilter implements Filter 
{
  ...
}
url을 위와 같이 /*를 사용하면 모든 주소 요청에 대한 처리를 하겠다는 것

Other Posts

October 1, 2019
jsp 프로젝트 만들기 - mvc1, mvc2
이전에 만든 `board-detail.jsp`은 DB와 잘 연결되어 화면에 데이터를 잘 출력하는 것을 볼 수 있다. 하지만 jsp 파일 내의 코드를 보면 자바코드와 html코드가 뒤엉켜 있는 것을 볼 수 있다. 이것을 스파게티 코드라 한다.
September 29, 2019
jsp 프로젝트 만들기 - 시작
본격적으로 jsp를 이용한 servlet 프로젝트를 만들어보겠다. jsp와 servlet의 활용 목적이 주된 내용이기 html/css 는 가급적 손대지 않고 비즈니스 로직에 집중하도록 하겠다.
September 25, 2019
jsp 프로그래밍
jsp란 `Java Server Pages` 의 약자이며 HTML 코드에 JAVA 코드를 넣어 동적웹페이지를 생성하는 웹어플리케이션 도구이다.
September 24, 2019
Servlet 상태관리
서블릿은 요청이 오면 응답을 주고 메모리에서 사라지기 때문에 서블릿들 간의 연결이 불가능하다. 만약 기존의 데이터를 저장할 일이 생겼다고 하면 서블릿 스스로 저장할 수 있는 것은 아니다. 이것은 ServletContext로 해결할 수 있다.
September 22, 2019
한글 인코딩
servlet 클래스에서 한글을 출력하면 한글이 깨지는 것을 볼 수 있다. 해당 문제점은 다음과 같이 해결할 수 있다.
September 20, 2019
Servlet 다루기
기존의 html 문서만으로는 동적인 내용을 전달할 수 없다. 때문에 WAS(web application server) 에서 동작하는 프로그래밍 언어를 사용하면 가능하다.