SpringMVC的执行流程

前言

当你知道springMVC的执行流程的时候,会达到是事半功倍的学习效果。

SpringMVC执行流程

  • 首先明确:SpringMVC的执行过程就是:客户端或者浏览器发送请求到后端服务器,后端服务器会找到对应的方法执行相应的方法,这之间的复杂的过程就是SpringMVC执行流程的核心。
    注意:这里的方法就是控制层(controller类中的的方法,同时这个方法在底层就是handler中的handlerMethod)。hander就是SpringMVC执行流程的主角之一。

  • 客户端发送的请求到后端服务器,后端服务器首先会做什么呢?
    我们都知道springMVC框架是为了搭建javaWeb项目使用的框架工具。所以说后端服务器接收到请求之后就和javaweb执行流程一样。如下图:
    在这里插入图片描述

  • 那有一个问题:SpringMVC框架体现在哪呢????
    其实SpringMVC框架就体现在对以前的Servlet类进行包装,包装之后就成了SpringMVC核心代码了,这个代码就是DispatcherServlet类了

  • 现在我们重点放在DispatcherServlet类中,因为SpringMVC的执行流程就在其中。
    说到DispatcherServlet你应该要想到JavaWeb中的servlet类,并且知道Servlet类中对主要的方法:service()。
    我们先来看DispatcherServlet的继承结构图。
    在这里插入图片描述
    主要看蓝色箭头:
    在这里插入图片描述
    Servlet(接口)→HttpServlet → HttpServletBean→FrameworkServlet→DispatcherServlet
    在这里插入图片描述
    假如前端发送了一个GET请求,在HttpServlet 中会判断请求方式,而HttpServletBean、FrameworkServlet这两个类做的是一些初始化工作,最终还是执行DispatcherServlet类中的方法。

  • 我们都知道所有servlet中都有着一个最主要的方法:service()。在DispatcherServlet最主要的方法就是doservice()方法。
    在这个方法中所干的事情先做个总结在看源代码,主要是做两件事:
    1、设置参数,比如:设置应用上下文、字符编码、样式等等
    2、调用处理请求的核心方法doDispatch(request, response);

    //获取请求,设置一些request的参数,然后分发给doDispatch
	@Override
	protected void doService(HttpServletRequest request, HttpServletResponse response) throws Exception {
   
		if (logger.isDebugEnabled()) {
   
			String resumed = WebAsyncUtils.getAsyncManager(request).hasConcurrentResult() ? " resumed" : "";
			logger.debug("DispatcherServlet with name '" + getServletName() + "'" + resumed +
					" processing " + request.getMethod() + " request for [" + getRequestUri(request) + "]");
		}
 
		// Keep a snapshot of the request attributes in case of an include,
		// to be able to restore the original attributes after the include.
		Map<String, Object> attributesSnapshot = null;
		if (WebUtils.isIncludeRequest(request)) {
   
			attributesSnapshot = new HashMap<String, Object>
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值