我目前正在为一家公司开发一个大型网络应用程序,我们大约需要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
依旧......
虽然它工作得非常好,但事情显然不对。
我认为这是一个简单的修复,但可以真正使用某些人的帮助。
非常感谢
答案 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
。