자바 웹 필터 상세 설명

6252 단어 javawebfilter
원래 이 편 을 통 해 JSP 를 정리 할 계획 이 었 습 니 다.JSP 의 내용 이 많 고 밤 에 뛰 어 다 니 며 다이 어 트 를 하려 고 했 기 때문에 오늘 은 Filter 와 그 사용 예 를 소개 합 니 다.그러면 운동 을 할 수 있 는 시간 이 있 습 니 다.본론 으로 돌아 가면 필 터 는 말 그대로 그녀의 말 을 차단 하고 여과 하 는 기능 이 있어 자바 웹 의 차단 요정 이 라 고 할 수 있다.
유래
클 라 이언 트 가 요청 을 하면 서버 는 모든 요청 에 응답 하지 못 하고 차단 처 리 를 할 수 없습니다.서버 의 압력 을 줄 일 수 있 을 뿐만 아니 라 데이터 의 안전 도 보호 할 수 있 습 니 다.마찬가지 로 서버 가 클 라 이언 트 에 응답 할 때 도 필 터 를 해 야 합 니 다.예 를 들 어 우리 가 흔히 볼 수 있 는 그림 에 워 터 마크 를 추가 하 는 것 입 니 다.이 문제 들 을 처리 하기 위해 필터 가 생 겼 다.요청 과 응답 을 한 층 만 걸 러 내 는 것 이 아니 라 여러 층 을 걸 러 낼 수 있 기 때문에 필터 체인(FilterChain)이라는 개념 을 제시 했다.
사용 하 다
그것 을 사용 하기 전에 그 역할 을 먼저 익 힌 곳.필 터 는 요청 Request 가 Servlet 에 도착 하기 전,응답 응답 응답 이 브 라 우 저 에 도착 하기 전에 순서대로 고려 체인 을 거 칩 니 다.asp.net 의 httpmodule 과 유사 합 니 다.Filter 를 사용 하면 주로 javax.servlet.filter 인 터 페 이 스 를 실현 합 니 다.API 를 보면 세 가지 방법 이 있 습 니 다.
1.public void init(FilterConfig filterConfig) throws ServletException
웹 용기 에서 호출 하여 서비스 에 넣 을 필 터 를 표시 합 니 다.servlet 용 기 는 필 터 를 예화 한 후에 init 방법 을 한 번 만 호출 합 니 다.필터 에 모든 필터 작업 을 요구 하기 전에 init 방법 은 성공 적 으로 완성 되 어야 합 니 다.init 방법 이 ServletException 을 던 지 거나 웹 용기 가 정 의 된 시간 내 에 되 돌아 오지 않 으 면 웹 용 기 는 필 터 를 서비스 에 넣 을 수 없습니다.이것 은 Servlet 의 생명주기 와 약간 유사 하 며,한 번 만 초기 화 되 고,destroy()도 한 번 실 행 됩 니 다.
2.public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException, ServletException
체인 끝의 특정한 자원 에 대한 클 라 이언 트 요청 으로 인해 체인 을 통 해 요청/응답 을 전달 할 때마다 용 기 는 Filter 의 doFilter 방법 을 호출 합 니 다.이 방법 을 입력 한 FilterChain 은 Filter 가 체인 의 다음 실체 에 요청 과 응답 을 전달 할 수 있 도록 합 니 다.
이 방법의 전형 적 인 실현 은 다음 과 같은 모델 을 따른다.
1.검사 요청
2.필터 내용 이나 머리 에 사용자 정의 요청 대상 을 선택 적 으로 포장 합 니 다.
3.필터 내용 이나 머리 에 사용자 정의 응답 대상 을 선택 적 으로 포장 합 니 다.
4.a)FilterChain 대상(chain.doFilter()을 사용 하여 체인 의 다음 실 체 를 호출 할 수 있 습 니 다.
4.b)필터 체인 에 전 달 된 다음 실체 에 대한 요청/응답 을 하지 않 고 요청 처 리 를 차단 할 수 있 습 니 다.
5.필터 체인 의 다음 실 체 를 호출 한 후 응답 에 있 는 머리 를 직접 설정 합 니 다.
3.public void destroy()
웹 용기 에서 호출 되 며 서비스 에서 꺼 낼 필 터 를 표시 합 니 다.이 방법 은 필터 의 doFilter 방법 에서 만 모든 스 레 드 가 종 료 된 후에 한 번 호출 되 거나 시간 이 지난 후에 호출 됩 니 다.이 방법 을 호출 한 후 웹 용 기 는 이 필터 의 인 스 턴 스 를 doFilter 방법 으로 호출 하지 않 습 니 다.이 방법 은 필터 에 가지 고 있 는 모든 자원(예 를 들 어 메모리,파일 핸들,스 레 드)을 제거 할 수 있 는 기 회 를 제공 하고 모든 영구적 인 상태 가 메모리 에 있 는 이 필터 의 현재 상태 와 동기 화 되도록 합 니 다.
사례
필 터 를 사용 하 는 곳 이 많 습 니 다.여기 서 일일이 예 를 들 지 않 습 니 다.아래 demo 는 지난 블 로그 에서 Hello World 프로젝트 를 바탕 으로 도 난 방지 체인 의 기능 을 실현 하여 Filter 의 사용 을 체험 합 니 다.
1.준비
Hello Wolrd 프로젝트 에 폴 더 를 추가 합 니 다.폴 더 에 두 개의 그림 을 넣 고 err.png 에 test.png 를 넣 습 니 다.두 개의 그림 은 다음 과 같 습 니 다.

