readme.md
기록소
readme.md
전체 방문자
오늘
어제
  • 분류 전체보기
    • 네트워크
      • HTTP
      • 윈도우 소켓 프로그래밍
    • Windows API
    • 그래픽스
      • DirectX11
    • 일반
      • Linux
      • 데이터베이스
      • 팁
      • 책 후기
    • 쿠버네티스
    • 프로그래밍 언어
      • C#
      • Java
      • Go
      • C++
      • Lua
    • 책
      • 이펙티브 C++
      • 제프리 리처의 WINDOWS VIA C, C++
    • 기타

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • 가상함수
  • 캐스팅
  • 윈도우 소켓
  • wm_keyup
  • 상속
  • phong
  • 자원관리
  • 설계
  • emplace
  • 생성자
  • 초기화
  • 소멸자
  • 자바8
  • Graphics
  • imagestride
  • CPP
  • id3d11shaderresourceview
  • 템플릿
  • 인터페이스
  • windowsAPI
  • directx11
  • 버텍스 버퍼
  • C++
  • new
  • const
  • consteval
  • DirectX
  • 대입연산자
  • 소켓 프로그래밍
  • Delete

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
readme.md

기록소

프로그래밍 언어/Java

서블릿 필터

2022. 7. 12. 14:09

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
    '프로그래밍 언어/Java' 카테고리의 다른 글
    • 자바 8 람다식 해설서 - 2장 스트림과 함수형 인터페이스
    • 자바 8 람다식 해설서 - 1장 람다식
    • 서블릿
    • 람다식
    readme.md
    readme.md

    티스토리툴바