相对于应用程序库的Servlet链接

时间:2011-09-09 21:15:57

标签: java scala servlets scalate

我正在编写一个servlet(特别是Scalatra)。在servlet中,我在每个页面都包含的目录中有许多链接。我希望这些链接与应用程序库相关。如果我使用诸如“/ foo”之类的链接,当从根(localhost:8080 /)提供servlet时,一切正常,但是如果我从Jetty / Tomcat和其他servlet(localhost:8080 / servlet)一起提供它在servlet之外的点。

这个问题有什么好处?

1 个答案:

答案 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