前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring MVC 整体介绍

Spring MVC 整体介绍

作者头像
邹志全
发布2019-10-08 16:17:48
3780
发布2019-10-08 16:17:48
举报

Spring MVC 是以servlet 为核心进行实现的,统一入口进入拿到请求后,做一次路由,找到对应的controller及对应的RequestMapping,完成逻辑的后,返回对应的视图或者数据元,如果是顺道完成视图的解析,返回对应html,完成响应。

开发步骤:

1、建立Spring 工程,引入对应Spring MVC 所需要的Jar。

2、创建web.xml 文件,指定dispacherServlet,然后指定拦截的请求规则,比如说 *.do,再配置对应的listener,还有spring 依赖的bean的配置文件

3、创建springMVC-servlet.xml 类似于这样的一个配置文件,设置启用注解,设置对应扫描的包,然后指定页面存在的位置,指定前缀后缀什么

4、在对应目录下创建一个controller 类,并指定对应注解,创建对应RequestMapping 注解的函数,设置URI。

5、编写对应逻辑。

6、部署&运行

内部处理流程:

1、dispacher Servlet 拦截到外部所有的请求

2、根据HandlerMapping找到对应的Handler,并将一堆拦截器和Handler封装至HandlerExecutionChain

3、带着Handler 找到对应的HandlerAdapter,完成对应的逻辑处理。

4、带着具体的Model&View返回

5、首先通过ViewResolver对于视图进行解析,并完成 对应的视图渲染,反馈给Dispacher Servlet。

6、最后dispacher Servlet 完成响应

image.png

这就是Spring MVC 中的一个简要流程。

这里的Handler 是需要我们手动实现逻辑的,也就具体的controller、然后ModleAndView 也是我们开发中所接触的ModelAndView,具体的渲染和解析的过程其实就是将对应视图变为前端可识别HTML 文档的形式,过程中将对应的对象信息解析进去就OK了。

具体的看后续操作~

这里介绍的主要是核心的分发器dispacherServlet,在说之前先来看一看常规的servlet。

public interface Servlet {

void init(ServletConfig var1) throws ServletException;

ServletConfig getServletConfig();

void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;

String getServletInfo();

void destroy();

}

sevlet 是Java 在Java web开发中定义的一个规范,任何一个可以处理外部用户请求的应用组件都需要实现这个接口(即作为一种servlet 存在)。

public abstract class GenericServlet implements Servlet, ServletConfig, Serializable {

这是GenericServlet,一种servlet的通用实现,提供了servlet应该有的基础功能。

我们常用的是HTTP servlet,一种基于HTTP协议对于GenericServlet实现的Servlet,能够对于外部HTTP请求进行对应的处理并且完成对应的响应。并且针对各种HTTP 请求原语实现了对应的处理方法(具体来说是要求使用者自己必须实现)

DispacherServlet 就是一种HTTP servlet ,它实现了对于所有符合规则的的HTTP请求进行拦截,并对具有handler的请求完成具体的逻辑。

Spring MVC 中 DispacherServlet的核心初始化函数是这一个:

protected void initStrategies(ApplicationContext context) {

this.initMultipartResolver(context);//初始化多部请求解析器,没有默认的实现

this.initLocaleResolver(context);//初始化地域解析器,默认实现是AcceptHeaderLocaleResolver  

this.initThemeResolver(context); //初始化主题解析器,默认实现是FixedThemeResolver  

this.initHandlerMappings(context);//初始化处理器映射,这是个集合, 默认实现是BeanNameUrlHandlerMapping和DefaultAnnotationHandlerMapping   

this.initHandlerAdapters(context);//初始化处理器适配器,这是个集合,默认实现是HttpRequestHandlerAdapter,SimpleControllerHandlerAdapter和AnnotationMethodHandlerAdapter  

//初始化处理器异常解析器,这是个集合,默认实现是AnnotationMethodHandlerExceptionResolver,ResponseStatusExceptionResolver和DefaultHandlerExceptionResolver

this.initHandlerExceptionResolvers(context);

this.initRequestToViewNameTranslator(context);//初始化请求到视图名解析器,默认实现是DefaultRequestToViewNameTranslator

this.initViewResolvers(context);//初始化视图解析器,这是个集合,默认实现是InternalResourceViewResolver    

this.initFlashMapManager(context);

}

通过ApplicationContext完成对应初始化,对应的调用关系可以搜一下对应DispacherServlet 然后找到对应函数 alt + F7 查看就OK了

初始化关系大体过程是这样的,到这里大体能清除整个的层级关系就好:

1、首先初始化GenericServlet

2、HttpServletBean的初始化

3、FrameworkServlet 初始化

4、完成最终DispacherServlet 初始化

Spring MVC 最核心的差不多就这么多东西,更细节的东西需要亲自动手去翻看源码~

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.10.03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档