我正在编写一个servlet(特别是Scalatra)。在servlet中,我在每个页面都包含的目录中有许多链接。我希望这些链接与应用程序库相关。如果我使用诸如“/ foo”之类的链接,当从根(localhost:8080 /)提供servlet时,一切正常,但是如果我从Jetty / Tomcat和其他servlet(localhost:8080 / servlet)一起提供它在servlet之外的点。
这个问题有什么好处?
答案 0 :(得分:5)
您需要在链接URL前加上一个域相对路径,包括HttpServletRequest#getContextPath()
获取的上下文路径。我不做Scala,所以我不能给出一个Scala目标的答案,但是这是你在JSP中如何做到这一点,以便图片是合理的:
<a href="${pageContext.request.contextPath}/servlet">link</a>
当前上下文路径为/foo
时,上述内容将以HTML格式结束
<a href="/foo/servlet">link</a>
或者如果你在servlet类中使用Java以编程方式生成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