-
13. 필터 API개발자 수업/JSP 2021. 12. 6. 16:58
1. 필터(Filter)
1) 브라우저에서 서블릿에 요청하거나 응답할 때 미리 요청이나 응답과 관련해 여러 가지 작업을 처리하는 기능
2) 요청이나 응답시 공통적인 작업을 처리하는데 이용됨
2. 필터 용도
1) 요청 필터
- 사용자 인증 및 권한 검사
- 요청시 요청 관련 로그 작업
- 인코딩 기능
2) 응답 필터
- 응답 결과에 대한 암호화 작업
- 서비스 시간 측정
3. 관련 API
1) javax.servlet.Filter
javax.servlet.FilterChain
javax.servlet.FilterConfig<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>로그인</title> </head> <body> <form name="frmLogin" method="post" action="login" enctype="utf-8"> 이름 : <input type="text" name="user_name"><br> 비밀번호 : <input type="password" name="user_pw"><br> <input type="submit" value="로그인"> <input type="reset" value="다시 입력"> </form> </body> </html>
package kr.co.ezenac.filter; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/login") public class LoginTest extends HttpServlet{ @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //request.setCharacterEncoding("utf-8"); //post방식으로 한글 전송시 인코딩 작업 생략함 response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); String user_name = request.getParameter("user_name"); String user_pw = request.getParameter("user_pw"); out.print("<html><body>"); out.print("이름은 " + user_name + "<br>"); out.print("비밀번호는 " + user_pw + "<br>"); out.print("</body></html>"); } }
package kr.co.ezenac.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletContext; 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 EncoderFilter */ @WebFilter("/*") //WebFilter 어노테이션을 이용해 모든 요청이 필터를 거치게 함 public class EncoderFilter implements Filter { //사용자 정의 필터는 반드시 Filter 인터페이스를 구현해야 함 ServletContext context; /** * @see Filter#init(FilterConfig) */ public void init(FilterConfig fConfig) throws ServletException { System.out.println("utf-8 인코딩"); context = fConfig.getServletContext(); } /** * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain) */ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("doFilter 호출"); request.setCharacterEncoding("utf-8"); //한글 인코딩 설정 작업을 함 String context = ((HttpServletRequest)request).getContextPath(); //웹 애플리케이션의 컨텍스트 이름 String pathinfo = ((HttpServletRequest)request).getRequestURI(); //웹 브라우저에서 요청한 URI를 가져옴 String realPath = request.getRealPath(pathinfo); //요청 URI의 실제 경로를 가져옴 String mesg = "Context 정보 : " + context + "\n URI 정보 : " + pathinfo + "\n 물리적 정보 : " + realPath; System.out.println(mesg); //요청 필터에서 요청 처리 전의 시간을 구함 long begin = System.currentTimeMillis(); //이 위로는 요청 필터 기능 chain.doFilter(request, response); //다음 필터로 넘기는 작업 수행함 //이 밑으로는 응답 필터 기능 //응답 필터에서 요청 처리 후의 시간을 구함 long end = System.currentTimeMillis(); //작업 요청 전과 후의 시간 차를 구해 작업 수행 시간을 구함 System.out.println("작업 시간 : " + (end - begin) + "ms"); } /** * @see Filter#destroy() */ public void destroy() { System.out.println("destroy 호출"); }
'개발자 수업 > JSP' 카테고리의 다른 글
15. JSP와 구성요소 + 연습 (0) 2021.12.07 14. 서블릿 관련 Listener API (0) 2021.12.06 12. 서블릿 스코프, URL 패턴 (0) 2021.12.06 11. 웹 페이지 연결 기능 (0) 2021.12.03 10. ServletConfig (0) 2021.12.03