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();
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值