Tomcat 5.5 中的 URL 路由和相对链接

Posted

技术标签:

【中文标题】Tomcat 5.5 中的 URL 路由和相对链接【英文标题】:URL routing and relative links in Tomcat 5.5 【发布时间】:2010-10-06 02:26:08 【问题描述】:

我正在尝试将 URL 路由添加到在 Tomcat 5.5 中运行的 Web 应用程序。

我想让动态页面的 URL 更友好,将 main.jsp?type=test&group=info 更改为 main/test/info 风靡一时。

我在 web.xml 中设置了以下内容

  <servlet>
    <servlet-name>main</servlet-name>
    <jsp-file>/main.jsp</jsp-file>
  </servlet>
  <servlet-mapping>
    <servlet-name>main</servlet-name>
    <url-pattern>/main/*</url-pattern>
  </servlet-mapping>

在 main.jsp 中,我使用 request.getPathInfo() 来获取执行路由所需的数据。这一切似乎都运行良好,当我浏览到 http://mytestserver/example/main/test/info 时,我得到了我期望的 html

问题是该页面上的任何相关链接、图像、样式表、javascript 等现在都已损坏,因为它们被解释为相对于完整 URL。

我想不出一个简单的方法来使用静态链接,因为测试服务器和生产服务器上的 URL 处于不同的级别:http://mytestserver/example/ 映射到生产中的http://example.com/,我真的不想拥有编写代码来包装站点上的每个内部链接或为测试服务器上的每个站点设置一个虚拟服务器。

还有什么我可以做的吗?

【问题讨论】:

我读到您不想在测试服务器中设置虚拟服务器,但从长远来看,这可能会让事情变得更容易。而且设置它的麻烦很小。 感谢大家的意见。我最终编写了一个过滤器来处理页面响应,即时更改 URL。效果很好。 【参考方案1】:

我有一个这样的系统在工作。

我们使用一个名为urlrewrite 的包,它基本上是作为j2ee 过滤器完成的apache tomcat 重写器。这很酷,但我遇到了同样的问题。

为了解决这个问题,我编写了另一个过滤器,该过滤器插入到过滤器链中重写器之前。它的工作是在重写器破坏它之前获取路径信息,并将该信息粘贴到请求属性中。它根据 Web 应用程序根目录的路径信息解析请求的路径信息,以计算出您需要多少个“../”才能到达 Web 应用程序的根目录(从客户端的角度来看)。

系统的其他组件然后使用该属性的内容来构建它们的相对 url。效果很好。

The system is here.

寻找任何分类单元(MACROPODIDAE 是一个不错的选择)。 url remapper 将所有看起来像 rest-y 的链接变成请求参数。

给我发电子邮件在工作 - Paul.Murray@environment.gov.au 如果你想要一些来源。这不是秘密,但这是工作,所以我需要许可。

【讨论】:

【参考方案2】:

您可以使用一些方法让您的生活更轻松:

    在文档的头部放置一个base 元素。如果添加&lt;base href="http://myserver/example/main"/&gt; 标签,则&lt;a href="test/info"&gt;Hi!&lt;/a&gt; 将链接到http://myserver/example/main/test/info。 创建一个jsp标签(或函数),它会为你生成绝对url,比如:&lt;myserver:a href="test/info"&gt;This is a link&lt;/myserver:a&gt; 然后你可以在那个标签中创建一个绝对url的逻辑。大多数应用框架(如 struts 和 spring)已经定义了这样的标签。

【讨论】:

以上是关于Tomcat 5.5 中的 URL 路由和相对链接的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.5 中的多字段排序

如何通过Java代码获取tomcat服务器的绝对路径

Next JS 中的相对路由

使用 Angular 1.5 组件的嵌套路由中的相对视图

Laravel 5.5登录后重定向到特定路由

vue中的路由是啥意思