day10 web开发技巧

在登录后,刷新主页,出现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";
}

视图解析源码流程

  1. 目标方法处理的过程中,所有数据都会被放在 ModelAndViewContainer 里面,包括数据和视图地址
  2. 方法的参数是一个自定义对象(从请求参数中确定的),把他重新放到 ModelAndViewContainer
  3. 任何目标方法执行完成后都会返回(数据和视图地址)
  4. 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)
视图解析
  • 返回值以 forward: 开始:

    new InternalResourceView(forwardUrl);  --> 转发
    request.getRequestDispatcher(path),forward(request,response);
    
  • 返回值以 redirect: 开始:

    new RedirectView();		--> render 就是重定向
    
  • 返回值是普通字符串:

    new ThymeleafView();
    
上一篇:day10-File类、递归、字节流


下一篇:day10