SpringMVC笔记

一、Spring框架

1.典型的Web层框架包括:

Struts1
Web work
Struts2
Spring MVC

Spring MVC是Spring提供的一个实现了Web MVC设计模式的轻量级Web框架。采用工厂模式。它与Struts2框架一样,都属于MVC框架,但其使用和性能等方面比Struts2更加优异。SpringMVC项目中必须添加的JAR包包括:4个核心JAR包、commons-logging的JAR以及两个web相关的JAR(spring-web和spring-webmvc的JAR包)。

2.Spring MVC的特点。

(1) 是Spring框架的一部分,可以方便的利用Spring所提供的其他功能。
(2) 灵活性强,易于与其他框架集成。
(3) 提供了一个前端控制器DispatcherServlet,使开发人员无需额外开发控制器对象。
(4) 可自动绑定用户输入,并能正确的转换数据类型。
(5) 内置了常见的校验器,可以校验用户输入。如果校验不能通过,那么就会重定向到输入表单。
(6) 支持国际化。可以根据用户区域显示多国语言。

3.Spring MVC主要有如下优点:

(1)是Spring框架的一部分,可以方便的利用Spring所提供的其他功能。
(2)灵活性强,易于与其他框架集成。
(3)提供了一个前端控制器DispatcherServlet,使开发人员无需额外开发控制器对象。
(4)可自动绑定用户输入,并能正确的转换数据类型。
(5)内置了常见的校验器,可以校验用户输入。如果校验不能通过,那么就会重定向到输入表单。
(6)支持国际化。可以根据用户区域显示多国语言。
(7)支持多种视图技术。它支持JSP、Velocity和FreeMarker等视图技术。
(8)使用基于XML的配置文件,在编辑后,不需要重新编译应用程序。

4.Spring MVC框架的工作流程如下:

(1)用户通过浏览器向服务器发送请求,请求会被Spring MVC的前端控制器DispatcherServlet所拦截。
(2)DispatcherServlet拦截到请求后,会调用HandlerMapping处理器映射器。
(3)处理器映射器根据请求URL找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet 。
(4)DispatcherServlet会通过返回信息选择合适的HandlerAdapter(处理器适配器)。
(5)HandlerAdapter会调用并执行Handler(处理器),这里的处理器指的就是程序中编写的Controller类,也被称之为后端控制器。
(6)Controller执行完成后,会返回一个ModelAndView对象,该对象中会包含视图名或包含模型和视图名。
(7)HandlerAdapter将ModelAndView对象返回给DispatcherServlet 。
(8)DispatcherServlet会根据ModelAndView对象选择一个合适的ViewReslover(视图解析器)。
(9)ViewReslover解析后,会向DispatcherServlet中返回具体的View(视图)。
(10)DispatcherServlet对View进行渲染(即将模型数据填充至视图中)。
(11)视图渲染结果会返回给客户端浏览器显示。

5.在web.xml中,配置Spring MVC的前端控制器DispatcherServlet

如果没有通过元素配置,应用程序会默认到WEB-INF目录下寻找如下方式命名的配置文件:servletName-servlet.xml。servletName指的是部署在web.xml文件中的DispatcherServlet的名称,而-servlet.xml是配置文件名的固定写法,如在WEB-INF下查找springmvc-servlet.xml文件。

6.控制器方法的返回值类型

ModelAndView类型中可以添加Model数据,并指定视图;String类型的返回值可以跳转视图,但不能携带数据;而void类型主要在异步请求时使用,它只返回数据,而不会跳转视图。

7.@Controller注解在使用时可分为如下两步:

(1)在相应的类上标注@Controller注解。
(2)在Spring MVC的配置文件中添加相应的扫描配置信息。首先需要在配置文件中引入context名称空间的配置,然后使用<context:component-scan>元素指定需要扫描的类包。

8.SpringMVC框架下请求处理方法的参数类型:

基于SpringMVC框架下请求处理方法的参数类型主要有:HttpServletRequest、HttpServletResponse、HttpSession、Model、HttpMethod等;
基于SpringMVC框架下请求处理方法的返回类型主要有:ModelAndView、Map、String、void、HttpEntity<?>、View等。

