我遇到了JSP / Servlet设置问题以及浏览器URL中显示的内容。 page1.jsp通过一个动作为“SAVE.do”的表单提交给servlet。 servlet想要在save上将成功消息传递回page1.jsp。我通过使用
将消息放入请求中来完成此操作request.setAttribute("message", "Save Successful");
然后我打电话给
request.getRequestDispatcher("page1.jsp").forward(req,resp);
但是,浏览器会显示http://localhost:8080/SAVE.do而不是http://localhost:8080/page1.jsp
的网址当我使用
将前进更改为重定向时response.sendRedirect("page1.jsp");
然后属性丢失。
我想我正在寻找正确的方法来做到这一点,这样当page1.jsp再次加载时我可以恢复该属性,并在浏览器中显示正确的URL。
答案 0 :(得分:8)
正确的URL是浏览器提交的URL。请求首先由servlet处理然后由JSP处理,这与浏览器无关。顺便说一句,JSP很可能位于受保护的文件夹(如/WEB-INF
)中,因为浏览器从不直接向此JSP发送请求,而是通过调度程序servlet的URL。
重定向与前锋完全不同。转发意味着:我使用另一个服务器组件来完成我的请求的处理。重定向意味着:我已经完成处理请求,我会要求浏览器访问另一个URL,从而提出新的请求。这个新网址可能是一个完全外部的网址(例如google.com)。
在您的情况下,您可能希望应用post-redirect-get模式,以便刷新“成功”页面不会触发重新提交表单。但是,如果要显示动态选择的消息,则必须将其保存到会话中并在第二个请求中检索它。但是,如果要正确应用MVC模式,第二个请求也应该通过servlet。
请注意,大多数MVC框架都支持post-redirect-get模式。