2

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

我想让动态页面 URL 更友好,更改main.jsp?type=test&group=infomain/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/生产中,我真的不想编写代码来包装每个内部链接站点或在测试服务器上为每个站点设置一个虚拟服务器。

还有什么我可以做的吗?

4

2 回答 2

3

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

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

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

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

系统在这里。

寻找任何分类单元(MACROPODIDAE 是一个不错的选择)。url 重新映射器将所有看起来像 REST 的链接变成请求参数。

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

于 2009-02-07T04:03:20.537 回答
1

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

  1. 在文档的头部放置一个基本元素。如果添加<base href="http://myserver/example/main"/>标签,<a href="test/info">Hi!</a>则将链接到http://myserver/example/main/test/info.
  2. 创建一个将为您生成绝对 url 的 jsp 标记(或函数),例如:<myserver:a href="test/info">This is a link</myserver:a>然后您可以在该标记中创建一个绝对 url 的逻辑。大多数应用程序框架(如 struts 和 spring)已经定义了这样的标签。
于 2009-02-07T04:09:15.423 回答