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开发框架相关推荐

  1. Spring MVC框架-持久层用hibernate自动化(1)

    ##Spring MVC Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring 框架提供了构建 Web 应用程序的全功能 MVC ...

  2. 【Java学习路线之JavaWeb】Spring MVC框架入门教程

    文章目录 读者 阅读条件 MVC设计模式简介 JSP+JavaBean Servlet+JSP+JavaBean MVC优缺点 优点 缺点 Spring MVC是什么 Spring MVC优点 第一个 ...

  3. 深入解析Spring MVC与Web Flow

    深入解析Spring MVC与Web Flow 诚邀加入图灵俱乐部:http://groups.csdn.net/Turingbooks "本书为Spring社区弥补了一大空白." ...

  4. Spring MVC 框架搭建及详解

    现在主流的Web MVC框架除了Struts这个主力 外,其次就是Spring MVC了,因此这也是作为一名程序员需要掌握的主流框架,框架选择多了,应对多变的需求和业务时,可实行的方案自然就多了.不过 ...

  5. restful api_将Spring MVC RESTful Web服务迁移到Spring 4

    restful api 1引言 Spring 4为MVC应用程序带来了一些改进. 在这篇文章中,我将重点介绍宁静的Web服务,并通过采用Spring 3.2实现的项目并将其升级到Spring 4来尝试 ...

  6. 搭建基于spring MVC框架 + RESTful架构风格技术总结

    2019独角兽企业重金招聘Python工程师标准>>> 实战篇: 在SpringMVC框架中搭建RESTful架构风格来完成客户端与服务器端的低耦合度.可扩展性.高并发与大数据流量的 ...

  7. 从 0 开始手写一个 Spring MVC 框架,向高手进阶

    转载自   从 0 开始手写一个 Spring MVC 框架,向高手进阶 Spring框架对于Java后端程序员来说再熟悉不过了,以前只知道它用的反射实现的,但了解之后才知道有很多巧妙的设计在里面.如 ...

  8. 将Spring MVC RESTful Web服务迁移到Spring 4

    1引言 Spring 4为MVC应用程序带来了一些改进 . 在这篇文章中,我将重点介绍宁静的Web服务,并通过采用Spring 3.2实现的项目并将其升级到Spring 4来尝试这些改进.以下几点总结 ...

  9. 从零开始学java 框架_从零开始学 Java - 搭建 Spring MVC 框架

    如果创建一个 Spring 项目 Spring MVC 框架在 Java 的 Web 项目中应该是无人不知的吧,你不会搭建一个 Spring 框架?作为身为一个刚刚学习Java的我都会,如果你不会的话 ...

最新文章

  1. mysql中的主从复制slave-skip-errors参数使用方法
  2. 六种让路由器与交换机更加安全的方法
  3. 你为什么喜欢VIM?
  4. angular js创建表单_如何优雅的使用 Angular 表单验证
  5. Bruce的程序员语录
  6. 全球著名营销专家怎么评价这本书
  7. 项目owner看这里,MaxCompute全表扫描新功能,给你“失误”的机会
  8. eclipse安装教程|最详细eclipse安装 配置图文教程
  9. 数据处理第3部分:选择行的基本和高级的方法
  10. 为什么拉格朗日对偶函数一定是凹函数(逐点下确界)
  11. leetcode 714. 买卖股票的时机含手续费 python
  12. CLSR 11.2散列表
  13. 2022华为机试真题 C++ 实现 【字符串子序列II】
  14. element table 左对齐
  15. c语言转fpga原理,要想玩转FPGA,就必须理解FPGA内部的工作原理-可编程逻辑-与非网...
  16. Nvjdc(诺兰)再续经典——诺兰方舟ARK
  17. Broadcast之系统时间流逝广播
  18. 从顺丰到菜鸟,洋女婿“爆改”俄罗斯邮政
  19. 2020-11-20java数据类型及关键字
  20. 美丽联合集团赵成:要让员工看到自己的未来

热门文章

  1. python基础——matplotlib——scatter和plot方法中的maker参数(点的样式)
  2. java如何写出简洁代码
  3. web前端开发基础班课程大纲
  4. 从经济学角度解读人工智能
  5. Python类型转换——数据类型转换函数大全
  6. 硬件基础:MOS管工作区间及开通过程分析——以N沟道增强型MOS为例
  7. nginx代理内网1521,3306数据库端口
  8. 永恒之蓝-永恒之蓝漏洞(linux)
  9. 机器学习(一):模型的参数估计方法
  10. 2022起重机司机(限桥式起重机)理论题库及答案