필터의 사용법에 대해 알아보겠다.
필터(Filter)는 클라이언트와 서버 사이에서 마치 정수기 필터처럼, 필터로 데이터를 가공하여 데이터를 주고받는다. 프레임워크의 인터셉트와 비슷한 역할이다. 필터는 여러 개를 둘 수 있으며 설정할 수 있는 기능이 다양하다.
인코딩을 실행시켜주는 필터를 예제로 설명하겠다.
EncodingFilter.java
public class EncodingFilter implements Filter{
private String charset;
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
String uri;
if(request instanceof HttpServletRequest) {
HttpServletRequest req = (HttpServletRequest)request;
uri = req.getRequestURI();
if(req.getMethod().equalsIgnoreCase("POST"))
req.setCharacterEncoding(charset);
}
}
chain.doFilter(request, response);
}
먼저 Filter를 상속시켜 줘야 필터 기능을 실행할 수 있다.
오버라이드 메소드 3개를 만들어 주며
doFilter의 메서드에서 request, responsem, chain을 변수로 받으며
if문을 통해 request가 HttpServletRequest인지 확인해 준다. 왜냐하면 위에 타입을 ServletRequest로 설정했기 때문이다.
따라서 맞다면 HttpServletRequest로 다운캐스팅을 하며 req에 값을 넣어주고
데이터가 넘어오는 방식이 post인지 확인한다.
맞다면 charset으로 인코딩을 처리해준다.
밑에 charset에 대해 추가로 더 입력할 것이다.
doFilter는 클라이언트와 서버 사이에서 필터로 데이터를 가공해 주며
if문 바깥에 있으므로 req가 아닌 request와 response로 입력해 주었다.
@Override
public void init(FilterConfig filterConfig) throws ServletException {
charset = filterConfig.getInitParameter("charset");
if(charset==null) {
charset = "UTF-8";
}
}
위에서 입력해 준 charset에 값을 넣어준다.
인코딩을 안 한 파일에선 null이기 때문에 UTF-8로 처리하도록 해준다.
해당되는 파일 범위는 밑에서 지정해 주겠다.
web.xml
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>com.filter.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
url-pattern에 *를 입력함으로써 모든 주소든 다 해당되도록 하였다.
따라서 인코딩을 안 한 곳에는 모두 인코딩 필터가 실행된다!
클라이언트와 서버 사이의 '필터(filter)'에 대해 알아보았다.
2월 24일 수업 🌖
'개발 교육 TIL > front-end' 카테고리의 다른 글
[Ajax] get 또는 post 방식으로 데이터 보내기, 자바스크립트 메소드 (0) | 2022.03.16 |
---|---|
[Ajax] Ajax 개념, 기본 예제 - jQuery, XMLHttpRequest (0) | 2022.03.15 |
[JSP/Servlet] 파일 다운로드 방법 및 예제 (0) | 2022.02.24 |
[Servlet] 쿠키(Cookie) 생성 예제 & 파일 업로드 (0) | 2022.02.23 |
[Servlet] 회원가입-로그인창 만들기 (session) (0) | 2022.02.22 |