이전 블로그에서 Post요청으로 form태그를 Body(정확하게는 Header이다.)에 Key값과 Value값을 입력해 서버에 요청할 때, 한글이 깨지는 현상이 일어났다. 이를 클라이언트에서 encoding하여 보낼 수 없기 때문에 서버에 도착한 후 request에 담긴 내용을 먼저 encoding해준 후 가져오니 그 오류가 해결됐다.
하지만 이런식으로 매번 요청할 때마다 setCharacterEncoding을 이용해 encoding을 한다면, 번거롭기도 하며 효율적이지도 않다. 그래서 이를 해결하기위해 있는것이 바로 filter이다.
filter는 말 그대로 걸러주는 역할인데, 우리는 이 filter를 이용해 post요청이 들어올 때 마다 이 filter를 거쳐서 encoding을 해줄 것이다.
먼저 패키지에서 우클릭해서 class나 servlet만들듯 new를 눌러보면 filter가 따로 있다.
눌러보면 servlet과 비슷하게 아래처럼 나와있는데 class명을 지어준후 next를 누르고 url pattern을 /* 로 잡아주면 된다.
여기서 url pattern을 /* 로 잡아주는 이유는 *는 모두 선택한다는 뜻이다. 즉 /뒤에 나오는 모든 url은 다 filter를 통해 거쳐가게끔 해주는 것을 설정하는 것이다.
저상태로 finish를 누르게 되면 아래와 같이 나온다.
doFilter가 바로 filter역할을 해주는 것인데 보면 request 와 response가 보인다. 클라이언트에서 요청을 받고 filter를 거친 후 서블릿에 도착하고, 서블릿 내용을 다시 filter로 가져와 클라이언트에 전달 해주는 형식이다. 즉 Filter는 인터페이스 인 것이다.
위에서 전처리 후처리 로 나눠났는데 이는 말 그대로 서블릿에 접근하기 이전에 처리한다는 것과 서블릿에 접근한 후에 처리한다는 식으로 나뉜다는 뜻이다.
처음 실행하게 되면 다음과 같이 뜬다. 두번 뜨는것은 우리가 절대경로 뒤에 오는 모든것은 다 filter를 거치게 한다고 했는데, 현재 우리가 쓰고있는 요청은 doGet과 doPost 이기 때문에 두 번 실행된 것이다.
여기서 input에 내용을 입력하고 버튼을 클릭하면 아래와 같이 전처리와 후처리 사이에 입력한 내용들이 나오게 된다.
이를 통해 chain.doFilter에서 받는 request와 response는 서블릿에 전달하고 서블릿에서 받아오는 서블릿이라고 볼 수 있다.
'JSP' 카테고리의 다른 글
Spring Layered Architecture 에 대해서 (0) | 2023.01.11 |
---|---|
JSP Filter 2 (0) | 2022.12.21 |
JSP form 데이터 요청 (0) | 2022.12.20 |
JSP 요청과 경로 (0) | 2022.12.14 |
JSP와 Servlet 사용 및 파라미터 활용 (0) | 2022.12.12 |