《Spring MVC》 第四章 域对象、视图、转发和重定向

前言

介绍Spring MVC的域对象、视图、转发和重定向

1、域对象共享数据

Spring MVC 提供了多种域对象共享数据的方式,其中最常用的方式如下:

1.1、使用 Servlet API 向 request 域对象中共享数据

服务端代码:

@RequestMapping("toLogin")
public String toLogin(HttpServletRequest request){
    request.setAttribute("welcome","hello tiger!");
    return "login";
}

前端代码:

<h1 th:text="${welcome}"></h1>

1.2、使用 ModelAndView 向 request 域对象中共享数据

服务端代码:

@RequestMapping("toLogin")
public ModelAndView toLogin(){
    ModelAndView modelAndView = new ModelAndView();
    modelAndView.addObject("welcome","hello tiger!");
    modelAndView.setViewName("login");
    return modelAndView;
}

前端代码:

<h1 th:text="${welcome}"></h1>

1.3、使用 Model 向 request 域对象中共享数据

@RequestMapping("toLogin")
public String toLogin(Model model){
    model.addAttribute("welcome","hello tiger!");
    return "login";
}

1.4、使用 Map 向 request 域对象中共享数据

@RequestMapping("toLogin")
public String toLogin(Map<String,Object> map){
    map.put("welcome","hello tiger!");
    return "login";
}

1.5、使用 ModelMap 向 request 域对象中共享数据

@RequestMapping("toLogin")
public String toLogin(ModelMap modelMap){
    modelMap.addAttribute("welcome","hello tiger!");
    return "login";
}

1.6、使用 Servlet API 向 session 域中共享数据

@RequestMapping("toLogin")
public String toLogin(HttpSession session){
    session.setAttribute("welcome","hello tiger!");
    return "login";
}
<h1 th:text="${session.welcome}"></h1>

1.7、使用 Servlet API 向 application 域中共享数据

@RequestMapping("toLogin")
public String toLogin(HttpSession session){
    ServletContext application = session.getServletContext();
    application.setAttribute("welcome","hello tiger!");
    return "login";
}
<h1 th:text="${application.welcome}"></h1>

1.8、thymeleaf集合遍历

<tr th:each="e:${userList}">
<td th:text="${e.userName}"/>
<td th:text="${e.gender}"/>
</tr>

2、视图

在 Spring MVC 中,视图扮演着十分重要的角色,它主要负责整合 Web 资源、对模型数据进行渲染,并最终将 Model 中的数据以特定的形式展示给用户。

实现类说明
ThymeleafViewThymeleaf 视图。当项目中使用的视图技术为 Thymeleaf 时,就需要使用该视图类。
InternalResourceView转发视图,通过它可以实现请求的转发跳转。与此同时,它也是 JSP 视图。RedirectView重定向视图,通过它可以实现请求的重定向跳转。
FreeMarkerViewFreeMarker 视图.
MappingJackson2JsonViewJSON 视图。
AbstractPdfViewPDF 视图 。

视图划分为两大类:逻辑视图和非逻辑视图

2.1、逻辑视图

逻辑视图最大的特点就是,其控制器方法返回的 ModelAndView 中的 view 可以不是一个真正的视图对象,而是一个字符串类型的逻辑视图名

  • 直接在控制器方法中返回字符串类型的逻辑视图名
  • 在控制器方法中通过 ModelAndView 提供的 setViewName() 方法设置逻辑视图名

2.2、非逻辑视图

非逻辑视图,则与逻辑视图完全相反,其控制方法返回的是一个真正的视图对象

@RequestMapping("toLogin")
public ModelAndView toLogin(HttpSession session){
    ModelAndView modelAndView = new ModelAndView();
    UserInfo userInfo = new UserInfo();
    userInfo.setUserName("tiger");
    userInfo.setGender("man");
    modelAndView.addObject(userInfo);
    modelAndView.setView(new MappingJackson2JsonView());
    return modelAndView;
}

导入以下json解析关联的包
在这里插入图片描述

3、转发和重定向

3.1、转发

return "forward:/login"
modelAndView.setViewName("forward:/login");

