• SpringMVC:转发和重定向


     1. 请求转发和重定向简介

    参考该链接第9点

    2. forward

    返回下一个资源路径,请求转发固定格式:return "forward:资源路径"
     如 return "forward:/b" 此时为一次请求
    
    返回逻辑视图名称
    返回逻辑视图不指定方式时都会默认使用请求转发
    

    index.html 

    1. <body>
    2. <a th:href="@{/a}">A页面a> <br>
    3. <a th:href="@{/b}">B页面a> <br>
    4. <a th:href="@{/test}">testa>
    5. body>

    Controller层 

    1. @Controller
    2. public class IndexController {
    3. @RequestMapping(value = {"/"})
    4. public String toIndex() {
    5. return "index";
    6. }
    1. @RequestMapping("/a")
    2. public String toA() {
    3. return "forward:/b";
    4. }
    1. @RequestMapping("/b")
    2. public String toB() {
    3. return "b";
    4. }

    3. redirect

    返回要响应重定向的资源路径,响应重定向固定格式:return "redirect:资源路径"
    重定向如果要跨域要写全路径
     如:return "redirect:http:localhost:8080/springmvc/a/b/c" 此时让客户端重新发送请求请求
    
    1. @RequestMapping("/a")
    2. public String toA() {
    3. return "redirect:/b";
    4. }

    4. 简化配置

    1. <mvc:view-controller path="/test" view-name="test">mvc:view-controller>
    2. <mvc:annotation-driven>mvc:annotation-driven>
    
    

     5. 访问静态资源

    关于静态资源的访问:
        假设我们在webapp目录下创建static目录,下面存放img.png图片资源
        我们可以通过地址栏http://localhost:8080/springmvc/static/img.png进行访问么?
        答案是不行,因为会走DispatcherServlet,之后会从控制器中走相应方法最后通过逻辑视图寻找对应资源
        而此时在控制器中找不到对应逻辑视图,即资源不存在会报404错误
    

     方案一

    在springmvc.xml文件中配置
    
    
    即手动开启DefaultServlet
    当访问http://localhost:8080/springmvc/static/img.png会默认先走DispatcherServlet,
    当报404错误时会走DefaultServlet,然后DefaultServlet会帮你定位到静态资源
    DefaultServlet默认是关闭的,需要手动开启
    
    1. <mvc:view-controller path="/test" view-name="test">mvc:view-controller>
    2. <mvc:annotation-driven>mvc:annotation-driven>

    方案二

    使用 mvc:resources 标签配置静态资源
    
    
    即static路径下的任意资源都可以访问
    注意:要想使用 `` 配置,必须开启注解驱动 ``
    
    1. <mvc:default-servlet-handler>mvc:default-servlet-handler>
    2. <mvc:resources mapping="/static/**" location="/static/" />

    视图原理描述

    假设我们SpringMVC中使用了Thymeleaf作为视图。

    第一步:浏览器发送请求给web服务器

    第二步:Spring MVC中的DispatcherServlet接收到请求

    第三步:DispatcherServlet根据请求路径分发到对应的Controller

    第四步:DispatcherServlet调用Controller的方法

    第五步:Controller的方法处理业务并返回一个`逻辑视图名`给DispatcherServlet

    第六步:DispatcherServlet调用ThymeleafViewResolver的resolveViewName方法,将`逻辑视图名`转换为`物理视图名`,并创建ThymeleafView对象返回给DispatcherServlet

    第七步:DispatcherServlet再调用ThymeleafView的render方法,render方法将模板语言转换为HTML代码,响应给浏览器,完成最终的渲染。 

    常见视图

    * InternalResourceView:内部资源视图(Spring MVC框架内置的,专门为`JSP模板语法`准备的)
    * RedirectView:重定向视图(Spring MVC框架内置的,用来完成重定向效果)
    * ThymeleafView:Thymeleaf视图(第三方的,为`Thymeleaf模板语法`准备的)
    * FreeMarkerView:FreeMarker视图(第三方的,为`FreeMarker模板语法`准备的)
    * VelocityView:Velocity视图(第三方的,为`Velocity模板语法`准备的)
    * PDFView:PDF视图(第三方的,专门用来生成pdf文件视图)
    * ExcelView:Excel视图(第三方的,专门用来生成excel文件视图)
    * ...... 

  • 相关阅读:
    Google codelab WebGPU入门教程源码<6> - 使用计算着色器实现计算元胞自动机之生命游戏模拟过程(源码)
    如何签署exe或Windows应用程序?
    解决使用 Eruda 绑定 dom 未在指定位置显示问题
    视创云展「VR直播」是什么?有哪些功能和应用场景?
    1.3 Apache Hadoop的重要组成-hadoop-最全最完整的保姆级的java大数据学习资料
    ARM汇编器所支持的伪操作 - 信息报告伪操作
    报错注入常用函数
    次氯酸(HClO)荧光探针 激发波长567 nm
    【Leetcode刷题Python】191. 位1的个数
    python 爬取天气预报天气
  • 原文地址:https://blog.csdn.net/2301_79526467/article/details/139399112