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

sch*_*mmd 3 java servlets scala scalate

我正在编写一个servlet(特别是Scalatra).在servlet中,我在每个页面都包含的目录中有许多链接.我希望这些链接与应用程序库相关.如果我使用链接,如"/ foo"的,当servlet被从根(本地主机:8080 /)担任一切工作正常,但如果我为它服务,从码头/ Tomcat的与其他servlet(本地主机:8080/servlet的)沿着链接servlet之外的点.

对这个问题有什么好处?

Bal*_*usC 6

您需要在链接URL之前添加一个域相对路径,包括获取的上下文路径HttpServletRequest#getContextPath().我不做Scala,所以我不能给出一个Scala目标的答案,但这是你在JSP中如何做到这一点,以便图片是合理的:

<a href="${pageContext.request.contextPath}/servlet">link</a>
Run Code Online (Sandbox Code Playgroud)

当前上下文路径是/foo,那么上面将以HTML格式结束

<a href="/foo/servlet">link</a>
Run Code Online (Sandbox Code Playgroud)

或者,如果您在servlet类中使用Java以编程方式生成HTML(这实际上是一种不好的做法,但除此之外):

out.println("<a href=\"" + request.getContextPath() + "/servlet\">link</a>");
Run Code Online (Sandbox Code Playgroud)

另一种方法是<base>在HTML中设置标签,以便所有相对链接都与它相关,另请参阅此答案以获取更多详细信息:在调用转发给Servlet的Servlet时,浏览器无法访问/查找CSS,图像和链接等相关资源JSP

  • 谢谢你的回答,它让我走上正轨.Jade(scala HTML模板引擎)提供类型为[ScalatraRenderContex]的变量`context`(http://www.scalatra.org/2.0/api/org/scalatra/scalate/ScalatraRenderContext.html).它可以用作`#{context.contextPath}`. (2认同)