3.2、重定向

return "redirect:/login"
modelAndView.setViewName("redirect:/login");

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/13797.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

为什么企业都需要搭建搭建一个内部知识库?

企业内部知识管理是指企业通过各种手段收集、整理、管理和传播企业内部的知识&#xff0c;以提高企业的竞争力和创新能力。在实践中&#xff0c;企业内部知识管理往往需要建立一个内部知识库&#xff0c;以更好地实现知识的共享和管理。本文将从以下几个方面探讨为什么企业内部…

【SWAT水文模型】ArcSWAT输入准备

ArcSWAT输入准备 1 必需的ArcSWAT空间数据集1.1 数字高程模型&#xff08;DEM&#xff09;1.2 土地覆盖/土地利用类型1.3 土壤数据 2 可选的ArcSWAT空间数据集2.1 DEM Mask2.2 Streams2.3 User- Defined Watersheds 3 ArcSWAT表格和文本文件3.1 子流域出口位置表(dBase 表)3.2 …

掏空腰包,日子难过,机缘转岗软件测试,这100个日夜的心酸只有自己知道...

我今年27岁&#xff0c;原本从事着土木工程相关的工作&#xff0c;19年开始有了转行的想法... 大学刚毕业那年&#xff0c;我由于学的是土木工程专业&#xff0c;自然而然的从事了和土木工程相关的工作&#xff0c;房贷、车贷&#xff0c;在经济的高压下&#xff0c;当代社会许…

Idea 配置 maven 离线使用

首先&#xff0c;项目中的依赖已经下载到本地仓库&#xff0c;在没有网络或者没办法连通公司的maven仓库时&#xff0c;需要配置离线使用。 1. 配置 setting.xml 在 maven 使用的 setting.xml 文件中&#xff0c;加入以下配置。 默认在 maven安装目录下的 conf 文件夹下 。 &…

没看错!一行python代码就可以帮您获取图片中的文字信息

最近工作中有需求需要用python对图片中的文字进行识别&#xff0c;调研了一下&#xff0c;选择了tesseract&#xff0c; 目前在github上有50.5k个star&#xff01;python可以调用&#xff0c;安装也十分方便&#xff0c;pip install pytesseract 即可。如果没有Pillow 包&…

关于yolov8的一些理解

文章目录 1.前言2.创新点及工作3. 网络结构3.1 BackBone3.1.1 C2F3.1.2 结构微调3.1.2 SPPF 3.2 Neck3.3 Head 4.正样本匹配策略4.1 静态分配策略&动态分配策略4.2 TaskAlignedAssigner 5.损失函数5.1 概述5.2 Distribution Focal Loss 6.总结 1.前言 YOLOv8 是 ultralyti…

vCener 配置 vSan 网络

文章目录 1. 准备2. 创建vsan网络2.1 创建 vSphere Distributed Switch &#xff08;vds&#xff09;2.2 添加管理主机2.3 添加 networking 3. 删除3.1 删除 vmkernel adapter3.2 删除 hosts3.3 删除 DSwitch 1. 准备 三台物理机搭建 exsi一台部署 vcenter 管理三台 exsi每台物…

如何计算连续变量的熵

背景 做特征选择时&#xff0c;有时候会用到计算特征的信息熵&#xff0c;可是离散的好计算&#xff0c;但连续的呢&#xff1f;按照把连续变量离散的方法设置阈值点吗&#xff1f;好像比较麻烦&#xff0c;需要排序&#xff0c; 计算阈值。没有能自动的方法吗&#xff1f; 找…

Linux入门 - 最常用基础指令汇总

目录 ls指令 pwd指令 cd指令 touch指令 mkdir指令 rmdir指令 && rm 指令 man指令&#xff08;重要&#xff09; cp指令&#xff08;重要&#xff09; mv指令&#xff08;重要&#xff09; cat指令 more指令 less指令&#xff08;重要&#xff09; head指令…

3.4 迭代法

