我正在尝试将URL路由添加到在Tomcat 5.5中运行的Web应用程序。
我想让动态网页网址更加友好,将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/
,我真的这样做不希望编写代码来包装站点上的每个内部链接或为测试服务器上的每个站点设置虚拟服务器。
我还能做些什么吗?
答案 0 :(得分:3)
我在工作中有这样的系统。
我们使用名为urlrewrite的包,它基本上是作为j2ee过滤器完成的apache tomcat重写器。这很酷,但我遇到了同样的问题。
为了修复它,我写了另一个过滤器,它在重写器之前插入到过滤器链中。它的工作是在重写器破坏之前获取pathinfo,并将该信息粘贴到请求属性中。它根据Web应用程序根目录的pathinfo解析请求的pathinfo,计算出需要多少“../”到达Web应用程序的根目录(从客户端的角度来看)。
系统的其他组件然后使用该属性的内容来构建其相对URL。效果很好。
寻找任何分类单元(MACROPODIDAE是一个不错的选择)。所有其余的链接都会被url重映射器变为reqest参数。
给我发电子邮件 - Paul.Murray@environment.gov.au,如果你想要一些消息来源。这不是秘密,但它是有效的,所以我需要得到许可。
答案 1 :(得分:1)
您可以使用一些可以让您的生活更轻松的方法:
<base href="http://myserver/example/main"/>
代码,则<a href="test/info">Hi!</a>
会链接到http://myserver/example/main/test/info
。<myserver:a href="test/info">This is a link</myserver:a>
然后您可以在该标记中使用逻辑来创建绝对URL。大多数应用程序框架(如struts和spring)已经定义了这样的标记。