2011-09-09 4 views
3

서블릿 (특히 Scalatra 포함)을 작성하고 있습니다. 서블릿에는 모든 페이지에 포함 된 목차에 대한 많은 링크가 있습니다. 나는이 링크를 응용 프로그램 기반에 상대적으로 연결하고자합니다. "/ foo"와 같은 링크를 사용하면 서블릿이 루트 (localhost : 8080 /)에서 제공 될 때 모든 것이 잘 작동하지만 다른 서블릿 (localhost : 8080/servlet)과 함께 Jetty/Tomcat에서 서비스를 제공하면 링크 서블릿 외부의 점.응용 프로그램 기반의 서블릿 링크

이 문제에 대한 좋은 해결책은 무엇입니까?

답변

5

HttpServletRequest#getContextPath()으로 얻은 컨텍스트 경로를 포함하는 도메인 상대 경로를 링크 URL 앞에 추가해야합니다. 내가 스칼라을하지 않는다, 그래서 스칼라 - 대상 답을 줄 수는 없지만, 여기에 그림이 소리 있도록 JSP에서 그것을 할 거라고 방법은 다음과 같습니다

<a href="${pageContext.request.contextPath}/servlet">link</a> 

는 현재 컨텍스트 경로는 /foo 경우 다음 위의

<a href="/foo/servlet">link</a> 

로 HTML에서 종료 또는 것입니다 당신이 (그 옆 실제로 가난한 연습이다,하지만) 프로그래밍 HTML을 생성하는 서블릿 클래스 내부에 자바를 사용하는 경우 :

out.println("<a href=\"" + request.getContextPath() + "/servlet\">link</a>"); 

또 다른 대안은 상대 링크가 상대적으로되도록 HTML에 <base> 태그를 설정하는 것입니다. 자세한 내용은이 답변도 참조하십시오. Browser can't access/find relative resources like CSS, images and links when calling a Servlet which forwards to a JSP

+2

답을 보내 주시면 감사하겠습니다. Jade (scala HTML 템플릿 엔진)는 [ScalatraRenderContex] 유형의 변수'context'를 제공합니다 (http://www.scalatra.org/2.0/api/org/scalatra/scalate/ScalatraRenderContext.html). 그것은'# {context.contextPath} '로 사용할 수 있습니다. – schmmd

+0

니스, 천만에. – BalusC

관련 문제