2020.12.03 고급자바 수업 filter 기본

 클라이언트



서버쪽에 있는 서블릿


요청할때 , 응답할때 request, response 를 필터링 하는것 


package 에서 filter 를 검색해서 만든다. 


----------------------------------------------------------------------------------------

xml 파일 : filter 생성순서(init() 은 상관이 없지만 작동순서는 xml에 쓴 순서대로 작동되고 끝날때는 작동했던 순서와 반대로 끝나간다.)



<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns="http://java.sun.com/xml/ns/javaee"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"

id="WebApp_ID" version="3.0">

<display-name>servletTest</display-name>

<welcome-file-list>

<welcome-file>index.html</welcome-file>

<welcome-file>index.htm</welcome-file>

<welcome-file>index.jsp</welcome-file>

<welcome-file>default.html</welcome-file>

<welcome-file>default.htm</welcome-file>

<welcome-file>default.jsp</welcome-file>

</welcome-file-list>

<filter>

<filter-name>Filter01</filter-name>

<filter-class>kr.or.ddit.filter.FilterTest01</filter-class>

</filter>


<filter-mapping>

<filter-name>Filter01</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>


<filter>

<filter-name>Filter02</filter-name>

<filter-class>kr.or.ddit.filter.FilterTest02</filter-class>

<!-- 필터의 초기화 정보 설정하기 -->

<init-param>

<param-name>tester</param-name>

<param-value>홍길동</param-value>

</init-param>

</filter>


<filter-mapping>

<filter-name>Filter02</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>


<servlet>

<servlet-name>servletTest08</servlet-name>

<servlet-class>kr.or.ddit.basic.ServletTest08</servlet-class>

<init-param>

<param-name>start</param-name>

<param-value>1</param-value>

</init-param>

<init-param>

<param-name>end</param-name>

<param-value>50</param-value>

</init-param>

</servlet>

<servlet-mapping>

<servlet-name>servletTest08</servlet-name>

<url-pattern>/servletTest08.do</url-pattern>

</servlet-mapping>

<servlet>

<servlet-name>servletTest01</servlet-name>

<servlet-class>kr.or.ddit.basic.ServletTest01</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>servletTest01</servlet-name>

<url-pattern>/servletTest01.do </url-pattern>

</servlet-mapping>

<servlet>

<servlet-name>servletTest05</servlet-name>

<servlet-class>kr.or.ddit.basic.ServletTest05</servlet-class>

<init-param>

<param-name>AdminEmail</param-name>

<param-value>admin@naver.com</param-value>

</init-param>

<init-param>

<param-name>userName</param-name>

<param-value>홍길동</param-value>

</init-param>

</servlet>

<servlet-mapping>

<servlet-name>servletTest05</servlet-name>

<url-pattern>/servletTest05.do</url-pattern>

</servlet-mapping>

<context-param>

<param-name>myContext</param-name>

<param-value>연습용 컨텍스트 파라미터 값</param-value>

</context-param>

<servlet>

<description></description>

<display-name>ResponseTest01</display-name>

<servlet-name>ResponseTest01</servlet-name>

<servlet-class>kr.or.ddit.reqres.copy.RequestTest</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>ResponseTest01</servlet-name>

<url-pattern>/responseTest01.do</url-pattern>

</servlet-mapping>

</web-app>




----------------------------------------------------------------------------------------

filter 01 filter 파일 

서블릿필터

1. 사용목적

-클라이언트의 요청을 수행하기 전에 이 요청을 가로채서 필요한 작업을 수행할 수 있다. 

-클라이언트에 대한 응답 정보를 제공하기 전에 응답 정보에 필요한 작업을 수행할 수 있다. 

2. 사용예 

-인증 작업용 필터

-데이터 압축용 필터 

-인코딩용 필터 

-로깅 작업용 필터 

-이미지 변환 작업용 필터 등등등 ...


 * Servlet Filter implementation class FilterTest01


필터를 별(*/)로 해놓으면 전체가 거쳐서 만들어진다. 


 필터 class 는 'javax.servlet.filter' 인터페이스를 구현해서 작성해야 한다. 

 작성된 필터는 web.xml 에 등록해서 작동 시키거나 

 @WebFilter 에노테이션을 이용해서 작동시키면 된다. 

 (형식 : @WebFilter("url매핑 정보 "))

 (예 : @WebFilter("/*") ) => 모든 요청에 대하여 처리하라 


package kr.or.ddit.filter;


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;



public class FilterTest01 implements Filter {


//필터 초기화 부분

public void init(FilterConfig fConfig) throws ServletException {

System.out.println("첫번째 Filter - init() 메서드 실행....");

}


//실제 처리되는 부분 

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

//chain.doFilter() 메서드 앞쪽은 요청에 관련된 처리를 구현한다. 

System.out.println("첫번째 Filter - doFilter() 메서드 호출 전....");

chain.doFilter(request, response);

//다른 필터로 넘어가라 하는 부분 (다음 필터로 제어가 넘어감) 마지막에 있는 필터는 서블릿을 호출해주도록 되어 있다.

System.out.println("첫번째 Filter-doFilter() 메서드 호출 후....");

//chain.doFilter() 메서드 뒤쪽은 응답에 관련된 처리를 구현한다. 

}

//필터 종료시 처리할 부분 

public void destroy() {

System.out.println("첫번째 Filter - destroy() 메서드 실행 ");

}


}



-----------------------------------------------------------------------------------------------------


package kr.or.ddit.filter;

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;

public class FilterTest02 implements Filter {



@Override
public void init(FilterConfig config) throws ServletException {
System.out.println("두번째 Filter 의 init() 메서드 실행중...."); 
// init() 메서드에서 필터의 초기화 정보를 읽어올 수 있다. 
//FilterConfig 객체의 getInitParameter() 메서드를 이용한다. 
String initParam = config.getInitParameter("tester"); 
System.out.println("tester ==> " + initParam);


                //<init-param>

//<param-name>tester</param-name>

//<param-value>홍길동</param-value>

//</init-param>

}

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("두번째 필터의 doFilter() 메서드 호출전....");

chain.doFilter(request, response);
System.out.println("두번째 Filter의 doFilter() 메서드 호출 후....");

}

@Override
public void destroy() {
System.out.println("두번째 Filter의 destroy() 메서드 실행....");

}

}


댓글