Spring MVC框架——Web开发框架
1、MVC设计模式
一般指MVC框架,M(Model)数据模型层,V(View)视图层,C(Controller)控制层。
Controller层:获取用户的请求,处理相关业务逻辑,并成功跳转页面,负责前后台的交互。
Model层:封装用户信息的实体类,封装实体类。
View层:跳转的结果页面。
两种Web应用程序的的开发模式:JSP+JavaBean和Servlet+JSP+JavaBean
JSP+JavaBean:JSP:用于处理用户请求,JavaBean:用于封装和处理数据。
Servlet+JSP+JavaBean:servlet:处理用户请求,JSP:数据显示,JavaBean:数据封装。
MVC优点(松耦合+高可重用性+高可适用性):
(1)多视图共享一个模型,提高了代码的可重用性;
(2)MVC三个模块相互独立,松耦合架构;
(3)控制器提高了应用程序的灵活性和可配置性;
(4)有利于软件工程化管理。
MVC缺点:
(1)原理复杂;
(2)增加了系统结构和实现的复杂性;
(3)视图对模型数据的低效率访问。
2、搭建Spring MVC程序
(1)创建Web应用并引入jar包;
Spring MVC 依赖 JAR 文件包括 Spring 的核心 JAR 包和 commons-logging 的 JAR 包。
(2)Spring MVC配置:在web.xml中配置Servlet,创建Spring MVC的配置文件;
Spring MVC是基于 Servlet 的,DispatcherServlet 是整个 Spring MVC 框架的核心,主要负责截获请求并将其分派给相应的处理器处理。所以配置 Spring MVC,首先要定义 DispatcherServlet。跟所有 Servlet 一样,用户必须在 web.xml 中进行配置。
(3)创建Controller(处理请求的控制器);
(4)创建View;创建jsp文件。
(5)部署运行。
4、Spring MVC和Struts2的区别:
(1)Spring MVC基于方法开发,Structs2基于类开发;
(2)Spring MVC可以进行单例开发,Struts2无法使用单例;
(3)Struts2的处理速度比Spring MVC慢。
5、Spring MVC视图解析器(View Resolver):将逻辑视图名解析成具体的视图对象
UrlBasedViewResolver 是对 ViewResolver 的一种简单实现,主要提供了一种拼接 URL 的方式来解析视图。通过 prefix 属性指定前缀,suffix 属性指定后缀。
InternalResourceViewResolver 为“内部资源视图解析器”,是UrlBasedViewController的子类,InternalResourceView 会把 Controller 处理器方法返回的模型属性都存放到对应的 request 属性中,然后通过 RequestDispatcher 在服务器端把请求 forword 重定向到目标 URL。也就是说,使用 InternalResourceViewResolver 视图解析时,无需再单独指定 viewClass 属性。
FreeMarkerViewResolver 是 UrlBasedViewResolver 的子类,可以通过 prefix 属性指定前缀,通过 suffix 属性指定后缀。FreeMarkerViewResolver 最终会解析逻辑视图配置,返回 freemarker 模板。不需要指定 viewClass 属性。
6、Spring MVC执行流程
(1)浏览器—(HTTP请求)—>Dispatcher Servlet前端控制器;
(2)Dispatcher Servlet前端控制器—(请求查找Handler)—>HandlerMapping处理器映射器;
(3)HandlerMapping处理器映射器—(返回一个执行链)—>Dispatcher Servlet前端控制器;
(4)Dispatcher Servlet前端控制器—(请求适配器)—>HandlerAdapter处理器适配器;
(5)HandlerAdapter处理器适配器—(执行Handler)—>Handler处理器也称Controller;
(6)Handler处理器也称Controller—(返回ModelAndView)—>HandlerAdapter处理器适配器;
(7)HandlerAdapter处理器适配器—(返回ModelAndView)—>Dispatcher Servlet前端控制器;
(8)Dispatcher Servlet前端控制器—(请求到视图解析器)—>View Resolver视图解析器;
(9)View Resolver视图解析器—(返回View)—>Dispatcher Servlet前端控制器;
(10)Dispatcher Servlet前端控制器—(视图渲染)—>View(JSP、FreeMarker等);
(11)View(JSP、FreeMarker等)—(HTTP响应)—>浏览器。
7、@Controller 注解用于声明某类的实例是一个控制器。
@RequestMapping 注解可用于类或方法上。
@RequestMapping 注解常用属性如下:
(1)value属性:映射使用;
(2)path属性:映射使用,访问方法;
(3)name属性:name属性相当于方法的注释;
(4)method 属性用于表示该方法支持哪些 HTTP 请求;
(5)params:params 属性用于指定请求中规定的参数;
(6)header:header 属性表示请求中必须包含某些指定的 header 值;
(7)consumers:consumers 属性用于指定处理请求的提交内容类型(Content-Type);
(8)produces:produces 属性用于指定返回的内容类型;
8、Spring MVC传递参数
(1)通过实体 Bean 接收请求参数
(2)通过处理方法的形参接收请求参数
(3)通过 HttpServletRequest 接收请求参数
(4)通过 @PathVariable 接收 URL 中的请求参数
(5)通过 @RequestParam 接收请求参数
(6)通过 @ModelAttribute 接收请求参数
9、Spring MVC重定向和转发
(1)redirect:客户端重定向
(2)forward:服务器内部跳转
10、Spring MVC的@Service注解和@Autowired注解
@Autowired 注解属于 org.springframework.beans.factory. annotation 包,可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。
@Service 注解属于 org.springframework.stereotype 包,会将标注类自动注册到 Spring 容器中。
11、Spring MVC @ModelAttribute注解
在 Controller 中使用 @ModelAttribute 时,有以下几种应用情况。
(1)应用在方法上
(2)应用在方法的参数上
(3)应用在方法上,并且方法也使用了 @RequestMapping
Model和ModelView的区别:
(1)Model:每次请求中都存在的默认参数,利用其 addAttribute() 方法即可将服务器的值传递到客户端页面中。
(2)ModelView:包含 model 和 view 两部分,使用时需要自己实例化,利用 ModelMap 来传值,也可以设置 view 的名称。
@ModelAttribute 注解的方法会在每次调用该控制器类的请求处理方法前被调用。这种特性可以用来控制登录权限。
控制登录权限的方法有很多,例如拦截器、过滤器等。
12、Spring MVC类型转换器(Converter<S, T>)
Spring MVC 框架的 Converter<S,T> 是一个可以将一种数据类型转换成另一种数据类型的接口,这里 S 表示源类型,T 表示目标类型。源数据类型可以是任意数据类型。
(1)内置的类型转换器:标量转换器和集合、数组相关转换器;
(2)自定义类型转换器:
①、创建实体类;
②、创建控制器类;
③、创建自定义类型转换器类;
④、注册类型转换器;
⑤、创建相关视图。
13、Spring MVC数据格式化(Formatter<T>)
Spring MVC框架的Formatter<T>也是一个可以将一种数据类型转换成另一种数据类型的接口,Formatter 的源类型必须是 String 类型,Formatter更适合Web层,转换表单中的用户输入的情况。
(1)内置的格式转换器
NumberFormatter、CurrencyFormatter(带货币符号)、PercentFormatter(带百分数符号)、DateFormatter
(2)自定义格式化转换器:
①、创建实体类;
②、创建控制器类;
③、创建自定义格式化转换器类;
④、注册格式化转换器;
⑤、创建相关视图。
14、Spring MVC表单标签库
Spring MVC表单标签的属性:
(1)path:属性路径,表示表单对象属性;
(2)cssClass:表单组件对应的的CSS样式类名;
(3)cssErrorClass:当提交表单后报错(服务端错误),采用的CSS样式类;
(4)cssStyle:表单组件对应的CSS样式;
(5)htmlEscape:绑定的表单属性值是否要对HTML特殊字符进行转换,默认为true。
15、Spring MVC JSON数据交互
JSON(JavaScript Object Notation, JS对象标记)是一种轻量级的数据交换格式,与XML一样,JSON也是基于纯文本的数据格式,它有对象结构({})和数组结构([])两种数据结构。
JSON数据转换:为实现浏览器与控制器类之间的JSON数据交互,Spring MVC提供了MappingJackson2HttpMessageConverter实现类默认处理JSON格式请求响应。该实现类利用Jackson开源包读写JSON数据,将Java对象转换成JSON对象和XML文档,同时也可以将JSON对象和XML文档转换成Java对象。
用于将请求体中的数据绑定到JSON格式转换注解,分别是:
@RequestBody:用于将请求体中的数据绑定到方法的形参中,该注解应用在方法的形参上。
@ResponseBody:用于直接返回return对象,该注解应用在方法上,一般情况下,异步获取数据时使用,被其标注的处理方法返回的数据都将输出到响应流中,客户端获取并显示数据。
在项目选型的时候可以使用 Google 的 Gson 和阿里巴巴的 FastJson 两种并行使用,如果只是功能要求,没有性能要求,可以使用Google 的 Gson。如果有性能上面的要求可以使用 Gson 将 Bean 转换 JSON 确保数据的正确,使用 FastJson 将 JSON 转换 Bean。
16、Spring MVC拦截器(Interceptor)
Spring MVC 提供了 Interceptor 拦截器机制,用于请求的预处理和后处理。
Spring MVC 的拦截器(Interceptor)与 Java Servlet 的过滤器(Filter)类似,它主要用于拦截用户的请求并做相应的处理,通常应用在权限验证、记录请求信息的日志、判断用户是否登录等功能上。
拦截器的定义,主要有2种方式:
1、通过实现HandlerInterceptor接口或继承HandlerInterceptor接口的实现类来定义;
2、通过实现WebRequestInterceptor接口或继承WebRequestInterceptor接口的实现类来定义。
接口中的方法:
(1)preHandle():在控制器的处理请求方法前执行,返回值表示是否中断后续操作,true则继续,false则中断;
(2)postHandle():在控制器的处理请求方法调用之后,解析视图之前执行,可以对请求域中的模型和视图做进一步的修改;
(3)afterCompletion():在控制器的处理请求方法执行完成后执行,即视图渲染结束后执行,可以实现一些资源清理、记录日志信息等工作。
17、Spring MVC数据校验
数据验证的方式:
(1)Spring自带的验证框架;
(2)利用JSR 303实现;
数据验证分为客户端验证和服务器端验证,客户端验证主要是过滤正常用户的误操作,通过JavaScript代码完成。服务器端验证是整个应用阻止非法数据的最后防线,通过在应用中编程实现。
18、Spring MVC异常处理
3种处理异常的方式:
(1)使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver。
全局异常处理可采用,它将异常类名映射成视图名,即发生异常时使用对应的视图报告异常。
(2)实现Spring的异常处理接口HandlerExceptionResolver,自定义自己的异常处理器。
处理程序异常,包括处理器异常、数据绑定异常以及控制器执行时发生异常。
(3)使用@ExceptionHandler注解实现异常处理。
局部异常仅能处理指定Controller中的异常。
19、Spring MVC REST风格
REST(Representational State Transfer)表述性转移。
Spring REST风格可以简单理解为:使用URL表示资源时,每个资源都用一个独一无二的URL来表示,并使用HTTP方法表示操作,即准确描述服务器对资源的处理动作(GET获取、POST新建、PUT更新、DELETE删除),实现资源的增删改查。
20、Spring MVC文件上传
Spring MVC框架的文件上传基于commons-fileupload组件,
MultipartResolver接口用于处理上传请求,将上传请求包装成可以直接获取文件的数据,MultipartResolver接口的两个实现类:
(1)StandardServletMultipartResolver:使用了Servlet 3.0标准的上传方式。
(2)CommonsMultipartResolver:使用了Apache的commons-fileupload来完成具体的上传操作。
单文件上传和多文件上传
(1)单文件上传
①、导入jar文件:commons-io-2.4.jar 和 commons-fileupload-1.2.2.jar;
②、配置 MultipartResolver:使用 CommonsMultipartReslover 配置 MultipartResolver 解析器;
③、编写文件上传表单页面:编码类型是multipart/form-data”类型。
④、创建POJO类:在该 POJO 类中声明一个 MultipartFile 类型的属性封装被上传的文件信息,属性名与文件选择页面 filleUpload.jsp 中的 file 类型的表单参数名 myfile 相同;
⑤、编写控制器;
⑥、创建成功显示页面;
⑦、测试文件上传;
(2)多文件上传
①、创建JSP页面;
②、创建POJO类;
③、添加多文件上传处理方法:在FileUploadController控制器类中添加多文件上传处理方法multiple;
④、创建成功显示页面。
21、Spring MVC文件下载
两种实现方式:
(1)通过超链接实现下载;
(2)利用程序编码实现下载。
利用程序编码实现下载需要设置两个报头:
(1)Web 服务器需要告诉浏览器其所输出内容的类型不是普通文本文件或 HTML 文件,而是一个要保存到本地的下载文件,这需要设置 Content-Type 的值为 application/x-msdownload;
(2)Web 服务器希望浏览器不直接处理相应的实体内容,而是由用户选择将相应的实体内容保存到一个文件中,这需要设置 Content-Disposition 报头。
程序编码文件下载的两个步骤:
(1)在客户端使用一个文件下载超链接,链接指向后台下载文件的方法以及文件名;
(2)在控制器类中,提供文件下载方法进行下载。
Spring MVC框架——Web开发框架相关推荐
- Spring MVC框架-持久层用hibernate自动化(1)
##Spring MVC Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring 框架提供了构建 Web 应用程序的全功能 MVC ...
- 【Java学习路线之JavaWeb】Spring MVC框架入门教程
文章目录 读者 阅读条件 MVC设计模式简介 JSP+JavaBean Servlet+JSP+JavaBean MVC优缺点 优点 缺点 Spring MVC是什么 Spring MVC优点 第一个 ...
- 深入解析Spring MVC与Web Flow
深入解析Spring MVC与Web Flow 诚邀加入图灵俱乐部:http://groups.csdn.net/Turingbooks "本书为Spring社区弥补了一大空白." ...
- Spring MVC 框架搭建及详解
现在主流的Web MVC框架除了Struts这个主力 外,其次就是Spring MVC了,因此这也是作为一名程序员需要掌握的主流框架,框架选择多了,应对多变的需求和业务时,可实行的方案自然就多了.不过 ...
- restful api_将Spring MVC RESTful Web服务迁移到Spring 4
restful api 1引言 Spring 4为MVC应用程序带来了一些改进. 在这篇文章中,我将重点介绍宁静的Web服务,并通过采用Spring 3.2实现的项目并将其升级到Spring 4来尝试 ...
- 搭建基于spring MVC框架 + RESTful架构风格技术总结
2019独角兽企业重金招聘Python工程师标准>>> 实战篇: 在SpringMVC框架中搭建RESTful架构风格来完成客户端与服务器端的低耦合度.可扩展性.高并发与大数据流量的 ...
- 从 0 开始手写一个 Spring MVC 框架,向高手进阶
转载自 从 0 开始手写一个 Spring MVC 框架,向高手进阶 Spring框架对于Java后端程序员来说再熟悉不过了,以前只知道它用的反射实现的,但了解之后才知道有很多巧妙的设计在里面.如 ...
- 将Spring MVC RESTful Web服务迁移到Spring 4
1引言 Spring 4为MVC应用程序带来了一些改进 . 在这篇文章中,我将重点介绍宁静的Web服务,并通过采用Spring 3.2实现的项目并将其升级到Spring 4来尝试这些改进.以下几点总结 ...
- 从零开始学java 框架_从零开始学 Java - 搭建 Spring MVC 框架
如果创建一个 Spring 项目 Spring MVC 框架在 Java 的 Web 项目中应该是无人不知的吧,你不会搭建一个 Spring 框架?作为身为一个刚刚学习Java的我都会,如果你不会的话 ...
最新文章
- mysql中的主从复制slave-skip-errors参数使用方法
- 六种让路由器与交换机更加安全的方法
- 你为什么喜欢VIM?
- angular js创建表单_如何优雅的使用 Angular 表单验证
- Bruce的程序员语录
- 全球著名营销专家怎么评价这本书
- 项目owner看这里,MaxCompute全表扫描新功能,给你“失误”的机会
- eclipse安装教程|最详细eclipse安装 配置图文教程
- 数据处理第3部分:选择行的基本和高级的方法
- 为什么拉格朗日对偶函数一定是凹函数(逐点下确界)
- leetcode 714. 买卖股票的时机含手续费 python
- CLSR 11.2散列表
- 2022华为机试真题 C++ 实现 【字符串子序列II】
- element table 左对齐
- c语言转fpga原理,要想玩转FPGA,就必须理解FPGA内部的工作原理-可编程逻辑-与非网...
- Nvjdc(诺兰)再续经典——诺兰方舟ARK
- Broadcast之系统时间流逝广播
- 从顺丰到菜鸟,洋女婿“爆改”俄罗斯邮政
- 2020-11-20java数据类型及关键字
- 美丽联合集团赵成:要让员工看到自己的未来