如何更改URL?

时间:2010-04-13 19:30:05

标签: html model-view-controller jsp url

我目前正在为一家公司开发一个大型网络应用程序,我们大约需要4个月,但我们刚刚离开时遇到了一个无害(但很烦人)的问题,因为我们没时间改变它。 / p>

我们设置MVC的方式是让我们将Servlet一个接一个地堆叠在URL上,所以如果我们有一个名为“ControllerServlet”的Servlet并且我在网站上做了一些我会得到一个结果比如这是第一次。

WebsiteXXXXXXX.com/XXX/的 ControllerServlet中 XXXX

下次我做某事时一切都会正常工作,但URL会像这样堆叠ControllerServlet路径。

WebsiteXXXXXXX.com/XXX / ControllerServlet中/ ControllerServlet中/ XXXX

WebsiteXXXXXXX.com/XXX / ControllerServlet中/ ControllerServlet中/ ControllerServlet中/ XXXX

依旧......

虽然它工作得非常好,但事情显然不对。

我认为这是一个简单的修复,但可以真正使用某些人的帮助。

非常感谢

1 个答案:

答案 0 :(得分:1)

当使用表单操作中的上下文相关URL时(即没有域部分且没有前导斜杠/的URL),则它相对于当前请求URL的最后一个上下文。

http://example.com/webapp/ControllerServlet请求并包含以下表单操作的页面时:

<form action="ControllerServlet/action">

然后绝对操作网址将为http://example.com/webapp/ControllerServlet/ControllerServlet/action。要解决此问题,您需要确保表单操作URL相对于请求URL的方式正确。对于http://example.com/webapp/ControllerServlet/action请求的页面,有多种方法,具体取决于您 可以请求同一页面的方式。

无论

<form action="action">

..相对于请求网址中的 last 上下文,或

<form action="/webapp/ControllerServlet/action">

..相对于域根目录,或

<form action="../ControllerServlet/action">

..相对于之前中的最后一个上下文中的上下文(它将有效地从当前请求URL中删除/ControllerServlet并再次附加它 - 实际上有点毫无意义,但如果在上下文中有更多的servlet,则很有用,或者

<form action="${pageContext.request.contextPath}/ControllerServlet/action">

..相对于域根目录(当您不想对Web应用程序的上下文路径进行硬编码时很有用),或者

<head>
    <base href="${pageContext.request.contextPath}">
    ...
</head>
<body>
    <form action="ControllerServlet/action">
    ...
</body>

..适用于所有链接和表单。

以上所有内容都将指向http://example.com/webapp/ControllerServlet/action