2009-08-29 6 views
1

많은 클럽의 데이터를 관리하는 Java 웹 애플리케이션이 있습니다. 신청서에 입력 한 URL에 따라 클럽 정보를 표시하고 싶습니다.Java Servlet 필터에서 HTTPServletRequest의 요청 URL을 가로 채고 변경할 수 있습니까?

예 : "localhost : 8080/MyApp/Club1" ...을 입력하면 응용 프로그램은 requst url (Club1)의 끝을 제거하고 데이터베이스에서 데이터베이스를 조회하여 세션에 추가해야합니다. 그런 다음 모든 데이터베이스 요청은 세션에있는 클럽에 따라 데이터를 조회 할 수 있습니다.

를 입력하면 "로컬 호스트 : 8080/MyApp를/Club2"당신이 세션에 등록에 클럽을 얻고, 모든 데이터베이스 요청이 클럽 나는이 작업을 수행 할 수 있습니다 생각하는 방법을 사용하는 것입니다 2.

위한 것입니다을 HTTPServletRequest(). getRequestURL()을 호출하고 요청 URL에서 클럽 이름을 제거하여 데이터베이스에서 클럽을 조회하는 서블릿 필터.

그러나 응용 프로그램이 정상적으로 작동하도록 요청 URL을 http://localhost:8080/MyApp으로 변경하지는 않겠습니다. 그러나, 나는 이것을 할 수 있다고 생각하지 않는다?

누구든지이 작업을 수행하는 방법에 대한 아이디어가 있습니까? 아니면 더 나은 방법이 있습니까?

답변

2

필자는 필터가 적절한 방법이라고 생각하지 않습니다. 클럽 회원 자격을 기반으로 행동 변화에 대해 설명하는 것은 재사용 할 수있는 서비스 계층 내부에 속한 논리입니다.

더 좋은 방법은 필터를 잊어 버리고 서블릿을 프로그래밍하는 것입니다. 클럽 이름을 매개 변수로 전달하고 해당 클럽의 URL지도에서 조회를 수행하고 서블릿에서 RequestDispatcher를 사용하여 해당 클럽의 URL로 리디렉션하도록합니다. 이전에 필터로 하트 비트를 가로채는 데 어떤 이점도 보이지 않습니다.

스프링을 사용하는 경우이를 서비스에 넣고 웹 MVC 계층에서 매핑 및 요청 라우팅을 처리하도록하는 것이 좋습니다.

이것은 당신이 원하는 것을하기에는 너무 어렵고 복잡한 경우, 당신은 아마 잘못된 것을 시도하고있는 경우 중 하나입니다. 이 작업을 쉽게 수행 할 수있는 방법이 있으며 필터가 가까이 있지 않습니다.

0

Core J2EE Patterns - Intercepting Filter

요약 : 코어 요청 처리 코드를 변경하지 않고, 표준 하게 프로세스 공통 서비스 플러그 필터를 만든다. 필터는 수신 요청을 가로 채고 및 나가는 응답을 가로 채고 전처리 및 사후 처리를 허용합니다. Google 은 필터를 눈에 잘 띄지 않게 추가하고 제거 할 수 있으며 코드는 기존 코드로 변경해야합니다. 에서

+0

덕분에 올 볼 수 있습니다. 최선의 방법에 대한 아이디어? –

+1

Ofcourse이지만 이러한 필터는 로깅, 매개 변수 추가 또는 변경, 다른 URL로 리디렉션하지 않는 것과 같은 작업을 수행합니다. 그런 일을 한 필터의 예를 찾을 수 없었습니다. – duffymo

+0

감사합니다. 필터를 사용하여 마크를 벗어난 것처럼 들리므로이 방법을 포기해야합니다. 나는 아직도 이것을하는 가장 좋은 방법이 무엇인지 확실하지 않다. 저는이 문제가 정말로이 문제로 귀결된다고 생각합니다. 나는 easly 클럽 데이터를로드 할 수 있습니다 알고있는 경우에 사용자 유형 : 로컬 호스트 /을 myApp 클럽 = 요청이 다음에서 클럽을 얻는 오면 즉시 요청 매개 변수를 얻기의 단지 사건 나의 클럽 데이터 베이스. 정확히 똑같은 일을하는 방법을 찾지 못했지만 요청 매개 변수가 아닌 경로에서 클럽 이름을 얻습니다. –

0

서블릿의 do_GET/do_POST, 당신은 클럽으로 URI의 첫 부분을 해석 그 다음 다른 코드 만 외모에 위임, 이미 아니라면 (응용 프로그램 범위를 사용) 세션에 추가 할 수 있습니다 나머지 URI에서는 적절한 경우 해당 세션을 사용한다.

1

urlrewritefilter을 살펴보십시오. 이것은 서블릿이보기 전에 요청 URL을 수정할 수있는 서블릿 필터입니다. 쿼리 매개 변수를 경로 매개 변수로 변환하거나 경로 매개 변수에서 변환하는 데 종종 사용됩니다.당신이 그것을 위해 구글 경우

, 당신은 꽤 높은 프로필 자바 응용 프로그램의 스택 트레이스 :) 이것에 대한

+0

이 서블릿 필터는 요청 처리를 체인의 다음 서블릿 필터로 전달하지 않지만 즉시 서블릿에 요청을 전달하십시오. 이것은 문제 일 수 있습니다. –

관련 문제