JAVA 의 Filter 필터 사용 문자 집합 설정
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 는 문자 집합 을 설정 하여 난 코드 문 제 를 해결 할 수 있 을 뿐만 아니 라 사용자 권한 을 검증 하고 사 이 트 를 압축 하 는 데 도 사용 할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
조건자로 필터링프로그래밍에서 컬렉션이 있을 때 요구 사항을 충족하는 부분을 필터링하고 나머지는 버려야 하는 경우가 있습니다. 자세한 예는 환자 기록 목록이 있고 미성년 환자 목록을 가져오려는 경우입니다. 이 코드를 자바 파일에 복...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.