Spring MVC中重定向和视图呈现的区别
在学习Spring MVC知识时,有一些关于Spring返回类型的东西让我很困惑。
在本文档中: 使用@RequestMapping映射请求,它们返回appointments/new
和redirect:/appointments
。
码
@RequestMapping(method = RequestMethod.POST) public String add(@Valid AppointmentForm appointment, BindingResult result) { if (result.hasErrors()) { return "appointments/new"; } appointmentBook.addAppointment(appointment); return "redirect:/appointments"; }
这两种返回类型之间的主要区别是什么? 据我了解,第一种类型作为前进动作返回,但如果我是对的,为什么他们也forward:/
发布forward:/
作为返回类型?
第一个返回视图,而后一个重定向到另一个控制器请求映射操作。 让我们从代码本身中解脱出来。
@RequestMapping(method = RequestMethod.POST) public String add(@Valid AppointmentForm appointment, BindingResult result) { if (result.hasErrors()) {
此处,当结果有错误时,它会呈现视图appointments/new
以便用户可以输入正确的详细信息并再次添加应用程序。 URL不会在浏览器中更改
return "appointments/new"; } appointmentBook.addAppointment(appointment);
但是在这里,当结果没有错误时,此控制器操作会将网站重定向到URL /约会 。 检查更改为重定向URL的Web浏览器URL
return "redirect:/appointments"; }
关于forward:
vs redirect:
引用此Satckoverflow回答为什么我们在Spring MVC中使用重定向
使用控制器中的重定向前缀将生成一个HTTP响应,其中包含302状态代码和指向重定向URL的位置标头。 然后,浏览器将重定向到该URL(第一个请求中公开的模型将丢失, 浏览器URL将是第二个 )。
使用前向前缀,转发将由servlet在内部完成,因此不需要第二个请求(URL将保持不变) 。 前缀前缀仅应用于浏览器可以安全重复的请求中。 当您发送更改数据库状态的表单时,情况并非如此(重新加载浏览器将导致重复提交)。 在这些情况下,您应该使用重定向并应用POST-redirect-GET模式。
返回视图名称,例如:
return new ModelAndView(/);
不执行转发或重定向,而是实际抓取该文件服务器端并将其作为浏览器输出进行处理。
当您返回"redirect:/somePath"
它实际上是向浏览器发送重定向(而不是转发)。 重定向导致页面刷新并在浏览器中发生,并且在服务器端发生转发,并且不会更改您的URL。
请看这个链接。 它解释了重定向和转发之间的区别
- 使用RSA公钥加密AES密钥
- Selenium Java(maven项目):TestNG结果与ReportNG不同
- 使用TransactionManager使用Spring JmsTemplate编写消息
- getter与setter与成员之间的JAXB注释之间的区别是什么?
- 如何检测字节数组中的字符串结尾到字符串转换?
- AES / CBC / PKCS5Padding与AES / CBC / PKCS7Padding具有256个密钥大小的性能java
- 如何使用JAVA将项目添加到Mac OS X中的Finder上下文菜单中?
- 如何在JAVA中找到Method的返回类型?
- 如何指定在Joda-Time中应该解析哪个世纪的日期