学习SpringMVC框架必知必会~走近Spring MVC

            Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框架,如Struts1(现在一般不用),Struts 2(一般老项目使用)等等。下面就来跟我一起进入SpringMVC的世界吧!!!

想要更加深入的了解springmvc框架可以参考此视频:https://www.bilibili.com/video/BV19f4y1s7qM

一、SpringMVC 基本介绍

1.什么是 Spring MVC?

         SpringMVC 是 Spring-Frame 框架的子集(Spring-Frame包含了Spring MVC), MVC 框架,(类比javaWeb)它解决 WEB 开发中常见的问题(参数接收、文件上传、表单验证、国际化等等),而且使用简单,与 Spring 无缝集成。

         支持 RESTful 风格的 URL 请求 ,非常容易与其他视图技术集成,如 Velocity、FreeMarker。 采用了松散耦合可插拔组件结构,比其他 MVC 框架更具扩展性和灵活性。

           Spring3.0 后全面超越 Struts2,成为最优秀的 MVC 框架 (更安全,性能更好,更简单)。

2.Spring WebFlux

         Spring WebFlux 是 Spring 另一个 Web 框架,基于异步非阻塞的。

         SpringMVC 是同步阻塞的 IO 模型,资源浪费相对来说比较严重,当我们在处理一个比较耗时的任务时, 比如上传文件,服务器的线程一直在等待接收文件,而 Spring WebFlux 可以做到异步非阻塞。

✿ SpringMVC 是单例的,提高性能:

1)SpringMVC 是单例的, 基于方法设计;是单例的,避免线程安全问题,不定义成员变量、不使用成员变量,尤其是需要共享数据的变量,作为局部变量,不要作为共享字段。

2)servlet 单例,一般不使用成员变量,不安全,除非是要共享数据,才作为成员变量。

二、Spring 基本使用

▷ 基于xml配置

0.建立web项目

1、依赖[细节版本一致性]:

       commons-logging-1.2.jar

        servlet-api.jar

        spring-aop-5.2.8.RELEASE.jar

         spring-beans-5.2.8.RELEASE.jar

         spring-context-5.2.8.RELEASE.jar

         spring-core-5.2.8.RELEASE.jar

         spring-expression-5.2.8.RELEASE.jar

         spring-web-5.2.8.RELEASE.jar

         spring-webmvc-5.2.8.RELEASE.jar

2、配置前端控制器

3、开发一个处理器类 HelloController,实现接口Controller,覆盖handlerRequest方法

4、配置MVC框架[mvc.xml]:

         1)配置处理器映射器:BeanNameUrlHandlerMapping [目的是寻找匹配的处理器]

         2)配置处理器适配器:SimpleControllerHandlerAdapter [目的是调用处理器的handlerRequest方法]

         3)配置视图解析器:InternalResourceViewResolver [目的是处理视图,使之支持jsp、jstl]

         4)配置处理器:HelloController [我们自己开发的处理类]

✿ 总结,站在开发者角度:

1、配置前端控制器

2、配置框架提供的: 处理器映射器、处理器适配器、视图解析器

3、需要开发:

      1)先开发Controller处理器,再配置

      2)开发jsp等视图

三、SpringMVC执行流程


四、SpringMVC 核心组件分析:

1、前端控制器 DispatcherServlet(不需开发),由框架提供,在 web.xml 中配置。

作用:接收请求,响应结果,相当于转发器,中央处理器。

2、处理器映射器 HandlerMapping(不需开发),由框架提供。

作用:匹配处理器,根据请求的 url 查找 Handler(处理器),可以通过 XML 和注解方式来映射。

3、处理器适配器 HandlerAdapter(不需开发),由框架提供。

作用:按照特定规则(HandlerAdapter 要求的规则)去执行 Handler。

4、处理器 Handler(也称之为 Controller,需要开发)

注意:编写 Handler 时按照 HandlerAdapter 的要求去做[实现Controller接口,重写handlerRequest方法],这样适配器才可以去正确执行 Handler。

作用:相当于Servlet,接受用户请求信息,调用业务方法处理请求,控制界面跳转,也称之为后端控制器。

5、视图解析器 ViewResolver(不需开发),由框架提供

作用:进行视图解析,把逻辑视图名解析成真正的物理视图。

SpringMVC 框架支持多种 View 视图技术,包括:JstlView、FreemarkerView、pdfView 等。

