当前位置: 首页 > 面试题库 >

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

胡禄
2023-03-14
问题内容

我正在编写一个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>");

一种替代方法是<base>在HTML中设置标记,以便所有相对链接都相对于它,有关更多详细信息,请参见以下答案:浏览器无法在调用Servlet时访问/查找CSS,图像和链接之类的相对资源,该Servlet会转发至JSP



 类似资料:
  • 我没有在现实世界的Web项目上工作。在大学里,我们使用Servlets和Spring进行Java Web开发。在这两个项目中,我们都得到了已经配置的web.xml文件,我们只对它们进行了微小的更改。现在我需要从头开始构建一个 Web 应用。我在Eclipse中创建了新的Servlet类,它没有自动创建任何web.xml。然后我用谷歌搜索,我从几个资源中读到,web.xml并不是真正需要的,但是这个

  • 我不能在pyqt应用程序中使用time.sleep,因为这会冻结GUI线程,所以在此期间GUI将完全冻结。我一直在寻找处理这件事的方法。 我试图使用QTimer,但似乎它们需要链接到另一个函数?比如等十秒钟,然后运行一些函数。有没有办法让它等待,然后继续当前的功能?

  • 问题内容: 有没有一种方法可以使页面上的所有链接都相对于根目录? 例如,在我上面可以有一个链接: 该链接指向还是?如果是第一个,是否有办法使其指向第二个呢? 问题答案: 根目录相对的URL以字符开头,看起来像。 您发布的链接:链接到位于一个名为的目录中的html文件,该目录与显示该链接的html页面位于同一目录中。 要使其成为相对于根的URL,请将其更改为: *根据OP中的问题在评论中进行了 *编

  • 问题内容: 我在.war文件的根目录中有一个jsp文件。然后我有一个名为STUFF的文件夹。 如何访问STUFF中的文件read.txt? /Name_of_war/STUFF/read.txt是正确的路径吗? 问题答案: 与webapp相关的路径为。 你 可以 使用一个相对的网络路径转换为绝对的本地磁盘文件系统路径。这样,您就可以在通常对它正在运行的Web上下文一无所知的普通内容中进一步使用它。

  • 问题内容: 在我的烧瓶应用程序中,我每次启动时都会重新创建一个sqlite数据库。 为此,我使用官方网页上显示的代码 我的项目结构如下所示 现在我的StubbyServer.py包含: 如果我的工作目录是命令运行正常 如果我的工作目录是命令,则失败并显示: 在get_db中的文件“ app / StubbyServer.py”中,第43行 带有open(’ schema.sql ‘,mode =’

  • 问题内容: 我对Tomcat不太熟悉,在我看来,它基本上是抽象为cgi服务器,可以在两次调用之间保存JVM -尽管我知道它可以做得多。 我正在寻找一种在Tomcat服务器启动时启动 后台 线程的方法,该方法会定期更新服务器上下文(在我的特殊情况下,这是一个侦听其他服务的心跳并更新可用性信息的线程,但是可以想象得到有多种用途)。 有标准的方法吗?上下文的启动和更新/查询? 指向相关文档和/或代码示例