【问题标题】:JSP Forward vs. Redirect and Browser URLJSP 转发与重定向和浏览器 URL
【发布时间】:2011-12-05 08:39:37
【问题描述】:

我对 JSP/Servlet 设置以及浏览器 URL 中显示的内容有疑问。 page1.jsp 通过一个带有“SAVE.do”动作的表单提交给servlet。 servlet 希望在保存时将成功消息传递回 page1.jsp。为此,我使用

将消息放入请求中
request.setAttribute("message", "Save Successful");

然后我打电话

request.getRequestDispatcher("page1.jsp").forward(req,resp);

但是,浏览器会显示http://localhost:8080/SAVE.do的URL,而不是http://localhost:8080/page1.jsp

当我将转发更改为重定向时使用

response.sendRedirect("page1.jsp");

那么属性就丢失了。

我想我正在寻找正确的方法来执行此操作,以便当 page1.jsp 再次加载时我可以取回该属性,并在浏览器中显示正确的 URL。

【问题讨论】:

标签: jsp servlets


【解决方案1】:

正确的 URL 是浏览器提交到的 URL。请求首先由 servlet 然后由 JSP 处理这一事实与浏览器无关。顺便说一句,JSP 很可能位于受保护的文件夹中(例如 /WEB-INF),因为浏览器从不直接向此 JSP 发送请求,而是通过调度程序 servlet 的 URL 发送请求。

重定向与转发完全不同。转发意味着:我使用另一个服务器组件来完成我的请求的处理。重定向的意思是:我已经完成了请求,我会要求浏览器去访问另一个URL,从而发出一个新的请求。这个新的 URL 可以是一个完全外部的 URL(例如 google.com)。

在您的情况下,您可能希望应用post-redirect-get 模式,以便刷新“成功”页面不会触发重新提交表单。但是,如果您想显示动态选择的消息,则必须将其保存到会话中并在第二个请求中检索它。不过,如果您想正确应用 MVC 模式,您的第二个请求也应该通过 servlet。

请注意,大多数 MVC 框架都支持 post-redirect-get 模式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-27
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    • 1970-01-01
    相关资源
    最近更新 更多