728x90
필터는 특정 요청에만 반응하는 특수한 형태의 서블릿으로 기존의 요청 정보를 탈취해서 자신의 작업을
처리하고(doFilter()) 원래대로 요청 정보를 다시 진행시킨다는 특징이 있다.
인증이나 인가, 로깅, 데이터 변환, 인코딩, 국제화(다국어 처리, 번역) 등의 경우에 사용할 수 있다.
웹 서버가 시작되면 필터 클래스의 init()이 동작하고 사용자가 서비스를 자유롭게 이용하던 중
특정 요청을 수행하게 되면 필터가 반응하여 doFilter()를 동작하여 작업을 처리하게 된다.
예시를 위해 만들어진 인코딩 .filter 파일
web.xml(환경설정 파일) 파일에 저장되어있던 초기화 매개변수(encoding) 사용
package test;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpFilter;
/**
* Servlet Filter implementation class EncFilter
*/
@WebFilter("*.jsp")
public class EncFilter extends HttpFilter implements Filter {
private String encoding;
/**
* @see HttpFilter#HttpFilter()
*/
public EncFilter() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding(this.encoding); // 하드코딩 -> web.xml(환경설정파일)에 저장되어있던 초기화 매개변수로 교체
System.out.println("doFilter() 동작 완료");
chain.doFilter(request, response);
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
System.out.println("필터 클래스 최초 초기화 완료");
this.encoding=fConfig.getServletContext().getInitParameter("encoding");
}
}
실행을 위한 .html 파일
메세지를 작성하여 .jsp 파일로 보내줌
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="NewFile2.jsp" method="post">
<input type="text" name="msg">
<input type="submit" value="확인">
</form>
</body>
</html>

실행을 위한 .jsp 파일
인코딩이 되어있지 않지만 필터에 의해 자동으로 인코딩이 진행됨
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>msg: ${param.msg}</h1>
</body>
</html>
실행결과

728x90
'web' 카테고리의 다른 글
| JSP - MVC 모델 2 (0) | 2022.08.23 |
|---|---|
| JSP 태그 활용 (0) | 2022.08.22 |
| 리스너 클래스(2) (0) | 2022.08.20 |
| 초기화 매개변수 (0) | 2022.08.18 |
| 리스너 클래스 (0) | 2022.08.16 |