10

Spring MVC框架入门到精通【必会知识点】

 2 years ago
source link: https://blog.51cto.com/u_15485663/5148845
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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​

​一、Spring MVC 基本介绍​

​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、配置前端控制器​

​​Spring MVC框架入门到精通【必会知识点】 _mvc​​

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

​​Spring MVC框架入门到精通【必会知识点】 _mvc_02​​

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

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

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

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

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

​​Spring MVC框架入门到精通【必会知识点】 _springmvc_03​​

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

​1、配置前端控制器​

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

​3、需要开发:​

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

​2)开发jsp等视图

三、SpringMVC执行流程

Spring MVC框架入门到精通【必会知识点】 _springmvc_04

四、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​

​​Spring MVC框架入门到精通【必会知识点】 _Java_05​​

​■ 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地址作为父路径。​

​■ 窄化路径映射:​

​​Spring MVC框架入门到精通【必会知识点】 _Java_06​​

​■ RequestMapping 的子注解(常用):​

​@GetMapping​

​@PostMapping​

​@PutMapping​

​@DeleteMapping​

​@PatchMapping​

​■ RequestMapping 的六大属性讲解:​

​​Spring MVC框架入门到精通【必会知识点】 _Java_07​​

​① 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的框架配置中添加:​

​​Spring MVC框架入门到精通【必会知识点】 _spring_08​​

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

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

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

​在SpringBoot中:​

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

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

​mapping表示映射路径.​

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

​​Spring MVC框架入门到精通【必会知识点】 _jar_09​​

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK