Spring MVC(Next-2)

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中设置过滤器,过滤器需要放在上面

  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值