JSP/Servlet – 필터(Filter)의 이해
필터란 클라이언트와 서버사이에서 request와 response객체를 필터가 먼저 받아 사전작업/사후작업 등 공통적으로 필요한 부분을 처리합니다.
필터에 대한 기본적인 내용은 다음 링크에 설명이 잘되어있습니다.
필터를 이용한 웹 프로그래밍 Part1, 필터란 무엇인가!
필터가 어떤 순서로 동작하기 위해 위와 같이 예제를 구성합니다.
첫 번째로는 필터 클래스를 구현해봅시다. 필터클래스는 Filter 인터페이스를 구현해야 합니다.
/WEB-INF/classes/myfilter/SimpleFilter.java
package myfilter;
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 SimpleFilter implements Filter{
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
System.out.println("웹컴포넌트 시작");
chain.doFilter(request, response);//필터체인
System.out.println("웹컴포넌트 완료");
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
그 다음은 web.xml파일에 필터 클래스를 등록해야 합니다.
<filter>는 웹컨테이너에 필터를 등록하는 역할을 하고 <filter-mapping>은 그 필터를 어느 웹 컴포넌트에 적용시킬 것인지 지정하는 역할을 합니다.
web.xml
package myfilter;
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 SimpleFilter implements Filter{
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
System.out.println("웹컴포넌트 시작");
chain.doFilter(request, response);//필터체인
System.out.println("웹컴포넌트 완료");
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
다음은 필터 클래스를 테스트하기 위한 jsp 파일입니다.
Simple.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<% System.out.println("jsp 페이지 출력"); %>
<!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>
실행 화면
콘솔창을 보면 다음과 같이 출력됨을 알 수 있습니다.
즉, 필터를 거쳐서 웹컴포넌트가 실행되고 다시 필터로 오는 것을 확인할 수 있습니다.
만약 다음과 같이 서블릿을 작성해서 필터를 테스트하고 싶다면?
/WEB-INF/classes/myservlet/SimpleServlet.java
package myservlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class SimpleServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("서블릿에서 출력");
resp.setContentType("text/html;charset=euc-kr");
PrintWriter out = resp.getWriter();
out.println("<HTML>");
out.println("<HEAD><TITLE>필터 테스트용 서블릿</TITLE></HEAD>");
out.println("<BODY>");
out.println("필터테스트");
out.println("</BODY>");
out.println("</HTML>");
}
}
서블릿에서 테스트를 하고 싶다면?
서블릿에서도 필터를 적용할 수 있게 <url-pattern>서브엘리먼트의 내용을 기존의 *.jsp에서 /*로 바꿔줘야 적용됩니다.
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</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>simple-filter</filter-name>
<filter-class>myfilter.SimpleFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>simple-filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>simple-servlet</servlet-name>
<servlet-class>myservlet.SimpleServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>simple-servlet</servlet-name>
<url-pattern>/simple</url-pattern>
</servlet-mapping>
</web-app>
실행 화면
콘솔창을 확인하면 처음 jsp에서 테스트했을 때랑 동일한 결과가 나옴을 확인할 수 있습니다.
'프로그래밍 > JSP Servlet' 카테고리의 다른 글
JSP/Servlet – 응답 래퍼 클래스를 작성하는 방법 (0) | 2016.04.04 |
---|---|
JSP/Servlet – 요청 래퍼 클래스 작성하기 (0) | 2016.03.21 |
JSP/Servlet – 필터 체인의 방향 바꾸기 (0) | 2016.03.17 |
JSP/Servlet - 필터 클래스의 init 메소드와 destroy 메소드 활용 (0) | 2016.03.16 |
JSP/Servlet – 커스텀 액션안에 또 다른 커스텀 액션 포함하기 (0) | 2016.03.06 |
JSP/Servlet – 태그 클래스를 이용해서 변수 지원 커스텀 액션 만들기 (0) | 2016.03.01 |
JSP/Servlet – 태그 클래스를 이용해서 커스텀 액션의 본체 내용을 바꿔보자 (0) | 2016.03.01 |
JSP/Servlet - 태그 클래스를 이용한 본체가 있는 커스텀 액션 만들기 (0) | 2016.02.29 |