成都网站建设设计

将想法与焦点和您一起共享

深入浅析SpringMVC的原理-创新互联

本篇文章给大家分享的是有关深入浅析SpringMVC的原理,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

创新互联公司服务项目包括阆中网站建设、阆中网站制作、阆中网页制作以及阆中网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,阆中网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到阆中省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

我们都知道前端调用后端接口时,都会通过Servlet进行转发,而Servlet的声明周期包含下面四个阶段:

实例化(new)

初始化(init)

执行(service调用doGet/doPost)

销毁(destroy)

前两个阶段在Spring启动阶段就做好了(init根据配置可能是第一次请求时才会调用),销毁是服务关闭的时候进行,本文主要分析的就是请求执行阶段。我们知道SpringMVC的核心就是DispatcherServlet,该类是对Servlet的扩展,所以直接从该类的service方法开始,但在此类中没有service方法,那肯定是在其父类中,我们先来看看其继承体系:

深入浅析SpringMVC的原理

逐个往上找,在FrameworkServlet方法中就有一个service方法:

 protected void service(HttpServletRequest request, HttpServletResponse response)
 throws ServletException, IOException {

 HttpMethod httpMethod = HttpMethod.resolve(request.getMethod());
 if (httpMethod == HttpMethod.PATCH || httpMethod == null) {
 processRequest(request, response);
 }
 else {
 super.service(request, response);
 }
 }

 protected void service(HttpServletRequest req, HttpServletResponse resp)
  throws ServletException, IOException
 {
  String method = req.getMethod();

  if (method.equals(METHOD_GET)) {
   long lastModified = getLastModified(req);
   if (lastModified == -1) {
    doGet(req, resp);
   } else {
    long ifModifiedSince = req.getDateHeader(HEADER_IFMODSINCE);
    if (ifModifiedSince < lastModified) {
     maybeSetLastModified(resp, lastModified);
     doGet(req, resp);
    } else {
     resp.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
    }
   }

  } else if (method.equals(METHOD_HEAD)) {
   long lastModified = getLastModified(req);
   maybeSetLastModified(resp, lastModified);
   doHead(req, resp);
  } else if (method.equals(METHOD_POST)) {
   doPost(req, resp);
  } else if (method.equals(METHOD_PUT)) {
   doPut(req, resp);
  } else if (method.equals(METHOD_DELETE)) {
   doDelete(req, resp);
  } else if (method.equals(METHOD_OPTIONS)) {
   doOptions(req,resp);
  } else if (method.equals(METHOD_TRACE)) {
   doTrace(req,resp);
  } else {
   String errMsg = lStrings.getString("http.method_not_implemented");
   Object[] errArgs = new Object[1];
   errArgs[0] = method;
   errMsg = MessageFormat.format(errMsg, errArgs);
   
   resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED, errMsg);
  }
 }

文章名称:深入浅析SpringMVC的原理-创新互联
标题路径:http://chengdu.cdxwcx.cn/article/cesgps.html