3

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

这个问题有什么好的解决方法?

4

1 回答 1

6

您需要在链接 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 calls a Servlet which forwards to a JSP

于 2011-09-09T21:24:10.147 回答