一、springmvc参数绑定

1、简单参数

简单参数包括:字符串类型+基本数据类型
绑定方式:基本数据的绑定是直接在handler方法的形参列表上声明。
注意:
1)数据类型要使用其包装类;
2)前端的参数名称必须和形参列表上的参数名字相同;
3)如果前端参数名和形参列表中的参数名不一致,则需要在形参列表中对应参数的参数类型前添加注解:@RequestParam(value=”前端参数名”);
4)如果在形参列表声明了一个参数,而前端没有传值,则该参数赋值为null。

2、数组

绑定方式:直接在形参列表声明,然后在前端定义多个同名的参数,和handler的形参名保持一致。

3、List集合

绑定方式:需要使用一个包装类来包装List。
1)声明一个包装类;
2)在包装类中声明一个成员属性:List集合(list);
3)添加这个成员属性的set和get方法;
4)在handler方法的形参列表上声明一个定义好的包装类的参数;
5)在前端定义一组参数,参数的name属性分别为成员属性list[ i ](i为list集合的索引);
注意:前端参数的name值必须和包装类中的成员属性的变量名保持一致。

4、Map容器

绑定方式:类似于list集合,需要使用一个包装类来包装map集合;
1)声明一个包装类;
2)在包装类中声明一个成员属性:Map容器(map);
3)添加这个成员属性的set和get方法;
4)在handler方法的形参列表上声明一个定义好的包装类的参数;
5)在前端定义一组参数,参数的name属性分别为成员属性map[ ‘ key ’](key为map中的键名);

5、对象Model

springmvc支持将前端传进来的一组数据作为一个对象的属性,封装成一个对象传到后台进行处理,简化了原生servlet通过request获取前端传来数据的繁琐过程。
注意:对象支持级联属性的绑定。

(1)只有普通属性的对象的绑定

1)定义一个模型类,其成员属性对应前端每一个参数,成员属性属性名与前端参数名保持一致;
2)设置该模型类的set和get方法;
3)在handler方法的形参列表上声明该模型类的参数(springmvc底层自动将前端参数封装成该模型类的一个对象),参数名为该模型类的类名首字母小写;

(2)带有级联属性的对象的绑定

1)定义一个模型类,其成员属性对应前端每一个参数,成员属性属性名与前端参数名保持一致;
2)如果该属性为级联属性,则前端的参数名为该级联属性的变量名去取该级联属性对象的属性;如:一个级联属性为Address address(包含属性:city和street),则前端属性名写成:address.city 、address.street;
3)设置该模型类的set和get方法;
4)在handler方法的形参列表上声明该模型类的参数(springmvc底层自动将前端参数封装成该模型类的一个对象),参数名为该模型类的类名首字母小写;

(3)表单中的数据回显

当handler方法的形参为一个java bean的时候,默认会以类名首字母小写作为key添加到模型数据中:
1)在el表达式中的通过 :对象.属性 ,获取相关数据,有级联属性的同该对象;
2)对象名称为handler中形参列表中形参类型首字母小写。

6、请求对象request

(1)绑定方式:直接在handler方法的形参列表声明HttpRequestServlet request。
(2)request的使用同servlet中的使用。

7、响应response对象、response对象、session对象

(1)绑定方式:直接在handler方法的形参列表声明HttpServletRequest request、HttpServletResponse response和HttpSession session。
(2)request的使用同servlet中的使用。
(3)一般使用request和response对象时,handler的返回值为void。

二、消息转换器

对于有些数据类型,springmvc没有办法自动完成转换(比如String 转 Date 类型),需要程序员自己定义消息转换器来处理,这个自定义的处理类型转换的类就叫做消息转换器。
自定义消息消息转换器步骤:
1、自定义消息转换器,实现Converter接口,加入参数泛型,第一个参数写转型前参数类型,第二个参数写目的参数类型;
2、将自定义的消息转换器配置到springmvc的配置文件中:
消息转换器工厂:ConversionServiceFactoryBean;
其子结点property:name=“converters”,converters为Set集合;
其子结点:
3、将消息转换器工厂配置给处理器适配器
由于通过注解,处理器适配器的声明被批量注册了,所以只需将消息转换器工厂配置给结点;
在该节点的属性中添加:conversion-service=”conversionService”。
字符串转时间类型:
对于字符串转时间格式,springmvc中封装有其对应的注解,只需在需要转换的属性上添加注解: @DateTimeFormat(pattern=”yyyy-MM-dd或其他格式”)即可。无需在xml文件中配置。

