Spring MVC(Next-2)

news2025/2/21 17:10:56

1.视图解析器

 1.视图解析器和视图

        ModelAndview: 模型数据 (存储业务数据) 和视图
        Model: 模型数据(存储模型层中查询到的数据)
        View:视图(页面属于视图中的一种)
控制单元执行完成后,无论什么类型返回值,都会封装为ModelAndview。

Model中存储了业务数据,view通常存储视图名。最终目的:将Model 中的业务数据使用视图进行渲染到客户端

底层源码:

ModelAndview mv;
mv = ha.handle(processedRequest, response, mappedHandler.getHandler()):

 执行控制单元,控制单元返回结果封装为ModelAndview。

控制单元返回的结果固定被封装为ModelAndview。

视图解析器: ViewResolver (接口),解析不同的视图,使用不同的实现类视图解析器,解析控制单元返回的ModelAndview,经过解析返回具体的view对象。

以.jsp视图为例:
        1.控制单元执行后,经过springmvc的封装,返回ModelAndview(viewname为index.jsp)

        2.获取到ModelAndView后,执行render(mv,request,response);

        3.在render万法中调用了view = resolveViewName(viewName, mv.getModelInternal(), locale, request):

        4.在resolveviewName方法中, 视图解析器 根据视图名找到对应的视图对象- 默认的使用的视图解析器: InternalResourceViewResourceView
.jsp使用的视图对象: InternalResourceView

        5.返回视图对象后,调用view.render(mv.getModelInternal(),reguest,response);(使用视图对象完成客户端响应结果的渲染)实际完成Mode1中的数据通过视图响应回到客户端
jsp的InternalResourceView的视图对象渲染时:
                1.将Mode1中的数据存储大请求域对象中
                2.将请求转发到.jsp -> java (获取请求去对象中的数据) -> .class -> 将结果输出到客户端

2.控制单元的方法参数(接受请求参数)

1. 控制单元方法参数写法

控制单元方法参数一共有两种写法:

(1)紧耦方式。获取原生Servlet API,通过原生Servlet API获取请求参数、设置响应内容、设置作用域的值。

(2)解耦方式。使用Spring MVC提供的方式获取请求参数、设置响应内容、设置作用域的值。

2. 解耦方式

解耦方式是Spring MVC独有方式。是Spring MVC给开发者提供的:

(1)获取请求中内容

(2)设置作用域值

(3)设置响应内容

等写法。今天主要看解耦方式下如何获取请求参数和如何设置作用域的值。


3.1 获取请求中内容

请求参数根据参数的类型分为多种写法。

(1)普通表单参数

(2)多个同名参数

(3)日期类型数据

(4)请求头数据

(5)请求体数据


3.1.1 获取普通表单参数

获取普通表单参数,只需要包含在控制单元中提供与请求参数同名的方法参数即可。

Spring MVC会自动进行类型转换

 建议使用封装类型,请求数据中没有携带该参数时,自动赋值为null,基本数据类型会报错。

3.1.2 @RequestParam 注解

当请求参数名和控制单元参数名不一致时可使用该注解

 

3.1.3 使用JavaBean作为参数(使用类对象作为控制单元参数)

3.1.5 接收多个同名表单参数

在提交表单数据时,可能在里面包含复选框。当选中多个复选框时会出现多个同名参数。在Spring MVC中可以使用数组和List接收多个同名参数。

如果是JavaBean中的属性为list集合接受多个同名属性,不需要进行额外处理。

3.1.6 接收日期类型参数

第一种用在参数前面

第二种用在实体类的属性前面

3.2 设置作用域的值

以后可以把查询到的值和集合存在作用域中,然后jsp 就可以利用EL表达式拿到数据并用JSTL操作数据渲染到页面

 

3.Spring MVC中文乱码问题

1. GET方式中文乱码解决

本机的tomcat自动设置了get请求的乱码问题,插件中的问题需要我们自己解决

2. POST方式中文乱码解决

在web.xml中设置过滤器,过滤器需要放在上面

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C/C++指针变量详解

1、指针变量的基本操作基本操作 int a,*iptr,*jptr,*kptr; iptr &a; jptr iptr; *jptr 100; kptr NULL;图解: 1.1 己址和己空间 指针变量也是一个变量,对应一块内存空间,对应一个内存地址,指针名就是己…

OceanBase:03-集群部署

目录 一、集群规划 二、配置要求 三、部署前配置 1.配置 limits.conf 2.配置 sysctl.conf 3.关闭防火墙 4.关闭 SELinux 5.创建数据目录,修改文件所有者信息 6.设置无密码 SSH 登录 7.安装jdk 四、解压执行安装 五、集群部署 1.OBD命令行部署 2. OBD白…

实用篇-Docker容器

一、初识Docker docker 是一个开源的应用容器引擎,一个容器可以理解成一个轻量级的虚拟机,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。…

python科研绘图:条形图