4.1 雅克比迭代法&#xff1a; 雅可比迭代法是一种用于求解线性方程组的迭代算法&#xff0c;其基本思想是将线性方程组中的系数矩阵拆分为对角线矩阵和非对角线矩阵两部分&#xff0c;并利用对角线矩阵的逆矩阵来迭代求解方程组。 具体地&#xff0c;设线性方程组为Axb&…

4月17号软件资讯更新合集.....

CrateDB 5.3.0 发布&#xff0c;分布式 SQL 数据库 CrateDB 是一个分布式的 SQL 数据库&#xff0c;使得实时存储和分析大量的机器数据变得简单。CrateDB 提供了通常与 NoSQL 数据库相关的可扩展性和灵活性&#xff0c;最小的 CrateDB 集群可以轻松地每秒摄取数万条记录。这些…

L2-2 天梯赛的赛场安排

作者 陈越 单位 浙江大学 天梯赛使用 OMS 监考系统&#xff0c;需要将参赛队员安排到系统中的虚拟赛场里&#xff0c;并为每个赛场分配一位监考老师。每位监考老师需要联系自己赛场内队员对应的教练们&#xff0c;以便发放比赛账号。为了尽可能减少教练和监考的沟通负担&#…

持续集成——接口测试集成实战

文章目录 一、接口测试持续集成的好处二、环境准备三、Jenkins节点挂载1、新建node节点2、编辑节点信息 四、节点环境的配置1、Python3环境2、allure-commandline工具3、allure插件 五、本地运行待测代码1、Pycharm拉取代码执行2、命令行运行代码&#xff0c;并生成报告 六、库…

太阳能电池测试解决方案NS-9001

前言 太阳能行业的快速发展提高了对太阳能电池测试和精确测量解决方案要求&#xff0c;伴随着太阳能电池尺寸大小质量的提升&#xff0c;充电电池测试必须更多的电流和更高输出功率水准&#xff0c;这就更加需要灵活多变的测试方案支持。 现阶段&#xff0c;太阳能电池测试 解…

可以一学的代码优化小技巧:减少if-else冗余

前言 if-else 语句对于程序员来说&#xff0c;是非常非常熟悉的一个判断语句&#xff0c;我们在日常开发和学习中都经常看见它&#xff0c;if-else语句主要用于需要做出选择的地方进行判断&#xff0c;这里就不再赘述if-else语法和特点了。 ​ 我们在写代码&#xff08;如图下…

Vue3通透教程【十】跨级组件通讯—依赖注入

文章目录 &#x1f31f; 写在前面&#x1f31f; provide函数&#x1f31f; inject 函数&#x1f31f; 跨组件通讯&#x1f31f; 写在最后 &#x1f31f; 写在前面 专栏介绍&#xff1a; 凉哥作为 Vue 的忠实 粉丝输出过大量的 Vue 文章&#xff0c;应粉丝要求开始更新 Vue3 的…

震惊!为了4680锂电池溯源,竟然做出这种事情

电池溯源&#xff0c;一直都是国家尤为重视的话题。 中国电子技术标准化研究院更是一再强调了&#xff1a;锂电编码标准编制和溯源平台初步建设方案。参会代表围绕锂电编码溯源体系建设有关问题开展了研讨&#xff0c;表示依托行业通用编码标准&#xff0c;建立完善的锂电全生…

C++面向对象丨1. 内存分区模型

Author&#xff1a;AXYZdong 硕士在读 工科男 有一点思考&#xff0c;有一点想法&#xff0c;有一点理性&#xff01; 定个小小目标&#xff0c;努力成为习惯&#xff01;在最美的年华遇见更好的自己&#xff01; CSDNAXYZdong&#xff0c;CSDN首发&#xff0c;AXYZdong原创 唯…

[计算机图形学]光线追踪的基本原理(前瞻预习/复习回顾)

一、光栅化的弊端 我们为什么要用光线追踪呢&#xff0c;在之前的篇章中&#xff0c;我们提到了&#xff0c;光栅化的方式很难表示一些全局的效果&#xff0c;如(1)软阴影&#xff0c;(2)Glossy的反射(类似镜子但又不像镜子那么光滑的材质&#xff0c;如打磨的铜镜和一些金属)&…