大家好,Spring MVC整体结构介绍,图片、文字+代码;相信很多的网友都不是很明白,包括也是一样,不过没有关系,接下来就来为大家分享关于Spring MVC整体结构介绍,图片、文字+代码;和的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!
Servlet容器
Servlet 用于从Socket 接收数据并将其处理为标准的ServletRequest 和ServletResponse。其内部逻辑比较复杂。我在其他关于Tomcat容器的系列文章中详细介绍了Tomcat的结构。这里我简单的列出它的功能:
接收套接字请求,可以是同步或异步、阻塞或非阻塞。处理请求中的协议,如Http协议等,将请求路由到对应的servlt实例。
核心组件DispatcherServlet
Spring MVC的核心组件是DispatcherServlet,它是SpringWeb请求的调度中心。其主要功能如下:
Spring容器启动阶段读取RequestMapping等映射规则;当请求到来时,根据加载的请求映射规则找到合适的处理方法;当处理请求过程中出现异常时,对异常进行处理,例如返回适当的接口或者状态码;解析返回View的主题、时区等信息;渲染返回的视图。
请求映射HandlerMapping
请求映射用于根据请求查找所有需要调用的方法,包括过滤器和处理方法。更常用的请求映射之一是RequestMappingHandlerMapping。从名字就可以看出,这个HandlerMapping是一个用来处理@RequestMapping注解请求映射的类。该类的工作原理如下。可以看到,这个类的主要作用就是在收到请求后,获取所有需要按顺序调用的方法(主要包括拦截器和处理方法),然后一一调用这些方法。
拦截器HandlerInterceptor
拦截器有点类似于Tomcat容器中的Valve。 Spring的拦截器允许用户灵活定制用户权限验证、请求处理前、请求处理后、请求完成后三个阶段的操作。我们可以在上一节的图中看到拦截器的作用。 Spring对于拦截器的接口定义如下:
public interface HandlerInterceptor { default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { return true; } } 默认void postHandle(HttpServletRequest 请求,HttpServletResponse 响应,对象处理程序,@Nullable ModelAndView modelAndView) 抛出异常{ } 默认void afterCompletion( HttpServletRequest 请求,HttpServletResponse 响应,对象处理程序,@Nullable Exception ex) 抛出异常{ }}
处理方法Handler
在DispatcherServlet中将处理方法定义为Object类型。如果我们根据请求使用@RequestMapping来查找处理方法,那么找到的处理方法就是HandlerMethod类型,它对应的是添加到Controller中的RequestMapping对应的方法。
处理方法适配器HandlerAdapter
DispatcherServlet从HandlerMapping获取的处理方法是Object类型,这意味着不同的处理方法可能返回不同的对象。 DispatcherServlet本身就是一个调度器,不应该关注如何调用不同的处理方法,因此Spring提供了HandlerAdapter List用户处理不同的调度方法。
//处理方法适配器接口定义public interface HandlerAdapter { booleansupports(Object handler); @Nullable ModelAndView 句柄(HttpServletRequest 请求、HttpServletResponse 响应、对象处理程序)抛出异常; long getLastModified(HttpServletRequest 请求,对象处理程序);}
异常处理HandlerExceptionResolver
HandlerExceptionResolver用于处理请求过程中发生的异常。其实类型有很多种,但是我们日常开发中用的比较多的是ExceptionHandlerExceptionResolver,它就是处理我们定义的@ExceptionHandler注解。 @ExceptionHander的典型用法如下。 @ExceptionHander也可以放在用@ControllerAdvice注解的类中,这意味着它会对所有Controller生效。
原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/118533.html
用户评论
千城暮雪
终于找到一篇讲解Spring MVC架构这么清楚的文章了!图解太棒了,一下子就看懂了DispatcherServlet、HandlerMapping的职责。另外,代码示例也很实用,我打算改天试试用它来实现一个简单的网站。
有9位网友表示赞同!
强辩
看完这篇文章,对Spring MVC的整体结构有了更深入的理解。作者把复杂的概念解释得通俗易懂,而且图文结合很有帮助!建议可以再详细一些HandlerInterceptor的细节,这样会更全面些
有14位网友表示赞同!
風景綫つ
Spring MVC确实强大,功能很多样,但感觉学习起来还是比较不容易。 这种图文并茂的方式讲解蛮好的,比死记硬背公式要有效得多。我希望能有更多类似的文章介绍深入的MVC应用,比如异步请求处理等等。
有7位网友表示赞同!
棃海
作者这篇文章写得好!把Spring MVC的关键要素都清晰地列出来了,而且提供了完整的代码示例,非常适合像我这种没有开发经验的小白学习。建议可以添加一个视频演示,这样更直观些
有18位网友表示赞同!
忘故
图文并茂挺好的,但感觉代码部分写的有点简略,有些细节没描述清楚。我觉得对于初学者来说,还需要提供更详细的注释和解释,以便更好地理解代码逻辑。
有16位网友表示赞同!
把孤独喂饱
Spring MVC用起来确实方便,而且文档也比较完善,这篇文章总结得不错,但可能对已经很熟悉框架的人来说没什么新意吧.
有19位网友表示赞同!
败类
我之前想学习 Spring MVC 但一直没找到靠谱的资源,这本书写的太深了,这篇文章正好适合我!图文结合很好理解 ,代码示例也很实用。感觉现在终于可以开始项目开发了!
有12位网友表示赞同!
▼遗忘那段似水年华
文章不错啊,就是希望作者能把那些概念图解释得更详细一点,比如 HandlerMapping 的实现原理等等,这样对理解框架的结构更有帮助。
有18位网友表示赞同!
七级床震
这篇文章给我一个很大启发,原来Spring MVC设计的这么有逻辑,难怪它这么流行!我觉得图文并茂的方式的确非常有效,我之前学习其他技术的时候也遇到这种困难。
有10位网友表示赞同!
致命伤
文章写的不错,但是代码例子里面有一些地方写的比较简陋,建议作者可以加上更复杂的代码场景示范,这样能更好的帮助读者理解Spring MVC的应用情况。
有5位网友表示赞同!
孤廖
Spring 这块我一直没上手,这篇图文分析太棒了!一下子就明白了 DispatcherServlet 的作用和HandlerMapping如何匹配请求。我准备以后多练习下
有15位网友表示赞同!
莫失莫忘
对Javaweb开发一直有兴趣,现在终于找到了一个学习Spring MVC的好资源。希望作者能陆续更新一些更深入的教程,比如Controller、Service层的设计等等。
有14位网友表示赞同!
颓废i
Spring MVC真的太强大了吧!感觉这个框架应用场景非常广泛。这篇图文讲解的非常到位,我需要好好学习一下!
有17位网友表示赞同!
拽年很骚
文章写的很不错,把Spring MVC的各个部分都解释得很清晰,特别是代码示例,真的很实用!我已经迫不及待想用它来实现一个项目了!
有11位网友表示赞同!
莫名的青春
我一直觉得图解比文字描述更直观更容易理解,这篇的文章把 Spring MVC 的结构画得非常清晰,对于初学者来说帮助很大!
有10位网友表示赞同!
羁绊你
感觉Spring MVC学习曲线还是比较陡峭的,希望能有更多实战案例来加强理解。 文章里提供的代码示例确实不错,但能不能再丰富一些场景?
有7位网友表示赞同!
神经兮兮°
这篇文章让我对 Spring MVC 有了一个更清晰的概念和架构图解非常直观!希望后期能更新一些更深入的教程,比如如何处理异常、事务 management 等
有14位网友表示赞同!