我正在尝试将 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/
,我真的不想编写代码来包装网站上的每个内部链接或为测试服务器上的每个网站设置一个虚拟服务器。
还有什么我可以做的吗?
我在工作中有一个这样的系统。
我们使用一个名为 urlrewrite 的包,它基本上是作为 j2ee 过滤器完成的 apache tomcat 重写器。很酷,但我遇到了同样的问题。
为了解决这个问题,我编写了另一个过滤器,该过滤器在重写器之前插入到过滤器链中。它的工作是在重写器破坏路径信息之前获取路径信息,并将该信息粘贴到请求属性中。它根据 Web 应用程序根目录的路径信息解析请求的路径信息,以计算出您需要多少个“../”才能到达 Web 应用程序的根目录(从客户端的角度来看)。 系统的其他组件然后使用该属性的内容来构建它们的相对 URL。效果很好。
系统来了。寻找任何分类单元(巨足科是一个不错的选择)。所有看起来其余的链接都会被 url 重新映射器变成请求参数。
将
<base href="http://myserver/example/main"/>
标签,那么 <a href="test/info">Hi!</a>
将链接到 http://myserver/example/main/test/info
。创建一个 jsp 标签(或函数),它将为您生成绝对 url,例如: <myserver:a href="test/info">This is a link</myserver:a>