JAVA 의 Filter 필터 사용 문자 집합 설정

4324 단어 filterJ2EE
필터 가 뭐 예요?
        Filter 는 Servlet 이 아 닙 니 다.Servlet 체인 이 라 고 할 수 있 습 니 다.request 를 바 꾸 고 response 를 수정 할 수 있 습 니 다.응답 을 만 들 수 는 없 지만 하나의 request 가 큰 Servlet 에 도착 하기 전에 request 를 미리 처리 할 수도 있 고 response 가 Servlet 을 떠 날 때 response 를 처리 할 수도 있 습 니 다.
구체 적 인 호출 관 계 는 다음 그림 과 같다.
       Filter 는 Request 와 Response 요청 을 차단 했다 고 할 수도 있다.
주의:
      post 요청 만 유효 합 니 다.
TestFilter 클래스 를 새로 만 들 고 Filter 클래스 를 계승 하면 주요 한 몇 가지 방법 을 볼 수 있 습 니 다.
package com.bjpowermode.drp.util.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 TestFilter 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
		
	}

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		// TODO Auto-generated method stub
		
	}

}

1)init()
filter 의 설정 대상 을 설정 할 때 한 번 만 호출 합 니 다.
2)doFilter()
가장 중요 하고 핵심 적 인 방법 으로 Filter 작업 을 수행 합 니 다.모든 filter 는 doFilter()방법 에서 현재 request 및 response 를 얻 습 니 다.
3)destory()
설정 대상 을 되 돌려 줍 니 다.
Filter 의 생명주기
      응용 프로그램 이 시 작 될 때 Filter 클래스 를 불 러 옵 니 다.용기 가 Filter 대상 인 스 턴 스 를 만 든 후 init()방법 을 호출 합 니 다.이 어 집합 용기 에 저장 하고 기다 리 며 사용자 가 자원 에 접근 했다.사용자 가 방문 한 자원 이 필터 의 url-pattern 에 의 해 차단 되 었 을 때 용 기 는 필터 류 에서 doFilter 방법 을 호출 하고 다음 이나 여러 번 차단 되 는 자원 에 접근 할 때 웹 용 기 는 지정 한 Filter 대상 인 스 턴 스 를 직접 꺼 내 doFilter 방법 을 호출 합 니 다(Filter 대상 이 웹 용기 에 상주 합 니 다).서비스 가 정지 되 거나 다시 불 러 오 면 Filter 의 destroy 방법 을 실행 하고 Filter 대상 을 소각 합 니 다.
주의:init 방법 과 destroy 방법 은 단 한 번 뿐 입 니 다.
예 를 들 어,우 리 는 필터 로 주로 문자 집합 을 설정 하여 jsp 에 중국어 코드 가 흐 트 러 지 는 것 을 방지 합 니 다.
Filter 를 사용 하지 않 으 면 jsp 페이지 마다 다음 문 구 를 추가 해 야 합 니 다.
<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>

그럼 Filter 를 사용 하면 요?
package com.bjpowermode.drp.util.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;

/*
 * 
 *   Filter       
 */
public class CharSetEncodingFilter implements Filter {

	private String encoding;

	@Override
	public void doFilter(ServletRequest arg0, ServletResponse arg1,
			FilterChain chain) throws IOException, ServletException {
		
		//System.out.println("CharsetEncoding--->>>begin");
		//     
		arg0.setCharacterEncoding("GB18030");
		
		//    
		//    filter,   ,    ,  jsp
		chain.doFilter(arg0,arg1);
		//System.out.println("CharsetEncoding--->>>end");
	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {
		
		//System.out.println("CharsetEncoding--->>>init");
		this.encoding=arg0.getInitParameter("encoding");
		//System.out.println("CharsetEncoding--->>>init"+encoding);
	}

}

프로필 에 설정 합 니 다.
주의:
CharSetEncoding Filter 방법 이름과 설정 파일 과 일치 해 야 합 니 다.
클래스 경로 com.bjpowermode.drp.util.filter.CharSetEncoding Filter.
 <filter>
  	<filter-name>CharSetEncodingFilter</filter-name>
  	<filter-class>com.bjpowermode.drp.util.filter.CharSetEncodingFilter</filter-class>
  	<init-param>
  		<param-name>encoding</param-name>
  		<param-value>GBK</param-value>
  	</init-param>
  </filter>
  <!--          -->
  <filter-mapping>
  	<filter-name>CharSetEncodingFilter</filter-name>
  	<!--      -->
  	<url-pattern>*.jsp</url-pattern>
  </filter-mapping>

요약:
        Filter 는 코드 의 유연성 을 향상 시 켜 페이지 가 아 닌 설정 파일 로 변경 합 니 다.
        Filter 는 문자 집합 을 설정 하여 난 코드 문 제 를 해결 할 수 있 을 뿐만 아니 라 사용자 권한 을 검증 하고 사 이 트 를 압축 하 는 데 도 사용 할 수 있다.

좋은 웹페이지 즐겨찾기