Filter : 클라이언트와 서버 사이에서 requset와 response객체를 필터가 먼저 받아서 사전/사후 작업 등 공통적으로 필요한 부분을 처리하는 것
→ 웹 브라우저가 서블릿을 호출할 경우, 필터가 대신 호출 되어 전달받은 정보를 수정하고 서블릿에 넘기는 일종의 경유지 역할을 수행
Filter Interface 메소드
1) init (FilterConfig config)
웹 컨테이너가 필터를 호출할 경우 해당 메소드가 호출되어 필터 객체를 생성하며 초기화
2) doFilter(ServeletRequset req, ServletResponse res, FilterChain chain)
필터가 수행될 때 구동하는 메소드로, 요청 객체와 응답 객체를 사용해 일련의 작업을 수행한 뒤, chain을 통해 가공된 값을 목적으로 전송
3) dostroy()
역할이 끝난 필터는 웹 컨테이너에 의해 해당 메소드를 호출하고 소멸
src-common-new -filter선택
EncodeFilter.java
package common;
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.HttpServletRequest;
/**
* Servlet Filter implementation class EncodeFilter
*/
@WebFilter("/EncodeFilter")
public class EncodeFilter implements Filter {
/**
* Default constructor.
*/
public EncodeFilter() {
// TODO Auto-generated constructor stub
}
/**
* @see Filter#destroy()
*/
public void destroy() {
System.out.println("필터 소멸");
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("서블릿 실행 전!");
HttpServletRequest req = (HttpServletRequest)request;
String uri = req.getRequestURI();
System.out.println("요청URI : "+uri);
request.setCharacterEncoding("utf-8");
System.out.println("인코딩 완료");
chain.doFilter(request, response);
//↑ 여기가 핵심 *** (서블릿 실행 코드)
System.out.println("서블릿 실행 후!");
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
System.out.println("필터 생성 완료");
}
}
member.controller - LoginServlet.java
처음이랑 끝에 추가하여 사용
System.out.println("로그인 서블릿 시작");
System.out.println("로그인 서블릿 끝");
web.xml
<filter>
<filter-name>EncodeFilter</filter-name>
<filter-class>common.EncodeFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>EncodeFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
필터 url-mapping
/* 은 모든걸 의미함 - /.jsp 도 되고 /login도 되고 다 해당
서블릿 부를 때만 사용하고 싶으면 /*.kh 이런식으로 패턴을 만들어서 사용
'SERVER' 카테고리의 다른 글
06_Action Tag (0) | 2020.12.08 |
---|---|
05_UML(Unified Modeling Language) (0) | 2020.12.08 |
04_webProject(23) : API - 영화진흥원 (0) | 2020.12.07 |
04_webProject(22) : API - 결제모듈 (0) | 2020.12.07 |
04_webProject(21) : API - 네이버 지도 (0) | 2020.12.07 |