看完这篇文章,SpringMVC你就懂得差不多了


生活就像海洋,只有意志坚强的人才能到达彼岸。

当初的你选择程序员这一行的时候就知道,这一行就是活到老,学到老。

当然,

温故而知新,那我们今天就和小编我一起来复习一下SpringMVC的内容吧。

让大家巩固下。

SpringMVC 的简介与运行原理如下

Spring MVC 中的MVC (modal、view、controller)分别是 模型、视图、控制器

Spring的模型-视图-控制器(MVC),该框架是围绕一个DispatcherServlet来设计的,这个DispatcherServlet

就是一个我们很熟悉的Servlet,当然这个Servlet,这个Servlet会把请求分发给各个处理器,并支持可配置的处理器映射、视图渲染、本地化、时区与主题渲染等,甚至还能支持文件上传等功能。原理 如下图所示:
在这里插入图片描述
关于上图的一个说明:

1、首先,Http请求:将客户端请求提交到DispatcherServlet这个Servlet。

2、然后,找到处理器:由DispatcherServlet控制器查询出一个或多个HandlerMapping,并且找到处理请求的Controller(控制器类)。

3、然后,调用处理器:DispatcherServlet将请求提交到Controller(控制器类)。

4、5、然后,调用业务处理和返回结果:Controller调用业务逻辑处理后,返回了ModelAndView。

6、7、然后,处理视图映射并返回模型: DispatcherServlet查询到一个或多个ViewResoler视图解析器后,找到ModelAndView指定的视图(页面)。

8、最后,就是Http响应了:视图负责将结果显示到客户端页面上。

mvc注解

在这里插入图片描述

ContextLoaderListener 上下文加载监听监听器

为了更好的理解ContextLoaderListener 在讲ContextLoaderListener之前,首先我们一起来了解一下web.xml的作用。

很多同学可能不知道,其实我们的web项目,不一定需要配置web文件,也就是说这个web.xml 可以不写的。但是大多数配置我们都写在web.xml里面所以就让我们觉得是必须要有的。

一个web中可以没有web.xml文件,也就是说,web.xml文件并不是web工程必须的。web.xml文件是用来初始化配置信息:比如Welcome页面、servlet、servlet-mapping、filter、listener、启动加载级别等。当你的web工程没用到这些时,你可以不用web.xml文件来配置你的Application。

context-param >> listener >> filter >> servlet。(web.xml 加载顺序这个很重要的)

当要启动某个web项目时,服务器软件或容器如(tomcat)会第一步加载项目中的web.xml文件,通过其中的各种配置来启动项目,只有其中配置的各项均无误时,项目才能正确启动。web.xml有多项标签,在其加载的过程中顺序依次为:context-param >> listener >> filter >> servlet。(同类多个节点以出现顺序依次加载)

在这里插入图片描述
在这里插入图片描述

SpringMVC的启动过程

1、ContextLoaderListener 的初始化,实例化IoC容器,并将此容器实例注册到ServletContext中。

2、DispatcherServlet初始化。
在这里插入图片描述
在ContextLoaderListener中关联了ContextLoader这个类,所以整个加载配置过程由ContextLoader来完成。其中ContextLoaderListener监听器它实现了ServletContextListener这个接口,在web.xml配置这个监听器,启动容器时,就会默认执行它实现的方法。

ContextLoaderListener 在web.xml文件中的配置如下:

ServletContextListener 接口有两个方法:contextInitialized,contextDestroyed
DispatcherServlet

Spring MVC框架,与其他很多web的MVC框架一样:请求驱动;所有设计都围绕着一个中央Servlet来展开,它负责把所有请求分发到控制器;同时提供其他web应用开发所需要的功能。不过Spring的中央处理器,DispatcherServlet,能做的比这更多。

下图就给大家展示了Spring Web MVC的DispatcherServlet处理请求的工作流。熟悉设计模式的朋友会发现,DispatcherServlet应用的其实就是一个"前端控制器"的设计模式(其他很多优秀的web框架也都使用了这个设计模式)。

流程图

看完这篇文章,SpringMVC你就懂得差不多了

spring mvc处理请求的流程

在web.xml中的配置

其中

load-on-startup:表示启动容器时初始化该Servlet;

url-pattern:表示哪些请求交给Spring Web MVC处理, “/” 是用来定义默认servlet映射的。也可以如"*.html"表示拦截所有以html为扩展名的请求。

在Spring MVC中,每个DispatcherServlet都持有一个自己的上下文对象WebApplicationContext,它又继承了根(root)WebApplicationContext对象中已经定义的所有bean。这些继承的bean可以在具体的Servlet实例中被重载,在每个Servlet实例中你也可以定义其scope下的新bean。