9.SpringMVC中获取输入值的方式主要有:

在action的方法中写与请求参数同名的变量

在action的方法的参数中使用HttpServletRequest、HttpServletResponse、HttpSession、Model、HttpMethod等对象

在方法的参数中使用@RequestParam注解

界面上的输入信息是某个自定义对象的信息,在接收的时候直接封装为该自定义对象

把请求参数放到请求路径中,即采用RESTful风格。

10.SpringMVC中对用户的响应方式主要有:

返回ModelAndView对象,如new ModelAndView(“studentList”,model),第一个参数表示视图,第二参数表示视图中需要的数据。

1
2
3
4
5
6
7
@RequestMapping("/studentUpdateView.do")
public ModelAndView updateView(String id){
Student student = studentService.findById(id);
Map<String,Object> model = new HashMap<String,Object>();
model.put("student",student);
return new ModelAndView("studentUpdate",model);
}

控制层的方法返回值类型为String,在方法中返回表示输出界面的字符串,与ModelAndView中的第一个参数相同

1
2
3
4
@RequestMapping("studentAddView.do")
public String addView(){
return "studentAdd";
}

​ 使用String表示要返回的视图,使用Model表示要返回的数据。在请求方法的参数中定义Model对象,在请求方法体中把数据存储到Model对象中响应给前端页面。

1
2
3
4
5
6
@RequestMapping("/studentList.do")
public String studentList(Model model){
List<Student> students = studentService.getStudents();
model.addAttribute("students",students);
return "studentList";
}

​ 返回JSON数据。

11.@RequestParam注解

@RequestParam注解主要用于对请求中的参数进行定义,多用于在请求参数名与方法形参名不一致时的参数间接绑定。在使用时可以指定他的4个属性,具体如下:
(1)value:name属性的别名,这里指参数的名字,即入参的请求参数名字,如果只使用vaule属性,则可以省略value属性名。
(2)name:用于指定请求头绑定的名称。
(3)required :用于指定参数是否必须,默认是true,表示请求中一定要有相应的参数。
(4)defaultValue:默认值,表示如果请求中没有同名参数时的默认值。

12.在使用包装POJO类型数据绑定时

在使用包装POJO类型数据绑定时,前端请求的参数名编写必须符合以下两种情况:
(1)如果查询条件参数是包装类的直接基本属性,则参数名直接用对应的属性名;
(2)如果查询条件参数是包装类中POJO的子属性,则参数名必须为“对象.属性”,其中“对象”要和包装POJO中的对象属性名称一致,“属性”要和包装POJO中的对象子属性一致。

13.JSON数据交互时,主要使用的两个注解@RequestBody和@ResponseBody

JSON数据交互时,主要使用了两个注解@RequestBody和@ResponseBody。其中@RequestBody用于将请求体中的数据绑定到方法的形参中,在使用时标准在在方法的形参上。@ResponseBody用于直接返回return对象。Jackson用到的开源包的有 jackson-annoations-2.8.8.jar、 jackson-core-2.8.8.jar、jackson-databind-2.8.8.jar。

14.JSON对象的数组结构

JSON对象的数组结构以 “[” 开始,以 “]” 结束,对象结构以 “{” 开始,以 “}”结束,JSON对象数据结构的中间部分由键值对(key:value)以英文 “,” 分隔的值的列表组成。关键字(key)必须为String类型,值(value)可以是String、Number、Object、Array等数据类型。

15.RESTful

RESTful也称之为REST,是英文“Representational State Transfer”的简称。RESTful风格在HTTP请求中,使用put、delete、post和get方式分别对应添加、删除、修改和查询的操作。

16.@PathVariable(“id”)注解

@PathVariable(“id”)注解用于接收并绑定请求参数,它可以将URL请求中的变量映射到请求方法的形参上。
如果请求路径中的参数名方法形参名称一样,则@PathVariable后面的 “ (“id”) ” 可以省略。

17.Spring MVC的文件上传

Spring MVC的文件上传是通过MultipartResolver对象实现的。

文件上传表单需要满足的3个条件如下:
(1) form表单的method属性设置为post;
(2) form表单的enctype属性设置为multipart/form-data;
(3) 提供的文件上传输入框。