条形图(bar chart)是一种以条形或柱状排列数据的图形表示形式,可以显示各项目之间的比较。它通常用于展示不同类别的数据,例如在分类问题中的不同类别、不同产品或不同年份的销售数据等。 条形图中的每个条形代表一个类别或一个数…

基于goframe2.5.4、vue3、tdesign-vue-next开发的全栈前后端分离的管理系统

goframe-admin goframe-admin V1.0.0 平台简介 基于goframe2.5.4、vue3、tdesign-vue-next开发的全栈前后端分离的管理系统。前端采用tdesign-vue-next-starter 、vue3、pinia、tdesign-vue-next。 特征 高生产率:几分钟即可搭建一个后台管理系统认证机制&#x…

TypeError: Cannot read property ‘setRules‘ of undefined“

1.uniapp 执行小程序表单校验时报错 使用如果使用v-if,则使用v-show替换v-if ,即可解决问题

使用脚本整合指定文件/文件夹,执行定制化 ESLint 命令

背景 最近面对一个庞大的项目,但是只需要修改某个模块,每次都手搓命令太麻烦了,于是就想着能不能写个脚本来辅助处理这些事情。 解决方案 定制化一键 ESLint,执行文件下载地址: https://github.com/mazeyqian/go-g…

SpringCloud-Alibaba-Nacos2.0.4

SpringCloud-Alibaba-Nacos2.0.4 SpringCloud Alibaba版本选择(截止到2023年3月12日) Spring Cloud Alibaba VersionSpring Cloud VersionSpring Boot Version2021.0.4.0*Spring Cloud 2021.0.42.6.11 SpringCloud Alibaba-2021.0.4.0组件版本关系 S…

diffusers-Load pipelines,models,and schedulers

https://huggingface.co/docs/diffusers/using-diffusers/loadinghttps://huggingface.co/docs/diffusers/using-diffusers/loading 有一种简便的方法用于推理是至关重要的。扩散系统通常由多个组件组成,如parameterized model、tokenizers和schedulers&#xff0c…

【深度学习基础】从R-CNN到Fast R-CNN,再到MaskR-CNN,发展历程讲清楚!

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…

08-Docker-网络管理

Docker 在网络管理这块提供了多种的网络选择方式,他们分别是桥接网络、主机网络、覆盖网络、MACLAN 网络、无桥接网络、自定义网络。 1-无桥接网络(None Network) 当使用无桥接网络时,容器不会分配 IP 地址,也不会连…

【C++】set和multiset

文章目录 关联式容器键值对一、set介绍二、set的使用multiset 关联式容器 STL中的部分容器,比如:vector、list、deque、forward_list(C11)等,这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面存储的是元…

基于nodejs+vue高校实验室预约管理系统

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…

Android原生分享与指定app分享

什么是 Android 系统的原生分享呢,如下图所示 创建一个 Intent ,指定其 Action 为 Intent.ACTION_SEND,这表示要创建一个发送指定内容的行动。 Intent sendIntent new Intent(); sendIntent.setAction(Intent.ACTION_SEND); 指定需要发送的…

量化交易Copula建模应对市场低迷

一、简介 传统上,我们依靠相关矩阵来理解资产间的动态。然而,正如过去的市场崩盘所表明的那样,当风暴袭来时,许多模型都会陷入混乱。突然之间,相关性似乎趋于一致,而多样化这一经常被吹捧的风险管理口号似乎并没有提供什么庇护。 这种出乎意料的同步,即资产在经济低迷时…

C++ Qt 学习(二):常用控件使用与界面布局

1. Qt 布局详解 ui 设计器设计界面很方便,为什么还要手写代码? 更好的控制布局更好的设置 qss代码复用 完全不会写 Qt 布局,很麻烦,怎么学会手写布局? 看 Qt 自己怎么写改良 Qt 的布局写法 1.1 水平布局 #include …

Android Studio的笔记--SerialPort串口通讯学习和使用

SerialPort串口通讯学习和使用 SerialPortandroid-serialport-api源码下载 Android-SerialPort-API源码下载readme版本 Android-SerialPort-Tool源码下载 Android-Serialport源码下载使用方法readme android中使用串口通信使用android-serialport-api方式第1种 链接第2种 导入S…

4.6 内部类

思维导图: 4.6 内部类 在Java中,可以在一个类的内部定义另一个类,这种结构的类被称作内部类,而包含它的类被称为外部类。根据内部类的位置、修饰符和定义方式,内部类可以分为以下四种: 成员内部类局部内…

Labview2018安装教程(超级详细)

网盘资源见文末 一 .简介 LabVIEW 2017是National Instruments(NI)开发的一款图形化编程环境。LabVIEW是一种流程导向的编程语言,它使用图形符号表示程序的逻辑和数据流,并且以数据流的方式执行程序,使得用户可以通过…

解决pycharm中,远程服务器上文件找不到的问题

一、问题描述 pycharm中,当我们连接到远程服务器上时。编译器中出现报错问题: cant open file /tmp/OV2IRamaar/test.py: [Errno 2] No such file or directory 第二节是原理解释,第三节是解决方法。 二、原理解释 实际上这是由于我们没有设置…