WebApplicationContext继承自ApplicationContext,它提供了一些web应用经常需要用到的特性。它与普通的ApplicationContext不同的地方在于,它支持主题的解析,并且知道它关联到的是哪个servlet(它持有一个该ServletContext的引用)

看完这篇文章,SpringMVC你就懂得差不多了

DispatcherServlet继承结构

看完这篇文章,SpringMVC你就懂得差不多了

》关注我们请点击这里《

》关注我们请点击这里《

》关注我们请点击这里《

》关注我们请点击这里《

》关注我们请点击这里《

》关注我们请点击这里《

》关注我们请点击这里《

》关注我们请点击这里《

中间我插个广告(小编还是得吃饭,希望大家别喷~谢谢):》关注我的头条号【趣IT生活】《

接下来还是继续讲我们的正事哈。DispatcherServlet继承结构

在我的发布的文章中还讲了很多其他的内容,有SQL语句,SpringAOP ,Spring IoC ,SpringMVC,HTML5,PHP,Spring Jms,线程池,还有MySQL 等等,都是作为开发者必备的东西,希望大家都持续关注,我们会持续的更新更多的优质的内容给大家。衷心的祝福大家在开发者的道路上越走越远,越走越好,达到自己想要的高度。最后祝所有的开发者们,不用多久,你们就会升职加薪、当上总经理、出任CEO、迎娶白富美、走上人生巅峰,想想还有点小激动呢是吧。

DispatcherServlet继承结构

SpringMVC

同时提供了很多特殊的注解,这些注解就是,用于处理请求和渲染视图等用途的。当我们的最终的Servlet 这个DispatcherServlet初始化的过程中会默认使用这些特殊bean进行配置。如果你想指定使用哪个特定的bean,你可以在web应用上下文WebApplicationContext中简单地配置它们。

看完这篇文章,SpringMVC你就懂得差不多了

其中,常用的ViewResolver的配置。我就以jsp作为视图为例

配置bean

配置上传文件限制MultipartResolver

看完这篇文章,SpringMVC你就懂得差不多了

配置bean如下

applicationContext.xml中的标签

看完这篇文章,SpringMVC你就懂得差不多了

控制器(controller)

直接上代码哈 (注解大家要活用哈)

@RequestMapping(path = “/form”, method = RequestMethod.POST)

public String handleFormUpload(@RequestParam(“names”) String names, //(额外说一下,这里names 可以不一样,但是,前面一个nams必须和页面上川传的参数一致。)

页面中使用表单(form)

文件上传基本上每个项目都会用到吧,我还是说说,

使用文件上传(file upload)

之前,我们在前面说到过一个DispatcherServlet中有个特殊的Bean叫MultipartResolver,这个bean它是可用于限制文件的上传大小等的。那么我们在当解析器MultipartResolver完成处理时,请求时候便会像其他请求一样被正常流程处理了。

怎样的异常处理

先来说下常见的异常处理有几种方式,如下图:

看完这篇文章,SpringMVC你就懂得差不多了

Spring当中的处理器,异常解析器HandlerExceptionResolver接口的实现负责处理各类控制器执行过程中出现的异常。也是上面提到的,是DispatcherServlet中的特殊bean,我们是可以自定义配置处理的。

当然在某种程度上来讲的话,

HandlerExceptionResolver与你在web应用描述符web.xml文件中能定义的异常映射(exception mapping) 是很很相像的哈,

但是不过它比后者提供了更灵活的方式一些。就比如说吧,比如它能提供异常被抛出时正在执行的是哪个处理器这样的信息。

HandlerExceptionResolver 提供 resolveException 的接口

public interface HandlerExceptionResolver {

在BaseController中使用 @ExceptionHandler注解来处理异常

@ExceptionHandler(Exception.class)

public Object exceptionHandler(Exception ex, HttpServletResponse response,

在web.xml中处理异常情况

看完这篇文章,SpringMVC你就懂得差不多了

这里来了一个问题, 来一个问题:就是HandlerExceptionResolver和web.xml中配置的error-page他们会有冲突吗?

The answer:如果resolveException异常返回了ModelAndView的话,那就会优先根据返回值中的页面来显示的。但是,不过,resolveException可以返回null,此时则展示web.xml中的error-page的500状态码配置的页面。

那么。。,当web.xml中有相应的error-page配置,那么我们这时候就可以在实现resolveException方法的时候返回null了。

在官方的API文档中对返回值的是这样解释的:

return a corresponding ModelAndView to forward to, or null for default processing.

At Last
在下篇文章中我将会写关于Spring AOP的内容,也是同样以思维导图的方式来编写的。用可视化的学习,让java不再难懂。多看,多记,你就是Java 大牛。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值