SpringMVC视图解析器

2023-10-27

SpringMVC视图解析器

SpringMVC中的视图解析器的主要作用就是将逻辑视图转换成用户可以看到的物理视图。

当用户对SpringMVC应用程序发起请求时,这些请求都会被SpringMVC的DispatcherServlet处理,通过处理器找到最为合适的HandlerMapping定义的请求映射中最为合适的映射,然后通过HandlerMapping找到相对应的Handler,然后再通过相对应的HandlerAdapter处理该Handler。返回结果是一个ModelAndView对象,当该ModelAndView对象中不包含真正的视图,而是一个逻辑视图路径的时候,ViewResolver就会把该逻辑视图路径解析为真正的View视图对象,然后通过View的渲染,将最终结果返回给用户。

SpringMVC中处理视图最终要的两个接口就是ViewResolver和View,ViewResolver的作用是将逻辑视图解析成物理视图,View的主要作用是调用其render()方法将物理视图进行渲染。

一般来说,对于SpringMVC控制器中的方法,无论是返回String、View或者是ModelAndView,SpringMVC在内部都会将返回结果封装成ModelAndView对象,然后返回给用户。

视图解析器需要配置在SpringMVC的配置文件中,如下:

<!-- 对转向页面的路径解析。prefix:前缀, suffix:后缀 --> 
  <bean id="viewResolver" 
    class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="prefix" value="/page"></property> 
    <property name="suffix" value=".jsp"></property> 
  </bean> 

SpringMVC视图解析器解析流程:

1、将SpringMVC控制器中的返回结果封装成一个ModelAndView对象。

2、通过SpringMVC中的视图解析器,使用ViewResolver对控制器返回的ModelAndView对象进行解析,将逻辑视图转换成物理视图。

3、调用View中的render()方法对物理视图进行渲染。

使用mvc:view-controller不经控制器直接跳转到页面

若希望直接响应通过SpringMVC渲染的页面,可以使用mvc:view-controller标签实现:

  <!-- 配置直接转发的页面 -->      
<!-- 可以直接相应转发的页面, 而无需再经过 Handler 的方法.  -->  
    <mvc:view-controller path="/success" view-name="success"/>  

  • 那么现在可以直接在某一页面中通过请求路径”success”访问到/WEB-INF/views/success.jsp页面(因为我们上面配置了视图解析器将逻辑视图解析为前缀为/WEB-INF/views/,后缀为.jsp的物理视图)。但是,这种情况下通过控制器就无法映射到请求了,需要再进行如下配置:
    •     <!-- 在实际开发中通常都需配置 mvc:annotation-driven 标签,  之前的页面才不会因为配置了直接转发页面而受到影响 -->  
          <mvc:annotation-driven></mvc:annotation-driven>

    关于重定向

一般情况下,控制器方法返回字符串类型的值会被当成逻辑视图名处理,但如果返回的字符串中带forward:或redirect:前缀时,SpringMVC会对它们进行特殊处理:将forward: 和redirect: 当成指示符,其后的字符串作为URL 来处理。示例如下:

index.jsp:

<a href="${pageContext.request.contextPath }/springmvc/testRedirect">Test Redirect</a>

controller:

@Controller
@RequestMapping("/springmvc")
public class SpringMVCTest {
 
    @RequestMapping("/testRedirect")
    public String testRedirect() {
        System.out.println("testRedirect");
        return "redirect:/index.jsp";
    }
}

即可重定向到index.jsp。也可在redirect:/后添加控制器方法的映射路径,重定向到该目标方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringMVC视图解析器 的相关文章

