【问题标题】:How do I alter the URL?如何更改 URL?
【发布时间】:2011-02-07 14:56:01
【问题描述】:

我目前正在为一家公司开发一个大型 Web 应用程序,我们已经进行了大约 4 个月,但是我们有一个无害(但令人讨厌)的问题,因为我们没有时间更改它,所以我们刚刚离开。

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

WebsiteXXXXXXX.com/XXX/ControllerServletXXXX

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

WebsiteXXXXXXX.com/XXX/ControllerServlet/ControllerServlet/XXXX

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

等等……

虽然它工作得很好,但显然有些不对劲。

我想这是一个简单的解决方法,但确实可以请人帮忙。

非常感谢

【问题讨论】:

  • 在你的JSP中,查看每个表单的“target”参数,然后反馈一下好吗?
  • 在我们的表单参数中,我们使用格式 ControllerServlet/action 并从 Servlet 的路径中读取操作。从那里我们像处理典型的 Model 2 MVC 一样处理它,做业务并重定向到视图。问题在于我们正在从路径中读取操作,URL 已经堆叠了 URL

标签: html model-view-controller jsp url


【解决方案1】:

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

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

<form action="ControllerServlet/action">

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

要么

<form action="action">

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

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

..相对于域根,或

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

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

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

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

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

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

以上都指向http://example.com/webapp/ControllerServlet/action

【讨论】:

  • 我要去尝试解决这个问题,我想我可能犯了很多非常简单的错误。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2020-01-08
  • 2018-07-31
  • 2023-03-26
  • 2016-11-25
  • 2011-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多