03 web.xml 파일의 필터 구성
필터를 사용하려면 어떤 필터가 어떤 리소시에 대해 적용되는지 JSP컨테이너에 알려주어야 한다. 이는 웹 애플리케이션의 /WEB-INF/폴더에 존재하는 web.xml파일을 통해 이루어지므로 web.xml 파일에 필터를 설정한다.
web.xml 파일에 필터를 설정할 때는 <Filter>와 <filter-mapping> 요소를 사용하여 형식은 다음과 같다. web.xml 파일에 여러개의 필터가 설정되어 있으면 선언된 순서대로 실행된다.
<filter>
<filter-name>...</filter-name>
<fliter-class>...</filter-class>
[<init-param>
<param-name>...</param-name>
<param-value>...</param-value>
</init-param>]
</filter>
<filter-mapping>
<filter-name>...</filter-name>
<url-pattern>...</url-pattern>
</filter-mapping>
<filter> 를 구성하는 하위 요소
요소 | 설명 |
<filter-name> | 필터 이름을 설정한다. |
<filter-class> | 자바 클래스 이름을 설정한다 |
<init-param> | 매개변수와 값을 설정한다. |
<filter-mapping>을 구성하는 하위 요소
요소 | 설명 |
<filter-name> | 필터 이름을 설정한다. |
<url-pattern> | URL 패턴을 설정한다 |
3.1 <filter> 요소
<filter> 요소는 웹 애플리케이션에서 자바 필터와 매개변수를 설정하는 데 사용하며 형식은 다음과 같다.
<filter>
<filter-name>필터 이름</filter-name>
<filter-class>글래스 이름 </filter-class>
[<init-param>
<param-name>매개변수 이름</param-name>
<param-value>매개변수 값</param-value>
</init-param>]
</filter>
<init-param> 요소에 설정된 매개변수와 값을 자바 또는 JSP코드에서 접근하는 형식은 다음과 같다.
String value= getServletConfig().getInitParameter("매개변수 이름");
다음은 <filter> 요소에 필터 이름과패키지를 포함한 필터를 구현한 자바 클래스 이름을 설정하는 예이다. 이때 필터이름은 자바 클래스 이름과 같지 않아도 된다.
[<filter>요소 사용 예 : 필터 이름 myFilter와 클래스 이름 LoggingFilter 설정]
<filter>
<filter-name>myFilter</filter-name>
<filter-class>ch12.com.filter.LoggingFilter</filter-class>
</filter>
다음은 <filter> 요소 내에 <init-param> 요소를 이용하여 매개변수와 값을 설정하는 예이다. 필터가 초기화될 때 , 즉 필터의 init() 메소드가 호출될 때 전달되는 매개변수와 값을 설정했다.
[<filter> 요소 사용 예 : 매개변수 param 과 값 admin 설정]
<filter>
<filter-name>myFilter</filter-name>
<filter-class>ch12.com.filter.LoggingFilter</filter-class>
<init-param>
<param-name>param</param-name>
<param-value>admin</param-value>
</init-param>
</filter>
위의 예에서 <init-param> 요소에 설정된 매개변수와 값을 자바 클래스에서 접근하려면 다음과 같이 작성한다.
String value = getServletConfig().getInitParameter("param");
3.2 <filter-mapping>요소
<filter-mapping> 요소는 특정 리소스에 대해 어떤 필터를 사용할지 설정하는 데 사용하며 형식은 다음과 같다.
<filter-mapping>
<filter-name>필터 이름</filter-name>
<url-pattern>요청 URL 패턴</url-pattern>
</filter-mapping>
다음은 <filter-mapping> 요소를 이용하여 모든 리소스에 대해 필터 MyFilter를 적용하는 에이다. 모든 리소스에 필터를 적용하기 위해 URL voxjsdmf /*로 설정했는데 , /*는 모든 요청을 URL 과 일치하는 경로로 매핑한다는 것을 의미한다.
[<filter-mapping> 요소 사용 예: URL 패턴을 /* 로 설정]
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
다음은 <filter-mapping> 요소를 이용하여 특정 리소스에 대해 필터 MyFilter를 적용하는 예이다. 즉 특정 리소스 /ch12/filter.jsp 에 필터가 적용되며, 설정한 패턴은 /ch12/로 시작하고 filter.jsp 경로로 매핑한다는 것을 의미한다.
[<filter-mapping> 요소 사용 예 / URL 패턴을 /ch12/filter.jsp 로 설정]
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/ch12/filter.jsp</url-pattern>
</filter-mapping>
NOTE_요청 URL 패턴의 유형
<url-pattern>요소에 설정할 수 있는 요청 URL 패턴이 유형은 다음과 같다.
- /로 시작하고 /* 로 끝나는 url-pattern 은 경로 매핑에 사용된다.
- *로 시작하는 url-pattern은 확장자에 대한 매핑을 할 때 사용된다.
- 나머지 다른 문자열은 정확한 매핑을 하는데 사용된다.
다음은 요청 URL 패턴의 예이다
URL 패턴 | 설명 |
*.do | .do 로 끝나는 모든 URL과 일치하는 파일 확장 패턴 |
/WebMarket/* | /WebMarket/으로 시작하는 모든 URL 과 일치하는 경로 패턴 |
/MyFilter.jsp | /MyFilter.jsp로만 일치하는 특정 패턴 |
/WebMarket/cart.jsp | /WebMarket/cart.jsp 로만 일치하는 특정 패턴 |
[폼 페이지에서 전송된 요청 파라미터를 필터로 처리하기]
/JSPBook/src/ch12/com/filter/AuthenFilter.java
package ch12.com.filter;
import java.io.IOException;
import java.io.PrintWriter;
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 AuthenFilter implements Filter{
//필터를 초기화 하도록 init() 메소드를 작성한다.
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("Filter01 초기화.. ");
}
//필터를 리소스에 적용하도록 doFilter()메소드를 작성한다.
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws IOException, ServletException {
System.out.println("Filter01.jsp 수행..");
String name = request.getParameter("name");//폼페이지에서전송된 요청 파라미터를 전달받도록 request내장 객체의
//geParameter()메소드를 작성한다.
//폼 페이지에서 전송된 요청 파라미터가 없으면 응답 웹페이지에 메시지를 출력하도록 응답 웹 페이지에
//대한 문자 인코딩, 콘텐츠 우형, 메시지 등을 작성한다.
if(name == null || name.equals("")) {
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
PrintWriter writer = response.getWriter();
String message = "입력된 name 값은 null 입니다. ";
writer.println(message);
return;
}
filterChain.doFilter(request, response);//연속적으로 필터가 있으면 다음 필터로 제어를 넘기도록 FilterChain 객체타입의
// doFilter()메소드를 작성한다.
}
//필터를 종료하기 전에 호출하도록 destory() 메소드를 작성한다.
@Override
public void destory() {
System.out.println("Filter01 해제..");
}
}
JSPBook/Webapp/WEB-INF/web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<security-role>
<description></description>
<role-name>admin</role-name>
</security-role>
<security-constraint>
<display-name>WebMarket Security</display-name>
<web-resource-collection>
<web-resource-name>WebMarket</web-resource-name>
<description></description>
<url-pattern>/addProduct.jsp</url-pattern>
</web-resource-collection>
<auth-constraint>
<description>권한 관리자명</description>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/login.jsp</form-login-page>
<form-error-page>/login_failed.jsp</form-error-page>
</form-login-config>
</login-config>
<error-page>
<error-code>404</error-code>
<location>/exceptionNoPage.jsp</location>
</error-page>
<filter>
<filter-name>Filter01</filter-name>
<filter-class>ch12.com.filter.AuthenFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Filter01</filter-name>
<url-pattern>/ch12/filter01_process.jsp</url-pattern>
</filter-mapping>
</web-app>
/JSPBook/Webapp/ch12/filter01.jsp
<%@ page contentType="text/html; charset=utf-8" %>
<html>
<head>
<title>Filter</title>
</head>
<body>
<form method="post" action="filter01_process.jsp">
<p> name : <input type="text" name="name">
<input type="submit" value="submit">
</form>
</body>
</html>
JSPBook/webapp/ch12/filter01_process.jsp
<%@ page contentType="text/html; charset=utf-8" %>
<html>
<head>
<title>Filter</title>
</head>
<body>
<%
String name = request.getParameter("name");
%>
<p> 입력된 name 값 : <%=name %>
</body>
</html>
http://localhost:8080/JSPBook/ch12/filter01.jsp
'JSP, Servlet, MySQL > JSP - webmarket' 카테고리의 다른 글
JSP Servlet 세션 : 장바구니 페이지 만들기 (0) | 2024.02.21 |
---|---|
JSP Servlet 필터 : 로그 기록하기 3 (1) | 2024.02.05 |
JSP Servlet 필터 : 로그 기록하기 (0) | 2024.01.14 |
JSP Servlet 예외 처리 : 예외 처리 페이지 만들기 -2 (2) | 2024.01.13 |
JSP Servlet 예외 처리 : 예외 처리 페이지 만들기 (3) | 2024.01.13 |