https://www.youtube.com/playlist?list=PLq8wAnVUcTFVOtENMsujSgtv2TOsMy8zd
웹 프로그래밍을 할 때 인코딩은 중요한 요소이다. 영어만 사용한다고 했을 때에는 어떤 인코딩 방식을 사용해도 큰 문제가 없지만, 다른 언어나 특수문자, 이모지 등을 사용한다고 했을 때에는 인코딩이 중요해진다.
서블릿 프로그램을 만들 때에도 이 인코딩 방식을 설정할 수 있다. 인코딩을 설정하는 부분은 크게 클라이언트에서 서버로 요청이 들어오는 경우와 서버에서 클라이언트로 응답을 하는 부분이 있다. HttpServletRequest
와 HttpServletResponse
에는 내부적으로 캐릭터셋을 설정할 수 있는 메서드가 포함되어 있기 때문에 요청과 응답에 자신이 원하는 인코딩 타입을 입력해주면 되는데, 이러한 요청과 응답 코드를 작성하는 부분이 많이 있다면 필터를 통해 이 문제를 더 편하게 관리할 수 있다.
필터 만들기
필터를 만드는 방법은 간단하다. Filter
인터페이스를 구현한 클래스를 만들어주면 된다.
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("hello filter");
}
Filter
인터페이스에는 doFilter
라는 메서드가 있는데, 이를 우리가 만든 필터 클래스에서 구현해주면 된다.
필터 등록하기
필터를 등록하는 방법은 서블릿과 마찬가지로 web.xml에 직접 등록하거나 어노테이션을 이용하는 방법이 있다.
...
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
...
@WebFilter("/*")
public class CharacterEncodingFilter implements Filter {}
이렇게 필터를 등록하고 톰캣 서버를 실행하면 hello filter
라고 콘솔창에 적히는 것을 확인할 수 있다.
필터와 서블릿
doFilter
메서드의 매개변수로 FilterChain
이 전달되는데, FilterChain.doFilter(request, response)
를 호출하게 되면 해당 필터 다음에 등록되어 있는 필터나 서블릿이 연속적으로 실행된다.
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
servletRequest.setCharacterEncoding("UTF-8");
filterChain.doFilter(servletRequest, servletResponse);
}
그래서 서블릿이 실행되기 전에 인코딩 설정을 진행하고 싶으면 filterChain.doFilter
앞에다 인코딩을 설정해주면 된다.
'프로그래밍 언어 > Java' 카테고리의 다른 글
자바 8 람다식 해설서 - 2장 스트림과 함수형 인터페이스 (0) | 2022.12.21 |
---|---|
자바 8 람다식 해설서 - 1장 람다식 (0) | 2022.12.21 |
서블릿 (0) | 2022.07.05 |
람다식 (0) | 2022.06.14 |