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