Tie*_*yen 3 java model-view-controller spring 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";
}
Run Code Online (Sandbox Code Playgroud)
这两种返回类型之间的主要区别是什么?据我所知,第一种类型作为前进动作返回,但如果我是对的,为什么它们也forward:/
作为返回类型发布?
第一个返回视图,而后一个重定向到另一个控制器请求映射操作.让我们从代码本身中解脱出来.
@RequestMapping(method = RequestMethod.POST)
public String add(@Valid AppointmentForm appointment, BindingResult result) {
if (result.hasErrors()) {
Run Code Online (Sandbox Code Playgroud)
此处,当结果有错误时,它会呈现视图,appointments/new
以便用户可以输入正确的详细信息并再次添加应用程序.URL不会在浏览器中更改
return "appointments/new";
}
appointmentBook.addAppointment(appointment);
Run Code Online (Sandbox Code Playgroud)
但是在这里,当结果没有错误时,此控制器操作会将网站重定向到URL /约会.检查更改为重定向URL的Web浏览器URL
return "redirect:/appointments";
}
Run Code Online (Sandbox Code Playgroud)
关于forward:
vsredirect:
引用此Satckoverflow回答为什么我们在Spring MVC中使用重定向
使用控制器中的重定向前缀将生成一个HTTP响应,其中包含302状态代码和指向重定向URL的位置标头.然后,浏览器将重定向到该URL(第一个请求中公开的模型将丢失,浏览器URL将是第二个).
使用前向前缀,转发将由servlet在内部完成,因此不需要第二个请求(URL将保持不变).前向前缀仅应用于浏览器可以安全重复的请求中.当您发送更改数据库状态的表单时,情况并非如此(重新加载浏览器将导致重复提交).在这些情况下,您应该使用重定向并应用POST-redirect-GET模式.
归档时间: |
|
查看次数: |
6322 次 |
最近记录: |