2011-01-13 5 views
3

필터를 사용하는 데 드는 하드 데이터가 있는지 알고 싶습니다. 예를 들어, 동작 공유를 위해 서블릿에서 유산을 사용하거나 필터를 사용하는 사이? 누군가가 하드 데이터를 게시 할 수있는 경우성능에 대한 javax.servlet.Filter의 영향?

감사합니다,

앙투안

답변

13

나는 놀랄 것입니다. 그리고 그럴 경우에도 필터에서 수행되는 작업에 따라 수치가 달라지기 때문에 가장 적절하지는 않습니다. 또한 조기 최적화 카테고리에 속할 가능성이 있습니다. 당신이 정말로 나쁘게 뭔가를 망가 뜨리지 않으면 문제가되지 않을 것입니다.

"유산"은 "상속"을 의미하며 필 터는 훨씬 나은 해결책이라고 가정합니다. 구성을 끄고 켤 수 있습니다.

필터는 HTTP 요청의 데코레이터 또는 애스펙트입니다. 그것들은 잘 존중되고 검증 된 패턴이기 때문에 서블릿에서 유용하고 안전하지 않은 이유는 무엇입니까?

귀하의 우려는 과장되었습니다.

이렇게 말하면 성능이 문제가되는 길고 복잡한 필터 체인을 만드는 것을 권장하지 않습니다. 압축, 로깅, 성능 메트릭 등을 수행하고 12 개의 필터 체인으로 끝내면 문제가 발생할 수 있습니다.

+3

그러나 압축, 로깅, 성능 메트릭 등을 수행해야하는 경우 필터 또는 다른 방법으로 구현할 때마다 동일한 시간이 소요됩니다. 필자가 필터에 관해서 싫어하는 부분은 딥 스택 트레이스이지만, 그것은 허용 가능한 스택 호출 깊이 아래의 외관과 방법입니다. 그리고 "너무 많은 움직이는 부분"문제 (즉, 구성 오버 헤드)가 있습니다. – Thilo

+0

@Thilo : Java EE 6에서는 구성없이 사용할 수 있습니다. 따라서이 문제도 해결됩니다. –

+0

EE6은 XML이 없어지지만 여전히 어딘가에 (물론 IDE와 프로그래머가 더 친숙한 주석으로 구성해야합니다.) 큰 발전입니다. – Thilo

3

필터에서 실제로 수행 한 작업으로는 측정 할 수 없으며 완전히 작습니다. 서블릿과 같이 매번 생성되는 필터의 새로운 인스턴스조차 존재하지 않습니다.

상속보다 큰 장점은 런타임에 구성하고 작성하는 기능입니다 (상위 클래스가 컴파일되고 하나만있을 수 있음).

필터는 한 요청 만 래핑 할 수 있다는 점을 고려해야합니다. 필터는 요청 전후에 (또는 대신에) 코드를 추가 할 수 있습니다. 서블릿이 실행 된 후 응답이 이미 커밋되었을 수 있습니다. 요청 처리의 중간에 코드를 삽입 할 수 없습니다.이 클래스는 부모 클래스 (또는 서블릿 끝의 다른 기술)에서 올바르게 정의 된 콜백을 통해 수행 할 수 있습니다. 즉, 필터가 특정 작업에 적합하지 않을 수 있습니다.

관련 문제