2.필터 만 들 기
필터 패키지 도 새로 만 들 지 않 았 습 니 다.이전 블 로그 의 com.test.cyw 패키지 에 필터 파일 MyFilter 를 만 들 었 습 니 다.필터 클래스 를 전문 적 으로 관리 하 는 패 키 지 를 만 들 었 을 것 입 니 다.여 기 는 테스트 만 할 뿐 입 니 다.생 성 완료 후 MyFilter 계승 Filter 를 볼 수 있 습 니 다.

 public class MyFilter implements Filter 
3.doFilter 에서 도 난 방지 체인 구현

package com.test.cyw;

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;
import javax.servlet.http.*;

/*@WebFilter("/MyFilter")*/
public class MyFilter implements Filter {

  public MyFilter() {
    
  }

  public void destroy() {
    
  }

  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    
    HttpServletRequest req=(HttpServletRequest)request;
    HttpServletResponse res=(HttpServletResponse)response;
    String referer=req.getHeader("referer");//      
    if(referer==null||!referer.contains(req.getServerName()))
    {
      req.getRequestDispatcher("/Images/err.png").forward(req, res);
      return;
    }
    chain.doFilter(req, res);
  }

  public void init(FilterConfig fConfig) throws ServletException {
    
  }
}

4.Filter 설정
위 에 Filter 인 터 페 이 스 를 실현 하 는 클래스 만 만 만 들 었 습 니 다.Tomcat 에 어떻게 알려 야 합 니까?이것 은 Servlet 과 유사 하 므 로 웹.xml 에 설정 해 야 합 니 다.servlet 설정 과 약간 같 습 니 다.

  <filter>
   <filter-name>MyFilter</filter-name>
   <filter-class>com.test.cyw.MyFilter</filter-class>
 </filter>
 <filter-mapping>
   <filter-name>MyFilter</filter-name>
   <url-pattern>/Images/*</url-pattern>
 </filter-mapping>
5.테스트
jsp 에 img 을 표시 하 는 test.jsp 파일 을 새로 만 듭 니 다.정상적으로 표시 할 수 있 습 니 다.

 <%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
<!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=UTF-8">
<title>Insert title here</title>
</head>
<body>
<img alt="   " src="Images/test.png" width="400">
</body>
</html>

브 라 우 저 에 test.png 주 소 를 직접 입력 하면 err.png 가 표 시 됩 니 다.

질문
처음에 주소 오류 로 인해 구 글 브 라 우 저 test.jsp 에 도 err.png 의 그림 이 표시 되 었 으 나 내 가 바 뀌 었 을 때 페이지 를 새로 고침 하 는 것 이 변 하지 않 았 다 는 것 이 궁금 하 다.가끔 은 Tomca 를 다시 켜 도 안 될 때 가 있 습 니 다.여러 번 시도 해 봤 는데 모두 이 렇 습 니 다.정말 안 되 겠 습 니 다.IE 로 테스트 해 봤 는데 디 스 플레이 가 정확 하 다 고 생각 하지 못 했 습 니 다.원래 구 글 브 라 우 저 에 캐 시 가 있어 서 디 스 플레이 가 정확 하지 않 았 습 니 다.
총화
Filter 는 용도 가 많 고 인터넷 에 도 많은 예 가 있 습 니 다.프로젝트 를 할 때 자주 사용 하 는 워 터 마크 등 을 먼저 실현 할 수 있 습 니 다.사용 할 때 xml 만 설정 하면 해결 할 수 있어 서 편리 합 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기