각진 세상에 둥근 춤을 추자
[JSP] Eclipse - Servlet7: Servlet Filter 본문
(이전 게시글)
2022.10.23 - [JSP] - [JSP] Eclipse - Servlet6: 사용자 입력을 통한 POST 요청
request.setCharacterEncoding("UTF-8");
서블릿에 다음과 같은 설정 방식을 계속 추가하게 되면 아래 그림과 같은 상황이 된다.
서블릿 필터를 사용하면 요청과 응답 사이에 필터 실행 후 Servlet의 실행 여부를 결정한다.
서블릿 필터 생성하기
(1) 패키지 생성 (com.circle.web.filter) - 클래스 생성 (CharacterEncodingFilter)
(2) 인터페이스 추가: [Add] - [Filter - javax.servlet...] 추가 - [Finish]
(CharacterEncodingFilter.java)
서블릿 필터에 간단한 "Hello Filter" 출력문을 작성해 본다.
package com.circle.web.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class CharacterEncodingFilter implements Filter {
@Override
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
System.out.println("Hello Filter");
}
}
서블릿 필터 설정하기
(1) [web.xml]
(2) 입력한 url 매핑에 맞게 해당 서블릿 필터를 설정한다.
// 필터명
<filter-name>characterEncodingFilter</filter-name>
// 패키지명.클래스명
<filter-class>com.circle.web.filter.CharacterEncodingFilter</filter-class>
// 모든 url에 대해 동작 요청
<url-pattern>/*</url-pattern>
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>com.circle.web.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
(3) NoticeReg.java를 실행하면 다음과 같은 빈 화면이 뜬다.
그리고 서블릿 필터에 작성했던 출력문이 콘솔에 출력되었다.
(4) CharacterEncodingFilter.java에 한글 깨짐 방지 코드를 입력한다.
package com.circle.web.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class CharacterEncodingFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// 한글 깨짐 해결: 입력받는 값을 utf-8로 읽어라
request.setCharacterEncoding("UTF-8");
// NoticeReg로 흐름을 넘기고 받음
chain.doFilter(request, response);
}
}
(5) 입력 폼이 있는 reg.html을 실행한다.
서블릿에 일일이 인코딩 작업을 해 주지 않고 서블릿 필터를 이용해 한 번에 인코딩 작업을 해 줄 수 있다.
(6) Filter를 Annotation 방식으로 변경하기
2022.10.23 - [JSP] - [JSP] Eclipse - Servlet2: Annotation URL 매핑
web.xml에 설정을 계속 추가하는 것보다는 Annotatioon을 이용해 매핑하는 것이 효과적이다.
기존에 web.xml에 설정했던 필터 코드를 주석 처리한다.
CharacterEncodingFilter.java에서 Annotation을 이용해 매핑 정보를 작성한다.
@WebFilter("/*")
(7) reg.html 재실행해도 같은 결과를 출력할 수 있다.
'JSP' 카테고리의 다른 글
[JSP] Eclipse - Servlet9: 사용자 입력을 통한 덧셈과 뺄셈 계산 요청 (0) | 2022.10.25 |
---|---|
[JSP] Eclipse - Servlet8: 사용자 입력을 통한 덧셈 계산 요청 (0) | 2022.10.24 |
[JSP] Eclipse - Servlet6: 사용자 입력을 통한 POST 요청 (0) | 2022.10.23 |
[JSP] Eclipse - Servlet5: 사용자 입력을 통한 GET 요청 (0) | 2022.10.23 |
[JSP] Eclipse - Servlet4: GET 요청과 쿼리스트링 (0) | 2022.10.23 |