6、视图 View(需要开发)

作用:把数据展现给用户的页面 View 是一个接口,实现类支持不同的 View 技术(jsp、freemarker、pdf 等).

五、 debug的方式阅读springmvc 的执行流程的思路:

1、发送请求-》前端控制器,所以第一步是到前端控制器,看前端控制器的什么呢?---service方法【理由:前端控制器是基于servlet,可以把它的职责看成servlet的职责,所以核心方法-service】----快捷键ctr+o,搜索service方法,发现没有----》父类中查找service方法,在service方法第一步打个断点

2、开始debug:按正常流程走,先启动tomcat服务器,然后在浏览器发送请求-》

六、使用注解开发

1、使用xml配置springMVC的缺点:

① 配置繁琐

② Controller 必须实现Controller接口,只有一个处理器请求的方法,若是要处理多个请求,得开发多个Controller

■ 企业中用得最多的方式:注解开发

2、注解开发步骤:

(1)贴标签:@Controller、@RequestMapping("hello")

(2)第三方注解驱动(赋予注解功能):

先配置命名空间(约束内容) 某某.xsd

■ springmvc 的配置:处理器的映射器、处理器的适配器、视图解析器 在jar包:spring-webmvc.jar包下的文件 DispatcherServlet.properties 中有相应的配置了。

■ MVC注解解析器: :会自动去注册RequestMappingHandlerMapping,RequestMappingHandlerAdapter,ExceptionHandlerExceptionResolver 三个bean。

         1)除此之外,SpringMVC中几乎所有的注解,都需要该注解解析器来解析:

         2)支持类型转换ConversionService

         3)@NumberFormat,DateTimeFormate注解

         4)@Validdate JSR303 校验

          5)@RequestBody @ResponseBody 等等。

3、RequestMapping注解详解:

用来处理请求地址url映射的注解,可以贴在类上和方法上。

贴在类上:表示类中的所有请求方法的url都必须把类上的url地址作为父路径。

■ 窄化路径映射:


■ RequestMapping 的子注解(常用):

@GetMapping

@PostMapping

@PutMapping

@DeleteMapping

@PatchMapping

■ RequestMapping 的六大属性讲解:

① value 和 method

value: 和 path 是一样的,指定请求的url。

method:指定请求方式的类型,请求方式的类型:GET\POST\HEAD\PUT\PATCH\DELETE\OPTIONS\TRACE

② 指定请求和响应的mediaType

consumes:指定请求内容格式, 例如:Content-Type=application/json

produces: 指定响应内容格式,例如:application/json;charset=UTF-8

③ params 和 headers:

params:指定request中必须包含某些参数值,包含该方法才处理

headers:指定request中必须包含指定的header,包含才能处理

4、前端控制器的url-pattern 配置:

静态资源:图片、html、css、js等

第一种方式:*.拓展名,比如 *.do 古老的方式,不会导致静态资源文件被拦截问题,但是不支持restfull编码风格。

第二种方式:/,支持restfull 风格,但是会导致静态资源文件被拦截,解决问题--

第三种方式:/* ,是错误的,可以请到Controller方法,但是跳转到jsp时会被拦截,jsp不能正常显示。

■ 解释和解决第二种方式 /

解释:因为tomcat中处理静态资源的servlet叫default,而default的映射路径就是/

启动项目的时候:

1)启动tomcat,加载tomcat的web.xml文件

2)启动项目,加载项目的web.xml文件

项目中的web.xml所映射的/会覆盖tomcat中web.xml配置的映射规则。

(常用)解决1:在springmvc的框架配置中添加:

原理:将springmvc上下文[环境] 中定义的一个DefaultServletHttpRequestHandler,对所有经过前端控制器的请求做筛选和盘查,

若是发现没有经过映射请求,则交给tomcat默认的servlet来处理。(将静态资源由springmvc交回给servlet来处理)

(springboot常用)解决2:springmvc 自己来处理资源文件,而且还附加了很多功能:

在SpringBoot中:

允许把静态资源放在任何地方,比如WEB-INF里面,resoures目录,设置把JS等静态文件打包放在jar中,也能找到.

都可以通过Location去指定静态资源路径,location是Resouce类型,可以使用前缀,如classpath:.

mapping表示映射路径.

**: 包含所有的子集目录

如果本文对你有帮助的话记得给一乐点个赞哦,感谢!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352

推荐阅读更多精彩内容