11-22 SSM整合1

请求参数

(这里的形参数据都是SpringMvc注入的)

controller里的方法不是我们来调用的 是由SpringMvc的前端控制器所调用的(前端控制器调用了处理器 由处理器和适配器去调用我们controller里的方法),controller里的方法叫handler->处理器

SpringMVC的Controller方法形参数据类型:
Controller方法(处理器)是SpringMVc调用,形参的值由SpringMVC注入(传递参数)

 javaWeb核心的api接口对象

  • HttpServletRequest请求对象
  • HttpServletResponse 响应对象
  • HttpSession session对象
  • Model/ModelMap Model是一个接口,ModelMap是一个接口实现。作用:将model数据填充到request域。
  • ps:如果只是往域中存数据推荐用model/modelmap

11-22 SSM整合1_第1张图片

11-22 SSM整合1_第2张图片

kv键值对是我们的请求参数  之前写的通过?传值 表单传值都是kv键值对

而现在在springmvc里面使用conventer组件把数据绑定到我们的方法形参实现数据的传输

如果只是往request添加数据,推荐使用Model,而不直接注入Request对象,与JavaWeb解耦

 如果调用request对象其他方法,只能注入Request对象

TestController.java

1.参数注入

方法返回一个逻辑视图名

@controller:交给spring管理

@RequestMapping:加上前缀  然后这个方法呢可以注入javaWeb的核心api对象

11-22 SSM整合1_第3张图片

11-22 SSM整合1_第4张图片

11-22 SSM整合1_第5张图片

11-22 SSM整合1_第6张图片

11-22 SSM整合1_第7张图片

以后写SpringMvc写javaWeb的东西东西时注入就行了

11-22 SSM整合1_第8张图片

只有不转发之后才能展示

11-22 SSM整合1_第9张图片

(写这个的用处:后期写的是java对象 用通过这种方式写数据)

请求参数 客户端请求参数时基于key/value对的方式 

当然了客户端请求参数:还可通过以json形式的方式

如果是key-value :我们只要在自己的方法形参定义参数来接收这个请求参数就可以了

11-22 SSM整合1_第10张图片

前端传过来的时字符串类型 跨平台数据传输都是字符串格式的

字符串

但是对于这种数据我们需要一种协议、格式  来对我们我们的参数的值进行一个说明

参数的类型

1.简单数据类型 保证类型 int String 日期

2.自定义类类型 

3.集合类型

4.数据类型

简单数据类型

要求形参参数名与请求参数名一样(不一样会映射失败)

kv键值对用?传值

11-22 SSM整合1_第11张图片

写一个controller我来接受这些传过来的参数

记得上面说的- >我们只要在自己的方法形参定义参数来接收这个请求参数就可以了

但是要求:要求形参参数名与请求参数名一样 spring可以进行数据类型转换

11-22 SSM整合1_第12张图片

11-22 SSM整合1_第13张图片

11-22 SSM整合1_第14张图片

这是效果:而且他还会把String数据类型的id转换成int类型

特殊问题:如果是日期呢?

11-22 SSM整合1_第15张图片

11-22 SSM整合1_第16张图片

405:你发送的请求时post请求 但是我只能处理get请求

404:文资源找不到

400:参数有问题 错误的请求

原因:他无法解析日期 导致不能进行类型转换

如果前端传递时一个日期字符串, Controller方法使用日期类型接收,默认转换失败,报400错误

11-22 SSM整合1_第17张图片

对日期类型,需要自定义转换器:

  1. 全局的日期转换器类,编写一个转换器类,在springMVC的配置文件进行配置
  2. 使用SpringMVC提供的日期转换注解,局部

方法一:全局的日期转换器类,编写一个转换器类,在springMVC的配置文件进行配置

1.实现接口

11-22 SSM整合1_第18张图片

11-22 SSM整合1_第19张图片

11-22 SSM整合1_第20张图片

这个实现类交给spring管理 @Componnet

11-22 SSM整合1_第21张图片

扫描这个包:

