代码之家  ›  专栏  ›  技术社区  ›  Skip Head

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

  •  2
  • Skip Head  · 技术社区  · 16 年前

    我试图将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/ 在生产环境中,我真的不想编写代码来包装站点上的每个内部链接,也不想在测试服务器上为每个站点设置虚拟服务器。

    我还能做什么吗?

    2 回复  |  直到 16 年前
        1
  •  3
  •   paulmurray    16 年前

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

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

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

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

    The system is here.

    寻找任何分类单元(MACROPODIDAE是一个不错的选择)。所有看起来很静态的链接都会被url重映射器转换为reqest参数。

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

        2
  •  1
  •   Cameron Pope    16 年前

    有几种方法可以让你的生活更轻松:

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