Java Tomcat 5.5中的URL路由和相关链接

Java Tomcat 5.5中的URL路由和相关链接,java,jsp,tomcat,url-routing,friendly-url,Java,Jsp,Tomcat,Url Routing,Friendly Url,我正在尝试向运行在Tomcat5.5中的web应用程序添加URL路由 我想使动态页面URL更友好,将main.jsp?type=test&group=info更改为main/test/info,这是非常流行的 我在web.xml中设置了以下内容 <servlet> <servlet-name>main</servlet-name> <jsp-file>/main.jsp</jsp-file> </servl

我正在尝试向运行在Tomcat5.5中的web应用程序添加URL路由

我想使动态页面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
主要的
/主要/*
在main.jsp中,我使用
request.getPathInfo()
获取路由所需的数据。所有这些似乎都很好,当我浏览到
http://mytestserver/example/main/test/info
我得到了我期望的html

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

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


还有什么我能做的吗?

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

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

为了修复它,我编写了另一个过滤器,在重写器之前插入到过滤器链中。它的工作是在重写器损坏pathinfo之前获取它,并将该信息粘贴到请求属性中。它根据web应用程序根目录的pathinfo解析请求的pathinfo,以计算需要到达web应用程序根目录的“./”数量(从客户端的角度)

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

寻找任何分类单元(大足亚科是一个不错的选择)。url重新映射程序将所有看起来像rest-y的链接转换为reqest参数


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

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

  • 在文档的开头添加一个元素。如果添加
    标记,则
    将链接到
    http://myserver/example/main/test/info
  • 创建一个jsp标记(或一个函数),它将为您生成绝对url,例如:
    这是一个链接
    ,然后您可以在该标记中使用逻辑来创建绝对url。大多数应用程序框架(如struts和spring)已经定义了这样的标记

  • 我了解到您不希望在测试服务器中设置虚拟服务器,但从长远来看,这可能会使事情变得更容易。设置它的麻烦很小。谢谢大家的意见。最后,我编写了一个过滤器来处理页面响应,动态更改URL。它工作得很好。