我正在尝试将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/
Map到生产中的http://example.com/
,我真的不想编写代码来 Package 站点上的每个内部链接,或者为测试服务器上的每个站点设置虚拟服务器。
还有什么我能做的吗
2条答案
按热度按时间xqnpmsa81#
我在工作中有这样的一个系统。
我们使用了一个叫做urlrewrite的软件包,它基本上是一个j2ee过滤器的apache tomcat重写器,很酷,但是我遇到了同样的问题。
为了解决这个问题,我写了另一个过滤器,它被插入到重写器之前的过滤器链中。它的工作是在重写器破坏它之前抓取路径信息,并将该信息粘贴到请求属性中。它根据Web应用程序根目录的路径信息解析请求的路径信息,计算出你需要多少个“../”才能到达Web应用的根目录(从客户端的Angular 来看)。
系统的其他组件然后使用该属性的内容来构建它们的相对URL。工作得很好。
The system is here.的
查找任何分类单元(Macropodidae是一个不错的选择)。所有看起来很简单的链接都会被url重Map器转换为请求参数。
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已经定义了这样的标签。