假设我们Spring MVC 中使用了 Thymeleaf 作为视图:
- 第一步:浏览器发送请求给 web 服务器
- 第二步:Spring MVC中的 DispatcherServlet 接收到请求
- 第三步:DispatcherServlet 根据请求路径分发到对应的 Controller
- 第四步:DispatcherServlet 调用 Controller 的方法
- 第五步:Controller 的方法处置惩罚业务并返回一个 逻辑视图名 给 DispatcherServlet
- 第六步:DispatcherServlet 调用 ThymeleafViewResovler 的 resolveViewName方法,将逻辑视图名 转换为 物理视图名 ,并创建 ThymeleafView 对象返回给 DispatcherServlet
- 第七步:DispatcherServlet 再调用 ThymeleafView 的 render 方法,render 方法将模板语言转换为 HTML代码,响应给浏览器,完成最终的渲染。
假设我们 Spring MVC 中使用了JSP作为视图:1.5 逻辑视图名到物理视图名的转换
- 第一步:浏览器发送请求给 web 服务器
- 第二步:Spring MVC 中的DispatcherServlet 接收到请求
- 第三步:DispatcherServlet 根据请求路径分发到对应的 Controller
- 第四步:DispatcherServlet 调用 Controller 的方法
- 第五步:Controller 的方法处置惩罚业务并返回一个 逻辑视图名 给 DispatcherServlet
- 第六步:DispatcherServlet 调用 InternalResourceViewResovler 的 resolverViewName 方法,将逻辑视图 转换为 物理视图名 ,并创建 InternalResourceView 对象返回给 DispathcerServlet 。
- 第七步:DispatcherServlet 再调用 InternalResourceView 的 render 方法,render 方法将模板语言转换为 HTML 代码,响应给浏览器,完成最终的渲染。
- 假设发送了 /a 请求,执行了 AServlet
- 在 AServlet 中通过 request.getRequestDispatcher("/b").forward(request,response); 转发到 BServlet
- 从AServlet 跳转到 BServlet 是服务器内部来控制的。对于浏览器而言,浏览器只发送了一个 /a 请求。
更多关于 Java Web 转发和重定向的内容,大家可以移步至:✏️✏️✏️ JavaWeb 中 “转发”与 “重定向”的区别_java 重定向与转发-CSDN博客
- 假设发送了 /a 请求,执行了 AServlet
- 在 AServlet 中通过 response.sendRedirect("/webapproot/b")
- 此时服务器会将请求路径 /webapproot/b 响应给浏览器
- 浏览器会自发的再次发送 webapproot/b 请求来访问 BServlet
- 因此对于重定向来说,发送了两次请求,一次是 /webapproot/a ,另一次是 webapproot/b 。
这说明转发底层创建的视图对象是:InternalResourceView
通过源码的跟踪得知:整个请求处置惩罚过程中,一共创建了两个视图对象 ?
- InternalResourceView
- ThymeleafView
这是因为 forward: 后面的不是 逻辑视图名 ,而是一个 请求路径 ,因此,转发是不必要视图剖析器的。5.2 在 Spring MVC 中使用 redirect 实现重定向
另外,转发使用的是 InternalResourceView ,也说明了转发是内部资源的跳转,(Internal 是内部的意思,Resource 是资源的意思。)
注意:从springmvc应用重定向到springmvc2应用(跨域),语法是:
通过断点调试可以看出,当重定向的时间,SpringMVC会创建一个重定向视图对象:RedirectView。这个视图对象也是SpringMVC框架内置的。
另外可以看出重定向之后的第二次请求创建的视图对象就是ThymeleafView了。
转发: return "forward:/b" 底层创建的是InternalResourceView对象6. mvc:view-controller 和 mvc:annotation-driven/ 的共同使用
重定向: return "redirect:/b" 底层创建的是 RedirectView对象
在SpringMVC中,如果在springmvc.xml文件中配置了 ,就必要同时在springmvc.xml文件中添加如下配置:< mvc:annotation-driven />
“在这个末了的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上汲取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的范畴奋斗。感谢你们,我们总会在某个时刻再次相遇。”
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |