ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

    댓글