2009-02-07 4 views
2

Tomcat 5.5에서 실행되는 웹 응용 프로그램에 URL 라우팅을 추가하려고합니다.Tomcat 5.5의 URL 라우팅 및 상대 링크

동적 페이지 URL을 더 친숙하게 만들고 싶습니다. main.jsp?type=test&group=infomain/test/info으로 변경하는 것이 좋습니다.

난은 web.xml

<servlet> 
    <servlet-name>main</servlet-name> 
    <jsp-file>/main.jsp</jsp-file> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>main</servlet-name> 
    <url-pattern>/main/*</url-pattern> 
    </servlet-mapping> 

에 다음과 main.jsp에 내가 라우팅을 수행하는 데 필요한 데이터를 얻을 수 request.getPathInfo()를 사용 설정했습니다. 이 모든 것은 잘 작동하는 것으로 보이며, 내가 http://mytestserver/example/main/test/info으로 갔을 때 나는 내가 기대하는 html을 얻는다.

문제는 해당 페이지, 이미지, 스타일 시트, 자바 스크립트 등의 모든 상대 링크가 이제 전체 URL을 기준으로 해석되므로 문제가 있다는 것입니다.

테스트 서버와 프로덕션 서버의 URL이 서로 다른 수준에 있기 때문에 정적 링크를 사용하는 쉬운 방법을 생각할 수 없습니다. http://mytestserver/example/은 생산시 http://example.com/에 매핑되며 코드를 작성하지 않으려 고합니다. 사이트의 모든 내부 링크를 랩핑하거나 테스트 서버의 각 사이트에 대한 가상 서버를 설정하십시오.

내가 할 수 있는게 더 있습니까?

+0

테스트 서버에 가상 서버를 설치하고 싶지 않지만 장기적으로 볼 때이 작업을 쉽게 수행 할 수 있습니다. 그리고 그것을 설정하는 문제는 최소한입니다. – Tiago

+0

귀하의 의견을 보내 주셔서 감사합니다. 나는 페이지 응답을 처리하는 필터를 작성하여 즉시 URL을 변경했습니다. 그것은 위대한 작품. –

답변

3

나는 직장에서 이와 같은 시스템을 가지고있다.

우리는 urlrewrite이라는 패키지를 사용합니다.이 패키지는 기본적으로 j2ee 필터로 완료된 아파치 tomcat 재 작성기입니다. 멋지지만이 같은 문제가 발생했습니다.

수정하려면 필터 체인 에 삽입 된 다른 필터를 작성한 후 리 라이저를 작성하십시오. 그것의 일은 rewriter가 mangles 전에 pathinfo를 움켜 잡고, 요청 속성으로 그 정보를 고수하는 것이다. 웹 응용 프로그램 루트의 pathinfo에 대한 요청의 경로 정보를 해결하여 클라이언트의 관점에서 웹 응용 프로그램의 루트로 가져올 "../"수를 계산합니다.

그런 다음 시스템의 다른 구성 요소는 해당 속성의 내용을 사용하여 상대 URL을 작성합니다. 훌륭하게 작동합니다. 어떤 분류군에 대한

The system is here.

봐 (캥거루과가 좋은 선택이 될 것입니다). 모든 rest-y looking 링크는 url remapper에 의해 reqest 매개 변수로 변환됩니다.

이메일 출처 : [email protected] 출처를 알려주십시오. 그것은 비밀이 아니지만, 그것이 필요하므로 허가가 필요합니다.

1

여러분의 인생을 더 쉽게 만들 수 있습니다 당신이 그것을 사용할 수있는 몇 가지 방법이 있습니다 :

  1. 이 문서의 머리에 base 요소를 넣습니다. <base href="http://myserver/example/main"/> 태그를 추가하면 <a href="test/info">Hi!</a>http://myserver/example/main/test/info으로 링크됩니다.
  2. 절대 URL을 생성하는 jsp 태그 (또는 함수)를 만듭니다. 따라서 다음과 같이됩니다. <myserver:a href="test/info">This is a link</myserver:a> 그런 다음 해당 태그에 절대 URL을 만들 수있는 논리를 사용할 수 있습니다. 스트럿과 스프링과 같은 대부분의 앱 프레임 워크에는 이미 이러한 태그가 정의되어 있습니다.