我正在编写一个 servlet(特别是使用 Scalatra)。在 servlet 中,我在每个页面都包含的目录上有许多链接。我希望这些链接与应用程序库相关。如果我使用诸如“/foo”之类的链接,那么当从根 (localhost:8080/) 提供 servlet 时一切正常,但如果我从 Jetty/Tomcat 以及其他 servlet (localhost:8080/servlet) 提供它,则链接servlet 之外的点。
这个问题有什么好的解决方法?
您需要在链接 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