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

ecfdbz9o  于 7个月前  发布在  其他
关注(0)|答案(2)|浏览(57)

我正在尝试将URL路由添加到在Tomcat 5.5中运行的Web应用程序中。
我想让动态页面的网址更友好,改变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/Map到生产中的http://example.com/,我真的不想编写代码来 Package 站点上的每个内部链接,或者为测试服务器上的每个站点设置虚拟服务器。
还有什么我能做的吗

xqnpmsa8

xqnpmsa81#

我在工作中有这样的一个系统。
我们使用了一个叫做urlrewrite的软件包,它基本上是一个j2ee过滤器的apache tomcat重写器,很酷,但是我遇到了同样的问题。
为了解决这个问题,我写了另一个过滤器,它被插入到重写器之前的过滤器链中。它的工作是在重写器破坏它之前抓取路径信息,并将该信息粘贴到请求属性中。它根据Web应用程序根目录的路径信息解析请求的路径信息,计算出你需要多少个“../”才能到达Web应用的根目录(从客户端的Angular 来看)。
系统的其他组件然后使用该属性的内容来构建它们的相对URL。工作得很好。
The system is here.
查找任何分类单元(Macropodidae是一个不错的选择)。所有看起来很简单的链接都会被url重Map器转换为请求参数。

dwthyt8l

dwthyt8l2#

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

相关问题