在登录后,刷新主页,出现form表单重复提交问题
在验证登陆后,重定向请求到 返回主页请求
@PostMapping("/login")
public String main(String username,String password){
//验证
// 登录成功重定向到 main,重定向防止表单重复提交
return "redirect:/main";
}
@GetMapping("/main")
public String main(String username,String password){
//验证
// 返回主页
return "main";
}
视图解析源码流程
- 目标方法处理的过程中,所有数据都会被放在
ModelAndViewContainer
里面,包括数据和视图地址 - 方法的参数是一个自定义对象(从请求参数中确定的),把他重新放到
ModelAndViewContainer
- 任何目标方法执行完成后都会返回(数据和视图地址)
-
processDispatchResult
处理派发结果(页面该如何响应)- render(
mv
, request, response); 进行页面渲染逻辑- 根据方法的 String 返回值得到 View 对象【定义了页面的渲染逻辑】
- 1.所有的视图解析器尝试能否根据当前返回值得到 View 对象
- 2.得到 redirect:/main.html --> Thymeleaf new RedirectView()
- 3.
ContentNegotiationViewResolver
里面包含了下面所有的视图解析器,内部还是利用下面所有视图解析器得到视图对象 - 4.
view.render(mv.getModelInternal(), request,response)
视图对象调用自定义的 render 进行页面渲染工作。- RedirectView 如何渲染【重定向到一个页面】
- 1.获取目标 url 地址
- 2.
response.sendRedirect(encodedURL)
- 根据方法的 String 返回值得到 View 对象【定义了页面的渲染逻辑】
- render(
视图解析
-
返回值以 forward: 开始:
new InternalResourceView(forwardUrl); --> 转发 request.getRequestDispatcher(path),forward(request,response);
-
返回值以 redirect: 开始:
new RedirectView(); --> render 就是重定向
-
返回值是普通字符串:
new ThymeleafView();