三、handler方法的返回值

1、没有返回值void

如果返回值为void,一般需要配置request和response一起使用;

2、ModelAndView

返回:模型数据和视图;
步骤:
(1)新建ModelAndView对象new ModelAndView() >>modelAndView;
(2)设置逻辑视图名称:modelAndView.setViewName(“逻辑视图名称”)(从项目名的根开始);
(3)设置模型数据:modelAndView.addObject(“键”,”值”);
(4)返回modelAndView;

3、String

(1)没有关键字

1)请求转发到某个视图;
2)通常配合Model使用;
3)Stirng代表了逻辑视图;
4)Model代表了模型数据。

(2)有关键字

1)forward关键字(请求转发)

a.加根“/”:return “forward:/url”
表示:转发到绝对路径下的某个url,此处的根表示项目名称后的根;
b.不加根:return “forward:url”
表示:转发到相对路径下的某个url;这里的相对路径,相对的是当前handler上配置的url的相对路径。

2)redirect关键字(重定向)

a.加根:return “redirect:/url”
表示:重定向到绝对路径下的某个url,此处的根表示项目名称后的根(重定向的绝对路径本是端口号之后的根,由springmvc封装为项目名称后的根);
b.不加根:return “redirect:url”
表示:重定向到相对路径下的某个url,这里的相对路径,相对的是当前handler上配置的url的相对路径。

四、json处理

在web项目中,使用springmvc框架,如果jsp页面需要使用jQuery或者js或者css或者图片等静态资源的时候,需要在psringmvc的xml配置文件中配置静态资源处理器:

1、json的定义

定义:json是一种轻量级的数据交互格式;
格式:{“键1”:“值1”,“键2”:“值2”,…}

2、浏览器端

(1)从服务器接收json

一般通过ajax异步请求,如果预期服务器返回一个json对象,则须通过ajax请求的dataType声明:datatype:json;

(2)向服务器发送json

通过ajax异步请求实现要求:
1)只能用post请求,不能用get请求:type:“post”;
2)显示声明要发送的参数类型:contentType:“application/json;charset=utf-8”;
3)将需要传递的参数定义为一个Jason对象:var user = {键1:值1,键2:值2,…}
4)将json对象转成json字符串:var jsonString = JSON.stringify(json对象);
5)向服务器传递数据:data:json字符串;
注意:
一般来说, 当发送ajax异步请求时, 务必显示声明预期服务器返回的数据类型。

3、服务器端

需要导入json的相关jar包:
①jackson-annotations
②jackson-core
③jack-databind

(1)从浏览器接收json

1)在handler方法的形参列表上直接声明一个与json字符串对应的java bean对象;
2)在handler方法的形参前加上注解@RequestBody;
要求:前端必须传一个json数据。

(2)给浏览器响应json对象

1)在handler方法的返回值上声明一个java bean
2)在返回值前面或者方法上添加注解:@ResponseBody;
要求:前端必须接收json数据。

4、服务器响应xml数据

服务器除了可以响应json数据给浏览器外,还可以直接响应xml数据,实现要求为:
(1)在handler方法的返回值前加上注解@RequestBody;
(2)在对应的Java bean 上添加注解:
类上:@XmlRootElement;
属性的get方法上:@XmlAttribute;
引用类型的属性上:@XmlElement。

5、consumes和produces

(1)consumes

指定要接收的浏览器发送的数据格式,如果浏览器发送的数据格式和consumes要求的数据格式不一致,则会报415异常(不兼容的媒体类型)。

(2)produces

服务器端给浏览器响应数据,既可以响应xml,又可以响应json:
1)在浏览器没有指明的情况下默认返回xml;
2)浏览器没有指明,可通过produces决定响应xml还是json.
注意:
一般来说, 当发送ajax异步请求时, 务必显示声明预期服务器返回的数据类型

6、封装JSON数据

一般不管前端的请求到达后端,不管业务逻辑是否成功,都应该返回信息给前端,告诉啊前端这个请求是成功的还是失败的。一般情况下通过封装一个JsonData对象,如下:
(1)封装一个JsonData对象
属性:1)boolean result:表示业务处理状态成功与否;
2)String message:用来描述业务处理结果的信息;
3)Object data:表示业务处理成功时需要返回给页面的模型数据。
(2)在这个java bean中声明各种构造器;
(3)在handler中处理完业务逻辑后,通过封装的JsonData对象将处理结果的状态,提示信息及模型数据带回页面。