프로그래밍/JSP Servlet

JSP/Servlet - 필터 클래스의 init 메소드와 destroy 메소드 활용

가카리 2016. 3. 16. 21:28
반응형

 

JSP/Servlet – 필터 클래스의 init 메소드와 destroy 메소드 활용

 


2016/03/14 - [프로그래밍/JSP/Servlet] - JSP/Servlet – 필터(Filter)의 이해



Filter 인터페이스를 구현하면 init 메소드와 destroy 메소드를 구현해야 합니다.

 

예를 들어 파일을 여는 코드는 init 메소드 안에, 닫는 코드는 destroy 메소드 안에 기술합니다.

 

다음 예제를 통해 필터 클래스로 로그 파일을 작성해 봅시다.

 

예제는 위와 같이 구성됩니다. 필터 클래스 LogMessageFilter.java와 필터 클래스를 등록하는 web.xml 그리고 테스트를 위한 filterTest.jsp 파일로 구성됩니다.

 

LogMessageFilter.java

 

package myfilter;

import javax.servlet.*;

import java.io.*;

 

public class LogMessageFilter implements Filter {

PrintWriter writer;

public void init(FilterConfig config) throws ServletException {

String filename = config.getInitParameter("FILE_NAME") ;

 

if (filename == null)

throw new ServletException("로그 파일의 이름을 찾을 없습니다.");

try {

writer = new PrintWriter(new FileWriter(filename, true), true);

}

catch (IOException e) {

throw new ServletException("로그 파일을 없습니다.");

}

}

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)

throws IOException, ServletException {

writer.println(" 컴포넌트가 시작될 것입니다.");

writer.flush();

chain.doFilter(request, response);

writer.println(" 컴포넌트가 완료되었습니다.");

writer.flush();

}

public void destroy() {

writer.close();

}

}

 

 

web.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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 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>ch11_jsp_filter_sec</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>log-filter</filter-name>

     <filter-class>myfilter.LogMessageFilter</filter-class>

     <init-param>

     <param-name>FILE_NAME</param-name>

     <param-value>C:\\myfilter.log</param-value>

     </init-param>

    </filter>

    <filter-mapping>

     <filter-name>log-filter</filter-name>

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

    </filter-mapping>

</web-app>

 

filterTest.jsp

 

<%@ page language="java" contentType="text/html; charset=EUC-KR"

pageEncoding="EUC-KR"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">

<title>Insert title here</title>

</head>

<body>

    로그 필터 테스트용

</body>

</html>

 

 

실행 화면

 

예제를 실행하기전에 반드시 c:\myfilter.log 파일을 생성해야합니다.

c:\myfilter.log 를 열어보면 다음과 같이 필터클래스에 작성한 내용을 찾을 수 있습니다.

 

반응형