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

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

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

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

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

TestController.java

1.参数注入

方法返回一个逻辑视图名

@controller:交给spring管理

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

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

只有不转发之后才能展示

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

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

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

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

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

字符串

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

参数的类型

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

2.自定义类类型 

3.集合类型

4.数据类型

简单数据类型

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

kv键值对用?传值

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

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

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

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

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

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

404:文资源找不到

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

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

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

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

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

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

1.实现接口

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

扫描这个包:

注册到注解驱动上

转换服务工厂bean  -> 

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

添加一个bean

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

这个类在spring-context-support

外部bean配置

内部bean配置

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

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

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

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

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

缺点:配置繁琐

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

去掉

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

自定义类类型   pojo

登录页面:login.jsp

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

SpringMVC帮助你创建对象

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

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

@RequestParam注解的属性

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

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

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

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

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

改一下css样式:

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

集合类型

多个User对象

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

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

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

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

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

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

数组类型:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值