注册到注解驱动上

转换服务工厂bean  -> 

beans不用加扫描配置了  以及不用@Componnet了

添加一个bean

配置一个转换服务的工厂beanConversionServiceFactoryBean 需要在我们项目中导入这个依赖

这个类在spring-context-support

11-22 SSM整合1_第22张图片

11-22 SSM整合1_第23张图片

11-22 SSM整合1_第24张图片

外部bean配置

11-22 SSM整合1_第25张图片

11-22 SSM整合1_第26张图片

内部bean配置

11-22 SSM整合1_第27张图片

使用条件:只在外部bean内部使用或者需要其他地方使用

转换器此时已经注入到我们的转工厂服务bean 但是最终转换器是SpringMVC的前端控制器

它在请求参数传过来时,调用自己的conventer 把字符串转换为日期类型

下一步就是在SpringMVC的注解驱动上注册转换器服务 ConversionServiceFactoryBean

11-22 SSM整合1_第28张图片

 优点:整登项目只需要配置一次,整个项目的所有日期类型都可以通过该转换器

缺点:配置繁琐

方法二:使用SpringMVC提供的日期转换注解,局部

去掉

11-22 SSM整合1_第29张图片

11-22 SSM整合1_第30张图片

把请求参数的日期字符串转换为Date类型

自定义类类型   pojo

登录页面:login.jsp

11-22 SSM整合1_第31张图片

java写一个User对象 而你前端表单提交的数据可以映射到我这个User对象对应的属性上去

SpringMVC帮助你创建对象

之前方法形参名要与前端的请求参数名一样,如果不一样会返回null 映射不成功 现在我要求不一样

11-22 SSM整合1_第32张图片

如果请求参数名与形参名不一样 默认会映射失败 使用注解进行手动映射 @RequestParam 而且这个注释还必要要传值来进行映射 不然会报错(不同于之前的)

@RequestParam注解的属性

  • name/value;请求参数名
  • required:是否必须有这个参数,默认值: true,如果没有这个参数,报错,如果false,如果没有参数,不报错,参数值: null
  • defaultValue:默认值

11-22 SSM整合1_第33张图片

11-22 SSM整合1_第34张图片

11-22 SSM整合1_第35张图片

11-22 SSM整合1_第36张图片

id不能重复 for的作用是关联id 

11-22 SSM整合1_第37张图片

表单里的数据,我不能一个一个的去接收  就会很麻烦

springmvc提供了对象类型->类类型

11-22 SSM整合1_第38张图片

11-22 SSM整合1_第39张图片

11-22 SSM整合1_第40张图片

11-22 SSM整合1_第41张图片

11-22 SSM整合1_第42张图片

此时SpringMVC会自动的把请求参数名映射到对应的属性名上去了,要求请求参数名与属性名一样就行了

11-22 SSM整合1_第43张图片

改一下css样式:

11-22 SSM整合1_第44张图片

11-22 SSM整合1_第45张图片

注册不能时get请求 密码啥的都暴露了 用post

11-22 SSM整合1_第46张图片

集合类型

多个User对象

inti()方法报错:没有构造方法

11-22 SSM整合1_第47张图片

11-22 SSM整合1_第48张图片

11-22 SSM整合1_第49张图片

11-22 SSM整合1_第50张图片

mybatis当中含有的包装类型  -> vo(前端传过来的)

11-22 SSM整合1_第51张图片

数据的接收 需要我们后台服务器经行一个数据的封装来对接

11-22 SSM整合1_第52张图片

拿到数据users  然后调用service里的方法把数据添加到我们的数据了

以后开发中,批量修改和批量添加需要时,可以用到这个。

11-22 SSM整合1_第53张图片

后台Controller,把集合属性封装到一个类中 作为该类的一个属性

11-22 SSM整合1_第54张图片
数组类型:

批量删除,批量查询(根据一组id)

11-22 SSM整合1_第55张图片

11-22 SSM整合1_第56张图片

你可能感兴趣的:(SpringMvc,java,spring)