随机推荐

  • 【知识点】Java的值传递——为什么对象在函数里修改了,返回后未修改

    问题背景 今天做题 遇到一个代码判断题 结果一直做错 题目如下 public class Point private int x private int y public Point int x int y this x x this y
  • 轻松易懂,一文告诉你什么是http协议?

    阅读本文之前 请详细阅读以下几篇文章 一文包你学会网络数据抓包 教你如何抓取网络中的数据包 黑客必备技能 一 什么是http Http协议即超文本传送协议 HTTP Hypertext transfer protocol 它定义了浏览器 即
  • matlab 10为底指数,matlab指数函数

    手机评站网今天精心准备的是 matlab指数函数 下面是详解 用matlab求指数函数 刚学这课不会经建模得y与t的关系为y a b exp c t 试确定a b c已知x 0 0 1 1 y 2 997 2 480 2 101 1 815
  • Android实现沉浸式状态栏实现在项目中的使用

    不得不说 Android实现沉浸式状态栏确实是一个不深不浅的坑 懂门路的人几分钟就能解决掉 不懂门路的人 网上找资料查资源估计也要个一两天 当然了 我也是苦于其中 不过到最后还是找出来了 ImmersionBar 一个star数超过5K的三
  • java实现xml文件读取和写入

    import java io File import java io FileInputStream import java io FileOutputStream import java io InputStream import jav
  • java中为什么MAX_ARRAY_SIZE的值为Integer.MAX_VALUE - 8

    数组对象的形状和结构 如int值数组 与标准Java对象类似 主要区别在于数组对象有一个额外的元数据 用于表示数组的大小 数组的最大尺寸为2 31 2147483648 但是需要8bytes的存储大小表示数组的长度等元数据 所以数组的大小定
  • dva 打包多个html,使用dva+umi+antd构建页面(一)

    使用dva umi antd构建页面 首先确保安装npm或者yarnhtml 建立新应用 首先建立应用目录node mkdir myapp cd myapp 推荐使用 yarn 建立应用 执行如下命令 react 若是你坚持用 npm 可执
  • HJ77火车进站

    思路 重复的子问题 每一次车进站可以选择 出 还是 不出 解决重复子问题 动规 or 深搜 此题 输出具体 方案 显然动规不符合 因此选择深搜 注意 除了维护数组 还需要维护一个栈结构 代码 include
  • 基于xxx的系统实现

    2 基于强化学习的Tic Tac To实现 3 基于文本的关键词打标 4 基于自然语言处理的情感分析系统 5 基于深度学习的语音识别系统 6 基于深度学习的人脸识别系统 7 随机森林的多分类问题研究 8 回归算法预测系统 9 决策树算法的分
  • 数据通信加密与防篡改及数字证书原理详解

    1 安全五要素 一般而言 同时满足了机密性 信息不被泄露或泄露后对别人来说并没实际价值 完整性 信息不被非法篡改或被篡改后可以检测到 和身份验证 和自己通信的人确实就是我认为和我正在通信的人 就可以认为是安全通信了 安全通信需要满足如下五点
  • QT中通过网络发送QImage的解决方案

    服务端 QImage img img load path QByteArray ba QDataStream ds ba QIODevice WriteOnly 将图片读入array 方便发送 ds lt
  • 二进制文件如何使用Notepad读取显示

    1 下载安装notepad 2 打开notepad 点击插件 plugins gt 插件管理 3 安装hex editor 滑动滚动条 找到hex editor 点击右上角安装 注 安装完后需要重启notepad 4 选择二进制文件后 右击
  • Linux线程互斥与同步

    目录 进程线程间的互斥相关背景概念 互斥和原子性 互斥量mutex 互斥量实现原理探究 锁是否需要被保护 如何保证申请锁的过程是原子的 可重入VS线程安全 Linux线程同步 条件变量 销毁条件变量 唤醒等待 进程线程间的互斥相关背景概念
  • 什么是抽象类

    抽象概念 当我们在做子类共性功能抽取时 有些方法在父类中并没有具体的体现 这个时候就需要抽象类了 在Java中 一个没有方法体的方法应该定义为抽象方法 而类中如果有抽象方法 该类必须定义为抽象类 抽象方法 没有方法体的方法 抽象类 包含抽象
  • Unity层级

    层级 层级是Unity中场景物体的一种属性 摄像机可以指明渲染层级以渲染场景中的部分物体 灯光可以指明照射层级以照亮部分物体 可以指定照亮某些层级的物体以显示阴影 层级还能用于设置物理碰撞关系 层级顺序 Unity中的渲染顺序自上而下大致分
  • 关于 Math.random()生成指定范围内的随机数的公式推导

    优质资源分享 学习路线指引 点击解锁 知识定位 人群定位 Python实战微信订餐小程序 进阶级 本课程是python flask 微信小程序的完美结合 从项目搭建到腾讯云部署上线 打造一个全栈订餐系统 Python量化交易实战 入门级 手
  • 用VS2015编译QGIS3.16.9源码

    TOC VS2015编译QGIS3 16 9源码 编译QGIS源码 由于编译QGIS时涉及依赖的开源库很多 过程比较麻烦 特在此记录编译的完整过程 以方便同道中人参考 同时也方便本人以后编译忘记步骤时回头看看 接下来就开干 一 VS2015
  • c语言输出txt文件不对齐,用fprintf函数打印同样的内容,样子不同。百度无解,望大佬帮忙...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 这是我的全部代码 功能是实现随机生成20个20以内的不重复的加减法 如果大佬们对我的代码思路和代码风格有什么建议 也希望能不吝赐教 include include include define
  • CSDN高校俱乐部2012年秋季巡讲安排及讲师介绍

    CSDN高校俱乐部2012年秋季巡讲行程在各位讲师 主席和指导教师的给力支持下已初步出炉 部分学校仍需要确认时间安排 大多数学校已确定巡讲时间 时间表列在下方 讲师介绍在最后 阵容强大值得期待 学校名单及安排 场序 地区 城市 分组 学校
  • SpringMVC视图解析器

    SpringMVC视图解析器 SpringMVC中的视图解析器的主要作用就是将逻辑视图转换成用户可以看到的物理视图 当用户对SpringMVC应用程序发起请求时 这些请求都会被SpringMVC的DispatcherServlet处理 通过