【问题标题】:Servlet link relative to application base相对于应用程序库的 Servlet 链接
【发布时间】:2011-09-09 21:15:56
【问题描述】:

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

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

【问题讨论】:

    标签: java scala servlets scalate


    【解决方案1】:

    您需要在链接 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 中设置 &lt;base&gt; 标记,以便所有相对链接都相对于它,有关更多详细信息,另请参阅此答案:Browser can't access/find relative resources like CSS, images and links when calling a Servlet which forwards to a JSP

    【讨论】:

    • 感谢您的回答,它让我走上了正轨。 Jade(scala HTML 模板引擎)提供了ScalatraRenderContex 类型的变量context。可以用作#{context.contextPath}
    猜你喜欢
    • 2010-11-15
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多