Browse Source

Site updated: 2023-09-05 17:31:03

master
nicksxs 2 years ago
parent
commit
a7c7aa4f92
33 changed files with 10866 additions and 10865 deletions
  1. +1
    -1
      2019/12/26/redis数据结构介绍/index.html
  2. +1
    -1
      2020/01/04/redis数据结构介绍二/index.html
  3. +1
    -1
      2020/01/10/redis数据结构介绍三/index.html
  4. +1
    -1
      2020/01/19/redis数据结构介绍四/index.html
  5. +1
    -1
      2020/01/20/redis数据结构介绍五/index.html
  6. +1
    -1
      2020/01/22/redis数据结构介绍六/index.html
  7. +1
    -1
      2020/04/12/redis系列介绍七/index.html
  8. +1
    -1
      2020/04/18/redis系列介绍八/index.html
  9. +1
    -1
      2020/04/26/聊聊-mysql-的-MVCC/index.html
  10. +1
    -1
      2020/05/02/聊聊-mysql-的-MVCC-续篇/index.html
  11. +1
    -1
      2020/05/10/聊聊-mysql-的-MVCC-续续篇之加锁分析/index.html
  12. +1
    -1
      2020/08/06/Linux-下-grep-命令的一点小技巧/index.html
  13. +1
    -1
      2020/09/06/mybatis-的-和-是有啥区别/index.html
  14. +1
    -1
      2020/10/03/mybatis-的缓存是怎么回事/index.html
  15. +2
    -2
      2023/08/20/springboot-web-server-启动逻辑/index.html
  16. +14
    -14
      2023/08/27/springboot-请求响应处理流程/index.html
  17. +4
    -4
      atom.xml
  18. +36
    -36
      baidusitemap.xml
  19. +16
    -16
      index.html
  20. +1
    -0
      leancloud.memo
  21. +1
    -1
      leancloud_counter_security_urls.json
  22. +1
    -1
      page/32/index.html
  23. +1
    -1
      page/33/index.html
  24. +1
    -1
      page/34/index.html
  25. +1
    -1
      page/36/index.html
  26. +4
    -4
      page/37/index.html
  27. +1
    -1
      page/39/index.html
  28. +5
    -5
      page/40/index.html
  29. +9966
    -9966
      search.xml
  30. +795
    -795
      sitemap.xml
  31. +1
    -1
      tags/Dubbo/index.html
  32. +1
    -1
      tags/Windows/index.html
  33. +1
    -1
      tags/java/page/3/index.html

+ 1
- 1
2019/12/26/redis数据结构介绍/index.html
File diff suppressed because it is too large
View File


+ 1
- 1
2020/01/04/redis数据结构介绍二/index.html
File diff suppressed because it is too large
View File


+ 1
- 1
2020/01/10/redis数据结构介绍三/index.html
File diff suppressed because it is too large
View File


+ 1
- 1
2020/01/19/redis数据结构介绍四/index.html
File diff suppressed because it is too large
View File


+ 1
- 1
2020/01/20/redis数据结构介绍五/index.html
File diff suppressed because it is too large
View File


+ 1
- 1
2020/01/22/redis数据结构介绍六/index.html
File diff suppressed because it is too large
View File


+ 1
- 1
2020/04/12/redis系列介绍七/index.html
File diff suppressed because it is too large
View File


+ 1
- 1
2020/04/18/redis系列介绍八/index.html
File diff suppressed because it is too large
View File


+ 1
- 1
2020/04/26/聊聊-mysql-的-MVCC/index.html
File diff suppressed because it is too large
View File


+ 1
- 1
2020/05/02/聊聊-mysql-的-MVCC-续篇/index.html
File diff suppressed because it is too large
View File


+ 1
- 1
2020/05/10/聊聊-mysql-的-MVCC-续续篇之加锁分析/index.html
File diff suppressed because it is too large
View File


+ 1
- 1
2020/08/06/Linux-下-grep-命令的一点小技巧/index.html
File diff suppressed because it is too large
View File


+ 1
- 1
2020/09/06/mybatis-的-和-是有啥区别/index.html
File diff suppressed because it is too large
View File


+ 1
- 1
2020/10/03/mybatis-的缓存是怎么回事/index.html
File diff suppressed because it is too large
View File


+ 2
- 2
2023/08/20/springboot-web-server-启动逻辑/index.html
File diff suppressed because it is too large
View File


+ 14
- 14
2023/08/27/springboot-请求响应处理流程/index.html
File diff suppressed because it is too large
View File


+ 4
- 4
atom.xml View File

@ -51,14 +51,14 @@
<link href="https://nicksxs.me/2023/08/27/springboot-%E8%AF%B7%E6%B1%82%E5%93%8D%E5%BA%94%E5%A4%84%E7%90%86%E6%B5%81%E7%A8%8B/"/> <link href="https://nicksxs.me/2023/08/27/springboot-%E8%AF%B7%E6%B1%82%E5%93%8D%E5%BA%94%E5%A4%84%E7%90%86%E6%B5%81%E7%A8%8B/"/>
<id>https://nicksxs.me/2023/08/27/springboot-%E8%AF%B7%E6%B1%82%E5%93%8D%E5%BA%94%E5%A4%84%E7%90%86%E6%B5%81%E7%A8%8B/</id> <id>https://nicksxs.me/2023/08/27/springboot-%E8%AF%B7%E6%B1%82%E5%93%8D%E5%BA%94%E5%A4%84%E7%90%86%E6%B5%81%E7%A8%8B/</id>
<published>2023-08-27T14:47:19.000Z</published> <published>2023-08-27T14:47:19.000Z</published>
<updated>2023-08-27T14:47:19.154Z</updated>
<updated>2023-09-05T09:19:33.385Z</updated>
<summary type="html">&lt;p&gt;Tomcat 会把请求委托到&lt;code&gt;org.springframework.web.servlet.DispatcherServlet#doService&lt;/code&gt;&lt;/p&gt;
<summary type="html">&lt;p&gt;Tomcat 会把请求委托到&lt;br&gt;&lt;code&gt;org.springframework.web.servlet.DispatcherServlet#doService&lt;/code&gt; &lt;/p&gt;
&lt;pre class=&quot;line-numbers language-java&quot;</summary> &lt;pre class=&quot;line-numbers language-java&quot;</summary>
@ -81,14 +81,14 @@
<link href="https://nicksxs.me/2023/08/20/springboot-web-server-%E5%90%AF%E5%8A%A8%E9%80%BB%E8%BE%91/"/> <link href="https://nicksxs.me/2023/08/20/springboot-web-server-%E5%90%AF%E5%8A%A8%E9%80%BB%E8%BE%91/"/>
<id>https://nicksxs.me/2023/08/20/springboot-web-server-%E5%90%AF%E5%8A%A8%E9%80%BB%E8%BE%91/</id> <id>https://nicksxs.me/2023/08/20/springboot-web-server-%E5%90%AF%E5%8A%A8%E9%80%BB%E8%BE%91/</id>
<published>2023-08-20T09:38:56.000Z</published> <published>2023-08-20T09:38:56.000Z</published>
<updated>2023-08-27T14:47:08.297Z</updated>
<updated>2023-09-05T09:27:00.552Z</updated>
<summary type="html">&lt;p&gt;springboot 的一个方便之处就是集成了 web server 进去,接着上一篇继续来看下这个 web server 的启动过程&lt;br&gt;基于 springboot 的 2.2.9.RELEASE 版本&lt;br&gt;整个 springboot 体系主体就是看</summary>
<summary type="html">&lt;p&gt;springboot 的一个方便之处就是集成了 web server 进去,接着上一篇继续来看下这个 web server 的启动过程&lt;br&gt;这边是基于 springboot 的 2.2.9.RELEASE 版本,整个 springboot</summary>


+ 36
- 36
baidusitemap.xml View File

@ -1,16 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url> <url>
<loc>https://nicksxs.me/2023/09/03/springboot-%E5%A4%84%E7%90%86%E8%AF%B7%E6%B1%82%E7%9A%84%E5%B0%8F%E5%88%86%E6%94%AF-%E8%B7%B3%E8%BD%AC-cookie/</loc>
<lastmod>2023-09-03</lastmod>
<loc>https://nicksxs.me/2023/08/20/springboot-web-server-%E5%90%AF%E5%8A%A8%E9%80%BB%E8%BE%91/</loc>
<lastmod>2023-09-05</lastmod>
</url> </url>
<url> <url>
<loc>https://nicksxs.me/2023/08/27/springboot-%E8%AF%B7%E6%B1%82%E5%93%8D%E5%BA%94%E5%A4%84%E7%90%86%E6%B5%81%E7%A8%8B/</loc> <loc>https://nicksxs.me/2023/08/27/springboot-%E8%AF%B7%E6%B1%82%E5%93%8D%E5%BA%94%E5%A4%84%E7%90%86%E6%B5%81%E7%A8%8B/</loc>
<lastmod>2023-08-27</lastmod>
<lastmod>2023-09-05</lastmod>
</url> </url>
<url> <url>
<loc>https://nicksxs.me/2023/08/20/springboot-web-server-%E5%90%AF%E5%8A%A8%E9%80%BB%E8%BE%91/</loc>
<lastmod>2023-08-27</lastmod>
<loc>https://nicksxs.me/2023/09/03/springboot-%E5%A4%84%E7%90%86%E8%AF%B7%E6%B1%82%E7%9A%84%E5%B0%8F%E5%88%86%E6%94%AF-%E8%B7%B3%E8%BD%AC-cookie/</loc>
<lastmod>2023-09-03</lastmod>
</url> </url>
<url> <url>
<loc>https://nicksxs.me/2023/08/13/springboot-mappings-%E6%B3%A8%E5%86%8C%E9%80%BB%E8%BE%91/</loc> <loc>https://nicksxs.me/2023/08/13/springboot-mappings-%E6%B3%A8%E5%86%8C%E9%80%BB%E8%BE%91/</loc>
@ -276,20 +276,16 @@
<loc>https://nicksxs.me/2022/06/19/Leetcode-698-%E5%88%92%E5%88%86%E4%B8%BAk%E4%B8%AA%E7%9B%B8%E7%AD%89%E7%9A%84%E5%AD%90%E9%9B%86-Partition-to-K-Equal-Sum-Subsets-Medium-%E9%A2%98%E8%A7%A3%E5%88%86%E6%9E%90/</loc> <loc>https://nicksxs.me/2022/06/19/Leetcode-698-%E5%88%92%E5%88%86%E4%B8%BAk%E4%B8%AA%E7%9B%B8%E7%AD%89%E7%9A%84%E5%AD%90%E9%9B%86-Partition-to-K-Equal-Sum-Subsets-Medium-%E9%A2%98%E8%A7%A3%E5%88%86%E6%9E%90/</loc>
<lastmod>2022-06-19</lastmod> <lastmod>2022-06-19</lastmod>
</url> </url>
<url>
<loc>https://nicksxs.me/2021/03/31/2020-%E5%B9%B4%E7%BB%88%E6%80%BB%E7%BB%93/</loc>
<lastmod>2022-06-11</lastmod>
</url>
<url> <url>
<loc>https://nicksxs.me/2021/02/21/AQS-%E4%B9%8B-Condition-%E6%B5%85%E6%9E%90%E7%AC%94%E8%AE%B0/</loc> <loc>https://nicksxs.me/2021/02/21/AQS-%E4%B9%8B-Condition-%E6%B5%85%E6%9E%90%E7%AC%94%E8%AE%B0/</loc>
<lastmod>2022-06-11</lastmod> <lastmod>2022-06-11</lastmod>
</url> </url>
<url> <url>
<loc>https://nicksxs.me/2022/02/13/Disruptor-%E7%B3%BB%E5%88%97%E4%B8%80/</loc>
<loc>https://nicksxs.me/2022/02/27/Disruptor-%E7%B3%BB%E5%88%97%E4%BA%8C/</loc>
<lastmod>2022-06-11</lastmod> <lastmod>2022-06-11</lastmod>
</url> </url>
<url> <url>
<loc>https://nicksxs.me/2022/02/27/Disruptor-%E7%B3%BB%E5%88%97%E4%BA%8C/</loc>
<loc>https://nicksxs.me/2022/02/13/Disruptor-%E7%B3%BB%E5%88%97%E4%B8%80/</loc>
<lastmod>2022-06-11</lastmod> <lastmod>2022-06-11</lastmod>
</url> </url>
<url> <url>
@ -309,17 +305,21 @@
<lastmod>2022-06-11</lastmod> <lastmod>2022-06-11</lastmod>
</url> </url>
<url> <url>
<loc>https://nicksxs.me/2022/03/13/Leetcode-83-%E5%88%A0%E9%99%A4%E6%8E%92%E5%BA%8F%E9%93%BE%E8%A1%A8%E4%B8%AD%E7%9A%84%E9%87%8D%E5%A4%8D%E5%85%83%E7%B4%A0-Remove-Duplicates-from-Sorted-List-Easy-%E9%A2%98%E8%A7%A3%E5%88%86%E6%9E%90/</loc>
<loc>https://nicksxs.me/2021/05/01/Leetcode-48-%E6%97%8B%E8%BD%AC%E5%9B%BE%E5%83%8F-Rotate-Image-%E9%A2%98%E8%A7%A3%E5%88%86%E6%9E%90/</loc>
<lastmod>2022-06-11</lastmod> <lastmod>2022-06-11</lastmod>
</url> </url>
<url> <url>
<loc>https://nicksxs.me/2021/05/01/Leetcode-48-%E6%97%8B%E8%BD%AC%E5%9B%BE%E5%83%8F-Rotate-Image-%E9%A2%98%E8%A7%A3%E5%88%86%E6%9E%90/</loc>
<loc>https://nicksxs.me/2022/03/13/Leetcode-83-%E5%88%A0%E9%99%A4%E6%8E%92%E5%BA%8F%E9%93%BE%E8%A1%A8%E4%B8%AD%E7%9A%84%E9%87%8D%E5%A4%8D%E5%85%83%E7%B4%A0-Remove-Duplicates-from-Sorted-List-Easy-%E9%A2%98%E8%A7%A3%E5%88%86%E6%9E%90/</loc>
<lastmod>2022-06-11</lastmod> <lastmod>2022-06-11</lastmod>
</url> </url>
<url> <url>
<loc>https://nicksxs.me/2020/08/06/Linux-%E4%B8%8B-grep-%E5%91%BD%E4%BB%A4%E7%9A%84%E4%B8%80%E7%82%B9%E5%B0%8F%E6%8A%80%E5%B7%A7/</loc> <loc>https://nicksxs.me/2020/08/06/Linux-%E4%B8%8B-grep-%E5%91%BD%E4%BB%A4%E7%9A%84%E4%B8%80%E7%82%B9%E5%B0%8F%E6%8A%80%E5%B7%A7/</loc>
<lastmod>2022-06-11</lastmod> <lastmod>2022-06-11</lastmod>
</url> </url>
<url>
<loc>https://nicksxs.me/2021/03/31/2020-%E5%B9%B4%E7%BB%88%E6%80%BB%E7%BB%93/</loc>
<lastmod>2022-06-11</lastmod>
</url>
<url> <url>
<loc>https://nicksxs.me/2020/09/06/mybatis-%E7%9A%84-%E5%92%8C-%E6%98%AF%E6%9C%89%E5%95%A5%E5%8C%BA%E5%88%AB/</loc> <loc>https://nicksxs.me/2020/09/06/mybatis-%E7%9A%84-%E5%92%8C-%E6%98%AF%E6%9C%89%E5%95%A5%E5%8C%BA%E5%88%AB/</loc>
<lastmod>2022-06-11</lastmod> <lastmod>2022-06-11</lastmod>
@ -372,16 +372,12 @@
<loc>https://nicksxs.me/2021/10/17/%E8%81%8A%E4%B8%80%E4%B8%8B-RocketMQ-%E7%9A%84%E6%B6%88%E6%81%AF%E5%AD%98%E5%82%A8%E5%9B%9B/</loc> <loc>https://nicksxs.me/2021/10/17/%E8%81%8A%E4%B8%80%E4%B8%8B-RocketMQ-%E7%9A%84%E6%B6%88%E6%81%AF%E5%AD%98%E5%82%A8%E5%9B%9B/</loc>
<lastmod>2022-06-11</lastmod> <lastmod>2022-06-11</lastmod>
</url> </url>
<url>
<loc>https://nicksxs.me/2021/09/19/%E8%81%8A%E4%B8%80%E4%B8%8B-SpringBoot-%E4%B8%AD%E4%BD%BF%E7%94%A8%E7%9A%84-cglib-%E4%BD%9C%E4%B8%BA%E5%8A%A8%E6%80%81%E4%BB%A3%E7%90%86%E4%B8%AD%E7%9A%84%E4%B8%80%E4%B8%AA%E6%B3%A8%E6%84%8F%E7%82%B9/</loc>
<lastmod>2022-06-11</lastmod>
</url>
<url> <url>
<loc>https://nicksxs.me/2021/09/26/%E8%81%8A%E4%B8%80%E4%B8%8B-SpringBoot-%E4%B8%AD%E5%8A%A8%E6%80%81%E5%88%87%E6%8D%A2%E6%95%B0%E6%8D%AE%E6%BA%90%E7%9A%84%E6%96%B9%E6%B3%95/</loc> <loc>https://nicksxs.me/2021/09/26/%E8%81%8A%E4%B8%80%E4%B8%8B-SpringBoot-%E4%B8%AD%E5%8A%A8%E6%80%81%E5%88%87%E6%8D%A2%E6%95%B0%E6%8D%AE%E6%BA%90%E7%9A%84%E6%96%B9%E6%B3%95/</loc>
<lastmod>2022-06-11</lastmod> <lastmod>2022-06-11</lastmod>
</url> </url>
<url> <url>
<loc>https://nicksxs.me/2020/11/22/%E8%81%8A%E8%81%8A-Dubbo-%E7%9A%84%E5%AE%B9%E9%94%99%E6%9C%BA%E5%88%B6/</loc>
<loc>https://nicksxs.me/2021/09/19/%E8%81%8A%E4%B8%80%E4%B8%8B-SpringBoot-%E4%B8%AD%E4%BD%BF%E7%94%A8%E7%9A%84-cglib-%E4%BD%9C%E4%B8%BA%E5%8A%A8%E6%80%81%E4%BB%A3%E7%90%86%E4%B8%AD%E7%9A%84%E4%B8%80%E4%B8%AA%E6%B3%A8%E6%84%8F%E7%82%B9/</loc>
<lastmod>2022-06-11</lastmod> <lastmod>2022-06-11</lastmod>
</url> </url>
<url> <url>
@ -389,11 +385,7 @@
<lastmod>2022-06-11</lastmod> <lastmod>2022-06-11</lastmod>
</url> </url>
<url> <url>
<loc>https://nicksxs.me/2021/06/13/%E8%81%8A%E8%81%8A-Java-%E7%9A%84%E7%B1%BB%E5%8A%A0%E8%BD%BD%E6%9C%BA%E5%88%B6%E4%BA%8C/</loc>
<lastmod>2022-06-11</lastmod>
</url>
<url>
<loc>https://nicksxs.me/2021/03/28/%E8%81%8A%E8%81%8A-Linux-%E4%B8%8B%E7%9A%84-top-%E5%91%BD%E4%BB%A4/</loc>
<loc>https://nicksxs.me/2020/11/22/%E8%81%8A%E8%81%8A-Dubbo-%E7%9A%84%E5%AE%B9%E9%94%99%E6%9C%BA%E5%88%B6/</loc>
<lastmod>2022-06-11</lastmod> <lastmod>2022-06-11</lastmod>
</url> </url>
<url> <url>
@ -401,11 +393,11 @@
<lastmod>2022-06-11</lastmod> <lastmod>2022-06-11</lastmod>
</url> </url>
<url> <url>
<loc>https://nicksxs.me/2022/01/09/%E8%81%8A%E8%81%8A-Sharding-Jdbc-%E5%88%86%E5%BA%93%E5%88%86%E8%A1%A8%E4%B8%8B%E7%9A%84%E5%88%86%E9%A1%B5%E6%96%B9%E6%A1%88/</loc>
<loc>https://nicksxs.me/2021/06/13/%E8%81%8A%E8%81%8A-Java-%E7%9A%84%E7%B1%BB%E5%8A%A0%E8%BD%BD%E6%9C%BA%E5%88%B6%E4%BA%8C/</loc>
<lastmod>2022-06-11</lastmod> <lastmod>2022-06-11</lastmod>
</url> </url>
<url> <url>
<loc>https://nicksxs.me/2021/04/04/%E8%81%8A%E8%81%8A-dubbo-%E7%9A%84%E7%BA%BF%E7%A8%8B%E6%B1%A0/</loc>
<loc>https://nicksxs.me/2021/03/28/%E8%81%8A%E8%81%8A-Linux-%E4%B8%8B%E7%9A%84-top-%E5%91%BD%E4%BB%A4/</loc>
<lastmod>2022-06-11</lastmod> <lastmod>2022-06-11</lastmod>
</url> </url>
<url> <url>
@ -424,6 +416,14 @@
<loc>https://nicksxs.me/2021/05/30/%E8%81%8A%E8%81%8A%E4%BC%A0%E8%AF%B4%E4%B8%AD%E7%9A%84-ThreadLocal/</loc> <loc>https://nicksxs.me/2021/05/30/%E8%81%8A%E8%81%8A%E4%BC%A0%E8%AF%B4%E4%B8%AD%E7%9A%84-ThreadLocal/</loc>
<lastmod>2022-06-11</lastmod> <lastmod>2022-06-11</lastmod>
</url> </url>
<url>
<loc>https://nicksxs.me/2022/01/09/%E8%81%8A%E8%81%8A-Sharding-Jdbc-%E5%88%86%E5%BA%93%E5%88%86%E8%A1%A8%E4%B8%8B%E7%9A%84%E5%88%86%E9%A1%B5%E6%96%B9%E6%A1%88/</loc>
<lastmod>2022-06-11</lastmod>
</url>
<url>
<loc>https://nicksxs.me/2021/04/04/%E8%81%8A%E8%81%8A-dubbo-%E7%9A%84%E7%BA%BF%E7%A8%8B%E6%B1%A0/</loc>
<lastmod>2022-06-11</lastmod>
</url>
<url> <url>
<loc>https://nicksxs.me/2021/12/05/%E8%81%8A%E8%81%8A%E9%83%A8%E5%88%86%E5%85%AC%E4%BA%A4%E8%BD%A6%E7%9A%84%E8%AE%BE%E8%AE%A1bug/</loc> <loc>https://nicksxs.me/2021/12/05/%E8%81%8A%E8%81%8A%E9%83%A8%E5%88%86%E5%85%AC%E4%BA%A4%E8%BD%A6%E7%9A%84%E8%AE%BE%E8%AE%A1bug/</loc>
<lastmod>2022-06-11</lastmod> <lastmod>2022-06-11</lastmod>
@ -801,19 +801,19 @@
<lastmod>2020-01-12</lastmod> <lastmod>2020-01-12</lastmod>
</url> </url>
<url> <url>
<loc>https://nicksxs.me/2015/03/11/Reverse-Bits/</loc>
<loc>https://nicksxs.me/2019/12/10/Redis-Part-1/</loc>
<lastmod>2020-01-12</lastmod> <lastmod>2020-01-12</lastmod>
</url> </url>
<url> <url>
<loc>https://nicksxs.me/2015/03/13/Reverse-Integer/</loc>
<loc>https://nicksxs.me/2015/03/11/Reverse-Bits/</loc>
<lastmod>2020-01-12</lastmod> <lastmod>2020-01-12</lastmod>
</url> </url>
<url> <url>
<loc>https://nicksxs.me/2015/01/14/Two-Sum/</loc>
<loc>https://nicksxs.me/2015/03/13/Reverse-Integer/</loc>
<lastmod>2020-01-12</lastmod> <lastmod>2020-01-12</lastmod>
</url> </url>
<url> <url>
<loc>https://nicksxs.me/2019/12/10/Redis-Part-1/</loc>
<loc>https://nicksxs.me/2015/01/14/Two-Sum/</loc>
<lastmod>2020-01-12</lastmod> <lastmod>2020-01-12</lastmod>
</url> </url>
<url> <url>
@ -841,11 +841,11 @@
<lastmod>2020-01-12</lastmod> <lastmod>2020-01-12</lastmod>
</url> </url>
<url> <url>
<loc>https://nicksxs.me/2020/01/10/redis%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%BB%8B%E7%BB%8D%E4%B8%89/</loc>
<loc>https://nicksxs.me/2019/12/26/redis%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%BB%8B%E7%BB%8D/</loc>
<lastmod>2020-01-12</lastmod> <lastmod>2020-01-12</lastmod>
</url> </url>
<url> <url>
<loc>https://nicksxs.me/2019/12/26/redis%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%BB%8B%E7%BB%8D/</loc>
<loc>https://nicksxs.me/2020/01/10/redis%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%BB%8B%E7%BB%8D%E4%B8%89/</loc>
<lastmod>2020-01-12</lastmod> <lastmod>2020-01-12</lastmod>
</url> </url>
<url> <url>
@ -865,11 +865,11 @@
<lastmod>2020-01-12</lastmod> <lastmod>2020-01-12</lastmod>
</url> </url>
<url> <url>
<loc>https://nicksxs.me/2015/01/04/Path-Sum/</loc>
<loc>https://nicksxs.me/2015/03/11/Number-Of-1-Bits/</loc>
<lastmod>2020-01-12</lastmod> <lastmod>2020-01-12</lastmod>
</url> </url>
<url> <url>
<loc>https://nicksxs.me/2015/03/11/Number-Of-1-Bits/</loc>
<loc>https://nicksxs.me/2015/01/04/Path-Sum/</loc>
<lastmod>2020-01-12</lastmod> <lastmod>2020-01-12</lastmod>
</url> </url>
<url> <url>
@ -881,15 +881,15 @@
<lastmod>2020-01-12</lastmod> <lastmod>2020-01-12</lastmod>
</url> </url>
<url> <url>
<loc>https://nicksxs.me/2015/01/16/pcre-intro-and-a-simple-package/</loc>
<loc>https://nicksxs.me/2017/04/25/rabbitmq-tips/</loc>
<lastmod>2020-01-12</lastmod> <lastmod>2020-01-12</lastmod>
</url> </url>
<url> <url>
<loc>https://nicksxs.me/2017/04/25/rabbitmq-tips/</loc>
<loc>https://nicksxs.me/2017/03/28/spark-little-tips/</loc>
<lastmod>2020-01-12</lastmod> <lastmod>2020-01-12</lastmod>
</url> </url>
<url> <url>
<loc>https://nicksxs.me/2017/03/28/spark-little-tips/</loc>
<loc>https://nicksxs.me/2015/01/16/pcre-intro-and-a-simple-package/</loc>
<lastmod>2020-01-12</lastmod> <lastmod>2020-01-12</lastmod>
</url> </url>
<url> <url>


+ 16
- 16
index.html View File

@ -15,13 +15,13 @@
<span class="token class-name">Cookie</span> cookie <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Cookie</span><span class="token punctuation">(</span><span class="token string">"a"</span><span class="token punctuation">,</span> <span class="token string">"b"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token class-name">Cookie</span> cookie <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Cookie</span><span class="token punctuation">(</span><span class="token string">"a"</span><span class="token punctuation">,</span> <span class="token string">"b"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
response<span class="token punctuation">.</span><span class="token function">addCookie</span><span class="token punctuation">(</span>cookie<span class="token punctuation">)</span><span class="token punctuation">;</span> response<span class="token punctuation">.</span><span class="token function">addCookie</span><span class="token punctuation">(</span>cookie<span class="token punctuation">)</span><span class="token punctuation">;</span>
response<span class="token punctuation">.</span><span class="token function">setStatus</span><span class="token punctuation">(</span><span class="token class-name">HttpServletResponse</span><span class="token punctuation">.</span><span class="token constant">SC_OK</span><span class="token punctuation">)</span><span class="token punctuation">;</span> response<span class="token punctuation">.</span><span class="token function">setStatus</span><span class="token punctuation">(</span><span class="token class-name">HttpServletResponse</span><span class="token punctuation">.</span><span class="token constant">SC_OK</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span aria-hidden=true class=line-numbers-rows><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>这样的设置就能成功设定 cookie,而随着目前的浏览器 cookie 策略,如果要跳转后设置的话,估计是会越来越难,包括<pre class="line-numbers language-java" data-language=java><code class=language-java>response<span class="token punctuation">.</span><span class="token function">addHeader</span><span class="token punctuation">(</span><span class="token string">"Set-Cookie"</span><span class="token punctuation">,</span> <span class="token string">"a=b; domain=baidu.com; SameSite=none;Secure"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span aria-hidden=true class=line-numbers-rows><span></span></span></code></pre><p>这样的方式也没法实现。</div><footer class=post-footer><div class=post-eof></div></footer></article></div><div class=post-block><article class=post-content itemscope itemtype=http://schema.org/Article><link href=https://nicksxs.me/2023/08/27/springboot-%E8%AF%B7%E6%B1%82%E5%93%8D%E5%BA%94%E5%A4%84%E7%90%86%E6%B5%81%E7%A8%8B/ itemprop=mainEntityOfPage><span hidden itemprop=author itemscope itemtype=http://schema.org/Person><meta content=/uploads/avatar.jpg itemprop=image><meta content=Nicksxs itemprop=name></span><span hidden itemprop=publisher itemscope itemtype=http://schema.org/Organization><meta content="Nicksxs's Blog" itemprop=name><meta content="learn from zero,技术博客,Nicksxs,史学森" itemprop=description></span><span hidden itemprop=post itemscope itemtype=http://schema.org/CreativeWork><meta content="undefined | Nicksxs's Blog" itemprop=name><meta itemprop=description></span><header class=post-header><h2 itemprop="name headline" class=post-title><a class=post-title-link href=/2023/08/27/springboot-%E8%AF%B7%E6%B1%82%E5%93%8D%E5%BA%94%E5%A4%84%E7%90%86%E6%B5%81%E7%A8%8B/ itemprop=url>springboot 请求响应处理流程</a></h2><div class=post-meta-container><div class=post-meta><span class=post-meta-item><span class=post-meta-item-icon><i class="far fa-calendar"></i> </span><span class=post-meta-item-text>发表于</span> <time itemprop="dateCreated datePublished" title="创建时间:2023-08-27 22:47:19" datetime=2023-08-27T22:47:19+08:00>2023-08-27</time> </span><span class=post-meta-item><span class=post-meta-item-icon><i class="far fa-folder"></i> </span><span class=post-meta-item-text>分类于</span> <span itemprop=about itemscope itemtype=http://schema.org/Thing><a href=/categories/Java/ itemprop=url rel=index><span itemprop=name>Java</span></a> </span><span itemprop=about itemscope itemtype=http://schema.org/Thing><a href=/categories/Java/SpringBoot/ itemprop=url rel=index><span itemprop=name>SpringBoot</span></a> </span></span><span class="post-meta-item leancloud_visitors" data-flag-title="springboot 请求响应处理流程" id=/2023/08/27/springboot-%E8%AF%B7%E6%B1%82%E5%93%8D%E5%BA%94%E5%A4%84%E7%90%86%E6%B5%81%E7%A8%8B/ title=阅读次数><span class=post-meta-item-icon><i class="far fa-eye"></i> </span><span class=post-meta-item-text>阅读次数:</span> <span class=leancloud-visitors-count></span> </span><span class=post-meta-item><span class=post-meta-item-icon><i class="far fa-comment"></i> </span><span class=post-meta-item-text>Disqus:</span> <a href=/2023/08/27/springboot-%E8%AF%B7%E6%B1%82%E5%93%8D%E5%BA%94%E5%A4%84%E7%90%86%E6%B5%81%E7%A8%8B/#disqus_thread itemprop=discussionUrl title=disqus><span class="post-comments-count disqus-comment-count" data-disqus-identifier=2023/08/27/springboot-请求响应处理流程/ itemprop=commentCount></span></a></span></div></div></header><div class=post-body itemprop=articleBody><p>Tomcat 会把请求委托到<code>org.springframework.web.servlet.DispatcherServlet#doService</code><pre class="line-numbers language-java" data-language=java><code class=language-java><span class="token keyword">protected</span> <span class="token keyword">void</span> <span class="token function">doService</span><span class="token punctuation">(</span><span class="token class-name">HttpServletRequest</span> request<span class="token punctuation">,</span> <span class="token class-name">HttpServletResponse</span> response<span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">Exception</span> <span class="token punctuation">{</span>
<span class="token punctuation">}</span><span aria-hidden=true class=line-numbers-rows><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>这样的设置就能成功设定 cookie,而随着目前的浏览器 cookie 策略,如果要跳转后设置的话,估计是会越来越难,包括<pre class="line-numbers language-java" data-language=java><code class=language-java>response<span class="token punctuation">.</span><span class="token function">addHeader</span><span class="token punctuation">(</span><span class="token string">"Set-Cookie"</span><span class="token punctuation">,</span> <span class="token string">"a=b; domain=baidu.com; SameSite=none;Secure"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span aria-hidden=true class=line-numbers-rows><span></span></span></code></pre><p>这样的方式也没法实现。</div><footer class=post-footer><div class=post-eof></div></footer></article></div><div class=post-block><article class=post-content itemscope itemtype=http://schema.org/Article><link href=https://nicksxs.me/2023/08/27/springboot-%E8%AF%B7%E6%B1%82%E5%93%8D%E5%BA%94%E5%A4%84%E7%90%86%E6%B5%81%E7%A8%8B/ itemprop=mainEntityOfPage><span hidden itemprop=author itemscope itemtype=http://schema.org/Person><meta content=/uploads/avatar.jpg itemprop=image><meta content=Nicksxs itemprop=name></span><span hidden itemprop=publisher itemscope itemtype=http://schema.org/Organization><meta content="Nicksxs's Blog" itemprop=name><meta content="learn from zero,技术博客,Nicksxs,史学森" itemprop=description></span><span hidden itemprop=post itemscope itemtype=http://schema.org/CreativeWork><meta content="undefined | Nicksxs's Blog" itemprop=name><meta itemprop=description></span><header class=post-header><h2 itemprop="name headline" class=post-title><a class=post-title-link href=/2023/08/27/springboot-%E8%AF%B7%E6%B1%82%E5%93%8D%E5%BA%94%E5%A4%84%E7%90%86%E6%B5%81%E7%A8%8B/ itemprop=url>springboot 请求响应处理流程</a></h2><div class=post-meta-container><div class=post-meta><span class=post-meta-item><span class=post-meta-item-icon><i class="far fa-calendar"></i> </span><span class=post-meta-item-text>发表于</span> <time itemprop="dateCreated datePublished" title="创建时间:2023-08-27 22:47:19" datetime=2023-08-27T22:47:19+08:00>2023-08-27</time> </span><span class=post-meta-item><span class=post-meta-item-icon><i class="far fa-calendar-check"></i> </span><span class=post-meta-item-text>更新于</span> <time title="修改时间:2023-09-05 17:19:33" datetime=2023-09-05T17:19:33+08:00 itemprop=dateModified>2023-09-05</time> </span><span class=post-meta-item><span class=post-meta-item-icon><i class="far fa-folder"></i> </span><span class=post-meta-item-text>分类于</span> <span itemprop=about itemscope itemtype=http://schema.org/Thing><a href=/categories/Java/ itemprop=url rel=index><span itemprop=name>Java</span></a> </span><span itemprop=about itemscope itemtype=http://schema.org/Thing><a href=/categories/Java/SpringBoot/ itemprop=url rel=index><span itemprop=name>SpringBoot</span></a> </span></span><span class="post-meta-item leancloud_visitors" data-flag-title="springboot 请求响应处理流程" id=/2023/08/27/springboot-%E8%AF%B7%E6%B1%82%E5%93%8D%E5%BA%94%E5%A4%84%E7%90%86%E6%B5%81%E7%A8%8B/ title=阅读次数><span class=post-meta-item-icon><i class="far fa-eye"></i> </span><span class=post-meta-item-text>阅读次数:</span> <span class=leancloud-visitors-count></span> </span><span class=post-meta-item><span class=post-meta-item-icon><i class="far fa-comment"></i> </span><span class=post-meta-item-text>Disqus:</span> <a href=/2023/08/27/springboot-%E8%AF%B7%E6%B1%82%E5%93%8D%E5%BA%94%E5%A4%84%E7%90%86%E6%B5%81%E7%A8%8B/#disqus_thread itemprop=discussionUrl title=disqus><span class="post-comments-count disqus-comment-count" data-disqus-identifier=2023/08/27/springboot-请求响应处理流程/ itemprop=commentCount></span></a></span></div></div></header><div class=post-body itemprop=articleBody><p>Tomcat 会把请求委托到<br><code>org.springframework.web.servlet.DispatcherServlet#doService</code><pre class="line-numbers language-java" data-language=java><code class=language-java><span class="token keyword">protected</span> <span class="token keyword">void</span> <span class="token function">doService</span><span class="token punctuation">(</span><span class="token class-name">HttpServletRequest</span> request<span class="token punctuation">,</span> <span class="token class-name">HttpServletResponse</span> response<span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">Exception</span> <span class="token punctuation">{</span>
<span class="token function">logRequest</span><span class="token punctuation">(</span>request<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">logRequest</span><span class="token punctuation">(</span>request<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 省略前面的代码</span> <span class="token comment">// 省略前面的代码</span>
<span class="token keyword">try</span> <span class="token punctuation">{</span> <span class="token keyword">try</span> <span class="token punctuation">{</span>
<span class="token function">doDispatch</span><span class="token punctuation">(</span>request<span class="token punctuation">,</span> response<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">doDispatch</span><span class="token punctuation">(</span>request<span class="token punctuation">,</span> response<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span aria-hidden=true class=line-numbers-rows><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>然后就是调用<code>org.springframework.web.servlet.DispatcherServlet#doDispatch</code><pre class="line-numbers language-java" data-language=java><code class=language-java><span class="token keyword">protected</span> <span class="token keyword">void</span> <span class="token function">doDispatch</span><span class="token punctuation">(</span><span class="token class-name">HttpServletRequest</span> request<span class="token punctuation">,</span> <span class="token class-name">HttpServletResponse</span> response<span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">Exception</span> <span class="token punctuation">{</span>
<span class="token punctuation">}</span><span aria-hidden=true class=line-numbers-rows><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>然后就是调用<br><code>org.springframework.web.servlet.DispatcherServlet#doDispatch</code><pre class="line-numbers language-java" data-language=java><code class=language-java><span class="token keyword">protected</span> <span class="token keyword">void</span> <span class="token function">doDispatch</span><span class="token punctuation">(</span><span class="token class-name">HttpServletRequest</span> request<span class="token punctuation">,</span> <span class="token class-name">HttpServletResponse</span> response<span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">Exception</span> <span class="token punctuation">{</span>
<span class="token keyword">try</span> <span class="token punctuation">{</span> <span class="token keyword">try</span> <span class="token punctuation">{</span>
<span class="token class-name">ModelAndView</span> mv <span class="token operator">=</span> <span class="token keyword">null</span><span class="token punctuation">;</span> <span class="token class-name">ModelAndView</span> mv <span class="token operator">=</span> <span class="token keyword">null</span><span class="token punctuation">;</span>
@ -69,7 +69,7 @@
<span class="token punctuation">}</span> <span class="token punctuation">}</span>
<span class="token punctuation">}</span> <span class="token punctuation">}</span>
<span class="token keyword">return</span> <span class="token keyword">null</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token keyword">null</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span aria-hidden=true class=line-numbers-rows><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>可以看到有这些 HandlerMapping<br><img data-src=https://img.nicksxs.com/blog/xqv27E.png><br>而这里面就是前面提到过的<code>org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping</code><br>从这就能找到具体的 Handler<br><code>com.nicksxs.spbdemo.controller.DemoController#test()</code><br>这就是我简单的示例代码<pre class="line-numbers language-java" data-language=java><code class=language-java><span class="token annotation punctuation">@RequestMapping</span><span class="token punctuation">(</span>value <span class="token operator">=</span> <span class="token string">"/test"</span><span class="token punctuation">,</span> method <span class="token operator">=</span> <span class="token class-name">RequestMethod</span><span class="token punctuation">.</span><span class="token constant">GET</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span><span aria-hidden=true class=line-numbers-rows><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>可以看到有这些 HandlerMapping<br><img data-src=https://img.nicksxs.com/blog/xqv27E.png><br>而这里面就是前面提到过的<br><code>org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping</code><br>从这就能找到具体的 Handler<br><code>com.nicksxs.spbdemo.controller.DemoController#test()</code><br>这就是我简单的示例代码<pre class="line-numbers language-java" data-language=java><code class=language-java><span class="token annotation punctuation">@RequestMapping</span><span class="token punctuation">(</span>value <span class="token operator">=</span> <span class="token string">"/test"</span><span class="token punctuation">,</span> method <span class="token operator">=</span> <span class="token class-name">RequestMethod</span><span class="token punctuation">.</span><span class="token constant">GET</span><span class="token punctuation">)</span>
<span class="token annotation punctuation">@ResponseBody</span> <span class="token annotation punctuation">@ResponseBody</span>
<span class="token keyword">public</span> <span class="token class-name">DemoResponse</span> <span class="token function">test</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">public</span> <span class="token class-name">DemoResponse</span> <span class="token function">test</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token class-name">String</span> item <span class="token operator">=</span> <span class="token string">"{\"id\": 1, \"name\": \"nick\"}"</span><span class="token punctuation">;</span> <span class="token class-name">String</span> item <span class="token operator">=</span> <span class="token string">"{\"id\": 1, \"name\": \"nick\"}"</span><span class="token punctuation">;</span>
@ -77,7 +77,7 @@
parserConfig<span class="token punctuation">.</span>propertyNamingStrategy <span class="token operator">=</span> <span class="token class-name">PropertyNamingStrategy<span class="token punctuation">.</span>SnakeCase</span><span class="token punctuation">;</span> parserConfig<span class="token punctuation">.</span>propertyNamingStrategy <span class="token operator">=</span> <span class="token class-name">PropertyNamingStrategy<span class="token punctuation">.</span>SnakeCase</span><span class="token punctuation">;</span>
<span class="token class-name">DemoResponse</span> response <span class="token operator">=</span> <span class="token constant">JSON</span><span class="token punctuation">.</span><span class="token function">parseObject</span><span class="token punctuation">(</span>item<span class="token punctuation">,</span> <span class="token class-name">DemoResponse</span><span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">,</span> parserConfig<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token class-name">DemoResponse</span> response <span class="token operator">=</span> <span class="token constant">JSON</span><span class="token punctuation">.</span><span class="token function">parseObject</span><span class="token punctuation">(</span>item<span class="token punctuation">,</span> <span class="token class-name">DemoResponse</span><span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">,</span> parserConfig<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">return</span> response<span class="token punctuation">;</span> <span class="token keyword">return</span> response<span class="token punctuation">;</span>
<span class="token punctuation">}</span><span aria-hidden=true class=line-numbers-rows><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>再获取适配器,<code>org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter</code><pre class="line-numbers language-java" data-language=java><code class=language-java><span class="token keyword">protected</span> <span class="token class-name">HandlerAdapter</span> <span class="token function">getHandlerAdapter</span><span class="token punctuation">(</span><span class="token class-name">Object</span> handler<span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">ServletException</span> <span class="token punctuation">{</span>
<span class="token punctuation">}</span><span aria-hidden=true class=line-numbers-rows><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>下一步是再获取处理器的适配器,<br><code>org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter</code><pre class="line-numbers language-java" data-language=java><code class=language-java><span class="token keyword">protected</span> <span class="token class-name">HandlerAdapter</span> <span class="token function">getHandlerAdapter</span><span class="token punctuation">(</span><span class="token class-name">Object</span> handler<span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">ServletException</span> <span class="token punctuation">{</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">.</span>handlerAdapters <span class="token operator">!=</span> <span class="token keyword">null</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">.</span>handlerAdapters <span class="token operator">!=</span> <span class="token keyword">null</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token class-name">HandlerAdapter</span> adapter <span class="token operator">:</span> <span class="token keyword">this</span><span class="token punctuation">.</span>handlerAdapters<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token class-name">HandlerAdapter</span> adapter <span class="token operator">:</span> <span class="token keyword">this</span><span class="token punctuation">.</span>handlerAdapters<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>adapter<span class="token punctuation">.</span><span class="token function">supports</span><span class="token punctuation">(</span>handler<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>adapter<span class="token punctuation">.</span><span class="token function">supports</span><span class="token punctuation">(</span>handler<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
@ -90,13 +90,13 @@
<span class="token punctuation">}</span><span aria-hidden=true class=line-numbers-rows><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>正好这个适配器是调用的父类的 supports 方法<pre class="line-numbers language-java" data-language=java><code class=language-java><span class="token annotation punctuation">@Override</span> <span class="token punctuation">}</span><span aria-hidden=true class=line-numbers-rows><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>正好这个适配器是调用的父类的 supports 方法<pre class="line-numbers language-java" data-language=java><code class=language-java><span class="token annotation punctuation">@Override</span>
<span class="token keyword">public</span> <span class="token keyword">final</span> <span class="token keyword">boolean</span> <span class="token function">supports</span><span class="token punctuation">(</span><span class="token class-name">Object</span> handler<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">public</span> <span class="token keyword">final</span> <span class="token keyword">boolean</span> <span class="token function">supports</span><span class="token punctuation">(</span><span class="token class-name">Object</span> handler<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">return</span> <span class="token punctuation">(</span>handler <span class="token keyword">instanceof</span> <span class="token class-name">HandlerMethod</span> <span class="token operator">&&</span> <span class="token function">supportsInternal</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token class-name">HandlerMethod</span><span class="token punctuation">)</span> handler<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token punctuation">(</span>handler <span class="token keyword">instanceof</span> <span class="token class-name">HandlerMethod</span> <span class="token operator">&&</span> <span class="token function">supportsInternal</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token class-name">HandlerMethod</span><span class="token punctuation">)</span> handler<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span aria-hidden=true class=line-numbers-rows><span></span><span></span><span></span><span></span></span></code></pre><p>而我这个<code>com.nicksxs.spbdemo.controller.DemoController#test()</code>就是个包装好的 <code>HandlerMethod</code><br>然后就是调用 <code>ha</code><code>handle</code> 方法,也是通过模板方法,实际调用的是<br><code>org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter#handle</code><pre class="line-numbers language-java" data-language=java><code class=language-java><span class="token annotation punctuation">@Override</span>
<span class="token punctuation">}</span><span aria-hidden=true class=line-numbers-rows><span></span><span></span><span></span><span></span></span></code></pre><p>而我这个<code>com.nicksxs.spbdemo.controller.DemoController#test()</code><br>就是个包装好的 <code>HandlerMethod</code><br>然后就是调用 <code>ha</code><code>handle</code> 方法,也是通过模板方法,实际调用的是<br><code>org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter#handle</code><pre class="line-numbers language-java" data-language=java><code class=language-java><span class="token annotation punctuation">@Override</span>
<span class="token annotation punctuation">@Nullable</span> <span class="token annotation punctuation">@Nullable</span>
<span class="token keyword">public</span> <span class="token keyword">final</span> <span class="token class-name">ModelAndView</span> <span class="token function">handle</span><span class="token punctuation">(</span><span class="token class-name">HttpServletRequest</span> request<span class="token punctuation">,</span> <span class="token class-name">HttpServletResponse</span> response<span class="token punctuation">,</span> <span class="token class-name">Object</span> handler<span class="token punctuation">)</span> <span class="token keyword">public</span> <span class="token keyword">final</span> <span class="token class-name">ModelAndView</span> <span class="token function">handle</span><span class="token punctuation">(</span><span class="token class-name">HttpServletRequest</span> request<span class="token punctuation">,</span> <span class="token class-name">HttpServletResponse</span> response<span class="token punctuation">,</span> <span class="token class-name">Object</span> handler<span class="token punctuation">)</span>
<span class="token keyword">throws</span> <span class="token class-name">Exception</span> <span class="token punctuation">{</span> <span class="token keyword">throws</span> <span class="token class-name">Exception</span> <span class="token punctuation">{</span>
<span class="token keyword">return</span> <span class="token function">handleInternal</span><span class="token punctuation">(</span>request<span class="token punctuation">,</span> response<span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token class-name">HandlerMethod</span><span class="token punctuation">)</span> handler<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token function">handleInternal</span><span class="token punctuation">(</span>request<span class="token punctuation">,</span> response<span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token class-name">HandlerMethod</span><span class="token punctuation">)</span> handler<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span aria-hidden=true class=line-numbers-rows><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>然后调用 <code>org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter#handleInternal</code><pre class="line-numbers language-java" data-language=java><code class=language-java><span class="token annotation punctuation">@Override</span>
<span class="token punctuation">}</span><span aria-hidden=true class=line-numbers-rows><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>然后调用<br><code>org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter#handleInternal</code><pre class="line-numbers language-java" data-language=java><code class=language-java><span class="token annotation punctuation">@Override</span>
<span class="token keyword">protected</span> <span class="token class-name">ModelAndView</span> <span class="token function">handleInternal</span><span class="token punctuation">(</span><span class="token class-name">HttpServletRequest</span> request<span class="token punctuation">,</span> <span class="token keyword">protected</span> <span class="token class-name">ModelAndView</span> <span class="token function">handleInternal</span><span class="token punctuation">(</span><span class="token class-name">HttpServletRequest</span> request<span class="token punctuation">,</span>
<span class="token class-name">HttpServletResponse</span> response<span class="token punctuation">,</span> <span class="token class-name">HandlerMethod</span> handlerMethod<span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">Exception</span> <span class="token punctuation">{</span> <span class="token class-name">HttpServletResponse</span> response<span class="token punctuation">,</span> <span class="token class-name">HandlerMethod</span> handlerMethod<span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">Exception</span> <span class="token punctuation">{</span>
@ -121,7 +121,7 @@
<span class="token comment">// 是否要锁定 session,否则走到这</span> <span class="token comment">// 是否要锁定 session,否则走到这</span>
<span class="token comment">// No synchronization on session demanded at all...</span> <span class="token comment">// No synchronization on session demanded at all...</span>
mav <span class="token operator">=</span> <span class="token function">invokeHandlerMethod</span><span class="token punctuation">(</span>request<span class="token punctuation">,</span> response<span class="token punctuation">,</span> handlerMethod<span class="token punctuation">)</span><span class="token punctuation">;</span> mav <span class="token operator">=</span> <span class="token function">invokeHandlerMethod</span><span class="token punctuation">(</span>request<span class="token punctuation">,</span> response<span class="token punctuation">,</span> handlerMethod<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span aria-hidden=true class=line-numbers-rows><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>继续调用<code>org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter#invokeHandlerMethod</code><pre class="line-numbers language-java" data-language=java><code class=language-java><span class="token annotation punctuation">@Nullable</span>
<span class="token punctuation">}</span><span aria-hidden=true class=line-numbers-rows><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>继续调用<br><code>org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter#invokeHandlerMethod</code><pre class="line-numbers language-java" data-language=java><code class=language-java><span class="token annotation punctuation">@Nullable</span>
<span class="token keyword">protected</span> <span class="token class-name">ModelAndView</span> <span class="token function">invokeHandlerMethod</span><span class="token punctuation">(</span><span class="token class-name">HttpServletRequest</span> request<span class="token punctuation">,</span> <span class="token keyword">protected</span> <span class="token class-name">ModelAndView</span> <span class="token function">invokeHandlerMethod</span><span class="token punctuation">(</span><span class="token class-name">HttpServletRequest</span> request<span class="token punctuation">,</span>
<span class="token class-name">HttpServletResponse</span> response<span class="token punctuation">,</span> <span class="token class-name">HandlerMethod</span> handlerMethod<span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">Exception</span> <span class="token punctuation">{</span> <span class="token class-name">HttpServletResponse</span> response<span class="token punctuation">,</span> <span class="token class-name">HandlerMethod</span> handlerMethod<span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">Exception</span> <span class="token punctuation">{</span>
@ -144,13 +144,13 @@
<span class="token keyword">finally</span> <span class="token punctuation">{</span> <span class="token keyword">finally</span> <span class="token punctuation">{</span>
webRequest<span class="token punctuation">.</span><span class="token function">requestCompleted</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> webRequest<span class="token punctuation">.</span><span class="token function">requestCompleted</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span> <span class="token punctuation">}</span>
<span class="token punctuation">}</span><span aria-hidden=true class=line-numbers-rows><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>稍微看一眼<br>第一步是<code>org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter#createInvocableHandlerMethod</code><pre class="line-numbers language-java" data-language=java><code class=language-java><span class="token keyword">protected</span> <span class="token class-name">ServletInvocableHandlerMethod</span> <span class="token function">createInvocableHandlerMethod</span><span class="token punctuation">(</span><span class="token class-name">HandlerMethod</span> handlerMethod<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token punctuation">}</span><span aria-hidden=true class=line-numbers-rows><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>稍微看一眼<br>第一步是<br><code>org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter#createInvocableHandlerMethod</code><pre class="line-numbers language-java" data-language=java><code class=language-java><span class="token keyword">protected</span> <span class="token class-name">ServletInvocableHandlerMethod</span> <span class="token function">createInvocableHandlerMethod</span><span class="token punctuation">(</span><span class="token class-name">HandlerMethod</span> handlerMethod<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">ServletInvocableHandlerMethod</span><span class="token punctuation">(</span>handlerMethod<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">ServletInvocableHandlerMethod</span><span class="token punctuation">(</span>handlerMethod<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span aria-hidden=true class=line-numbers-rows><span></span><span></span><span></span></span></code></pre><p>第二步是<code>org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod#ServletInvocableHandlerMethod(org.springframework.web.method.HandlerMethod)</code><pre class="line-numbers language-java" data-language=java><code class=language-java> <span class="token keyword">public</span> <span class="token class-name">ServletInvocableHandlerMethod</span><span class="token punctuation">(</span><span class="token class-name">HandlerMethod</span> handlerMethod<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token punctuation">}</span><span aria-hidden=true class=line-numbers-rows><span></span><span></span><span></span></span></code></pre><p>第二步是<br><code>org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod#ServletInvocableHandlerMethod(org.springframework.web.method.HandlerMethod)</code><pre class="line-numbers language-java" data-language=java><code class=language-java> <span class="token keyword">public</span> <span class="token class-name">ServletInvocableHandlerMethod</span><span class="token punctuation">(</span><span class="token class-name">HandlerMethod</span> handlerMethod<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">super</span><span class="token punctuation">(</span>handlerMethod<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">super</span><span class="token punctuation">(</span>handlerMethod<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span aria-hidden=true class=line-numbers-rows><span></span><span></span><span></span></span></code></pre><p>第三部是<code>org.springframework.web.method.support.InvocableHandlerMethod#InvocableHandlerMethod(org.springframework.web.method.HandlerMethod)</code><pre class="line-numbers language-java" data-language=java><code class=language-java> <span class="token keyword">public</span> <span class="token class-name">InvocableHandlerMethod</span><span class="token punctuation">(</span><span class="token class-name">HandlerMethod</span> handlerMethod<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token punctuation">}</span><span aria-hidden=true class=line-numbers-rows><span></span><span></span><span></span></span></code></pre><p>第三步是<br><code>org.springframework.web.method.support.InvocableHandlerMethod#InvocableHandlerMethod(org.springframework.web.method.HandlerMethod)</code><pre class="line-numbers language-java" data-language=java><code class=language-java> <span class="token keyword">public</span> <span class="token class-name">InvocableHandlerMethod</span><span class="token punctuation">(</span><span class="token class-name">HandlerMethod</span> handlerMethod<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">super</span><span class="token punctuation">(</span>handlerMethod<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">super</span><span class="token punctuation">(</span>handlerMethod<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span aria-hidden=true class=line-numbers-rows><span></span><span></span><span></span></span></code></pre><p>第四步是<code>org.springframework.web.method.HandlerMethod#HandlerMethod(org.springframework.web.method.HandlerMethod)</code><pre class="line-numbers language-java" data-language=java><code class=language-java><span class="token keyword">protected</span> <span class="token class-name">HandlerMethod</span><span class="token punctuation">(</span><span class="token class-name">HandlerMethod</span> handlerMethod<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token punctuation">}</span><span aria-hidden=true class=line-numbers-rows><span></span><span></span><span></span></span></code></pre><p>第四步是<br><code>org.springframework.web.method.HandlerMethod#HandlerMethod(org.springframework.web.method.HandlerMethod)</code><pre class="line-numbers language-java" data-language=java><code class=language-java><span class="token keyword">protected</span> <span class="token class-name">HandlerMethod</span><span class="token punctuation">(</span><span class="token class-name">HandlerMethod</span> handlerMethod<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token class-name">Assert</span><span class="token punctuation">.</span><span class="token function">notNull</span><span class="token punctuation">(</span>handlerMethod<span class="token punctuation">,</span> <span class="token string">"HandlerMethod is required"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token class-name">Assert</span><span class="token punctuation">.</span><span class="token function">notNull</span><span class="token punctuation">(</span>handlerMethod<span class="token punctuation">,</span> <span class="token string">"HandlerMethod is required"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">this</span><span class="token punctuation">.</span>bean <span class="token operator">=</span> handlerMethod<span class="token punctuation">.</span>bean<span class="token punctuation">;</span> <span class="token keyword">this</span><span class="token punctuation">.</span>bean <span class="token operator">=</span> handlerMethod<span class="token punctuation">.</span>bean<span class="token punctuation">;</span>
<span class="token keyword">this</span><span class="token punctuation">.</span>beanFactory <span class="token operator">=</span> handlerMethod<span class="token punctuation">.</span>beanFactory<span class="token punctuation">;</span> <span class="token keyword">this</span><span class="token punctuation">.</span>beanFactory <span class="token operator">=</span> handlerMethod<span class="token punctuation">.</span>beanFactory<span class="token punctuation">;</span>
@ -162,13 +162,13 @@
<span class="token keyword">this</span><span class="token punctuation">.</span>responseStatusReason <span class="token operator">=</span> handlerMethod<span class="token punctuation">.</span>responseStatusReason<span class="token punctuation">;</span> <span class="token keyword">this</span><span class="token punctuation">.</span>responseStatusReason <span class="token operator">=</span> handlerMethod<span class="token punctuation">.</span>responseStatusReason<span class="token punctuation">;</span>
<span class="token keyword">this</span><span class="token punctuation">.</span>description <span class="token operator">=</span> handlerMethod<span class="token punctuation">.</span>description<span class="token punctuation">;</span> <span class="token keyword">this</span><span class="token punctuation">.</span>description <span class="token operator">=</span> handlerMethod<span class="token punctuation">.</span>description<span class="token punctuation">;</span>
<span class="token keyword">this</span><span class="token punctuation">.</span>resolvedFromHandlerMethod <span class="token operator">=</span> handlerMethod<span class="token punctuation">.</span>resolvedFromHandlerMethod<span class="token punctuation">;</span> <span class="token keyword">this</span><span class="token punctuation">.</span>resolvedFromHandlerMethod <span class="token operator">=</span> handlerMethod<span class="token punctuation">.</span>resolvedFromHandlerMethod<span class="token punctuation">;</span>
<span class="token punctuation">}</span><span aria-hidden=true class=line-numbers-rows><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>这是个继承关系,一直调用到最顶层的父类的构造方法,其实就是拷贝,然后继续调用<code>org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod#invokeAndHandle</code><pre class="line-numbers language-java" data-language=java><code class=language-java><span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">invokeAndHandle</span><span class="token punctuation">(</span><span class="token class-name">ServletWebRequest</span> webRequest<span class="token punctuation">,</span> <span class="token class-name">ModelAndViewContainer</span> mavContainer<span class="token punctuation">,</span>
<span class="token punctuation">}</span><span aria-hidden=true class=line-numbers-rows><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>这是个继承关系,一直调用到最顶层的父类的构造方法,其实就是拷贝,然后继续调用<br><code>org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod#invokeAndHandle</code><pre class="line-numbers language-java" data-language=java><code class=language-java><span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">invokeAndHandle</span><span class="token punctuation">(</span><span class="token class-name">ServletWebRequest</span> webRequest<span class="token punctuation">,</span> <span class="token class-name">ModelAndViewContainer</span> mavContainer<span class="token punctuation">,</span>
<span class="token class-name">Object</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span> providedArgs<span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">Exception</span> <span class="token punctuation">{</span> <span class="token class-name">Object</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span> providedArgs<span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">Exception</span> <span class="token punctuation">{</span>
<span class="token comment">// 调用请求</span> <span class="token comment">// 调用请求</span>
<span class="token class-name">Object</span> returnValue <span class="token operator">=</span> <span class="token function">invokeForRequest</span><span class="token punctuation">(</span>webRequest<span class="token punctuation">,</span> mavContainer<span class="token punctuation">,</span> providedArgs<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token class-name">Object</span> returnValue <span class="token operator">=</span> <span class="token function">invokeForRequest</span><span class="token punctuation">(</span>webRequest<span class="token punctuation">,</span> mavContainer<span class="token punctuation">,</span> providedArgs<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 稍微忽略下后面的代码</span> <span class="token comment">// 稍微忽略下后面的代码</span>
<span class="token punctuation">}</span><span aria-hidden=true class=line-numbers-rows><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>继续调用 <code>org.springframework.web.method.support.InvocableHandlerMethod#invokeForRequest</code><pre class="line-numbers language-java" data-language=java><code class=language-java><span class="token annotation punctuation">@Nullable</span>
<span class="token punctuation">}</span><span aria-hidden=true class=line-numbers-rows><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>继续调用<br><code>org.springframework.web.method.support.InvocableHandlerMethod#invokeForRequest</code><pre class="line-numbers language-java" data-language=java><code class=language-java><span class="token annotation punctuation">@Nullable</span>
<span class="token keyword">public</span> <span class="token class-name">Object</span> <span class="token function">invokeForRequest</span><span class="token punctuation">(</span><span class="token class-name">NativeWebRequest</span> request<span class="token punctuation">,</span> <span class="token annotation punctuation">@Nullable</span> <span class="token class-name">ModelAndViewContainer</span> mavContainer<span class="token punctuation">,</span> <span class="token keyword">public</span> <span class="token class-name">Object</span> <span class="token function">invokeForRequest</span><span class="token punctuation">(</span><span class="token class-name">NativeWebRequest</span> request<span class="token punctuation">,</span> <span class="token annotation punctuation">@Nullable</span> <span class="token class-name">ModelAndViewContainer</span> mavContainer<span class="token punctuation">,</span>
<span class="token class-name">Object</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span> providedArgs<span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">Exception</span> <span class="token punctuation">{</span> <span class="token class-name">Object</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span> providedArgs<span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">Exception</span> <span class="token punctuation">{</span>
@ -177,7 +177,7 @@
logger<span class="token punctuation">.</span><span class="token function">trace</span><span class="token punctuation">(</span><span class="token string">"Arguments: "</span> <span class="token operator">+</span> <span class="token class-name">Arrays</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span>args<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> logger<span class="token punctuation">.</span><span class="token function">trace</span><span class="token punctuation">(</span><span class="token string">"Arguments: "</span> <span class="token operator">+</span> <span class="token class-name">Arrays</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span>args<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span> <span class="token punctuation">}</span>
<span class="token keyword">return</span> <span class="token function">doInvoke</span><span class="token punctuation">(</span>args<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token function">doInvoke</span><span class="token punctuation">(</span>args<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span aria-hidden=true class=line-numbers-rows><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>来到了最核心处 <code>org.springframework.web.method.support.InvocableHandlerMethod#doInvoke</code><pre class="line-numbers language-java" data-language=java><code class=language-java><span class="token annotation punctuation">@Nullable</span>
<span class="token punctuation">}</span><span aria-hidden=true class=line-numbers-rows><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>来到了最核心处<br><code>org.springframework.web.method.support.InvocableHandlerMethod#doInvoke</code><pre class="line-numbers language-java" data-language=java><code class=language-java><span class="token annotation punctuation">@Nullable</span>
<span class="token keyword">protected</span> <span class="token class-name">Object</span> <span class="token function">doInvoke</span><span class="token punctuation">(</span><span class="token class-name">Object</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span> args<span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">Exception</span> <span class="token punctuation">{</span> <span class="token keyword">protected</span> <span class="token class-name">Object</span> <span class="token function">doInvoke</span><span class="token punctuation">(</span><span class="token class-name">Object</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span> args<span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">Exception</span> <span class="token punctuation">{</span>
<span class="token class-name">Method</span> method <span class="token operator">=</span> <span class="token function">getBridgedMethod</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token class-name">Method</span> method <span class="token operator">=</span> <span class="token function">getBridgedMethod</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token class-name">ReflectionUtils</span><span class="token punctuation">.</span><span class="token function">makeAccessible</span><span class="token punctuation">(</span>method<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token class-name">ReflectionUtils</span><span class="token punctuation">.</span><span class="token function">makeAccessible</span><span class="token punctuation">(</span>method<span class="token punctuation">)</span><span class="token punctuation">;</span>
@ -187,7 +187,7 @@
<span class="token punctuation">}</span> <span class="token punctuation">}</span>
<span class="token comment">// 会走到这里,获取到 bean,而这个 bean 就是前面构造方法里赋值的,最开始被放在 handler 里面,然后调用方法</span> <span class="token comment">// 会走到这里,获取到 bean,而这个 bean 就是前面构造方法里赋值的,最开始被放在 handler 里面,然后调用方法</span>
<span class="token keyword">return</span> method<span class="token punctuation">.</span><span class="token function">invoke</span><span class="token punctuation">(</span><span class="token function">getBean</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> args<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> method<span class="token punctuation">.</span><span class="token function">invoke</span><span class="token punctuation">(</span><span class="token function">getBean</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> args<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span aria-hidden=true class=line-numbers-rows><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre></div><footer class=post-footer><div class=post-eof></div></footer></article></div><div class=post-block><article class=post-content itemscope itemtype=http://schema.org/Article><link href=https://nicksxs.me/2023/08/20/springboot-web-server-%E5%90%AF%E5%8A%A8%E9%80%BB%E8%BE%91/ itemprop=mainEntityOfPage><span hidden itemprop=author itemscope itemtype=http://schema.org/Person><meta content=/uploads/avatar.jpg itemprop=image><meta content=Nicksxs itemprop=name></span><span hidden itemprop=publisher itemscope itemtype=http://schema.org/Organization><meta content="Nicksxs's Blog" itemprop=name><meta content="learn from zero,技术博客,Nicksxs,史学森" itemprop=description></span><span hidden itemprop=post itemscope itemtype=http://schema.org/CreativeWork><meta content="undefined | Nicksxs's Blog" itemprop=name><meta itemprop=description></span><header class=post-header><h2 itemprop="name headline" class=post-title><a class=post-title-link href=/2023/08/20/springboot-web-server-%E5%90%AF%E5%8A%A8%E9%80%BB%E8%BE%91/ itemprop=url>springboot web server 启动逻辑</a></h2><div class=post-meta-container><div class=post-meta><span class=post-meta-item><span class=post-meta-item-icon><i class="far fa-calendar"></i> </span><span class=post-meta-item-text>发表于</span> <time itemprop="dateCreated datePublished" title="创建时间:2023-08-20 17:38:56" datetime=2023-08-20T17:38:56+08:00>2023-08-20</time> </span><span class=post-meta-item><span class=post-meta-item-icon><i class="far fa-calendar-check"></i> </span><span class=post-meta-item-text>更新于</span> <time title="修改时间:2023-08-27 22:47:08" datetime=2023-08-27T22:47:08+08:00 itemprop=dateModified>2023-08-27</time> </span><span class=post-meta-item><span class=post-meta-item-icon><i class="far fa-folder"></i> </span><span class=post-meta-item-text>分类于</span> <span itemprop=about itemscope itemtype=http://schema.org/Thing><a href=/categories/Java/ itemprop=url rel=index><span itemprop=name>Java</span></a> </span><span itemprop=about itemscope itemtype=http://schema.org/Thing><a href=/categories/Java/SpringBoot/ itemprop=url rel=index><span itemprop=name>SpringBoot</span></a> </span></span><span class="post-meta-item leancloud_visitors" data-flag-title="springboot web server 启动逻辑" id=/2023/08/20/springboot-web-server-%E5%90%AF%E5%8A%A8%E9%80%BB%E8%BE%91/ title=阅读次数><span class=post-meta-item-icon><i class="far fa-eye"></i> </span><span class=post-meta-item-text>阅读次数:</span> <span class=leancloud-visitors-count></span> </span><span class=post-meta-item><span class=post-meta-item-icon><i class="far fa-comment"></i> </span><span class=post-meta-item-text>Disqus:</span> <a href=/2023/08/20/springboot-web-server-%E5%90%AF%E5%8A%A8%E9%80%BB%E8%BE%91/#disqus_thread itemprop=discussionUrl title=disqus><span class="post-comments-count disqus-comment-count" data-disqus-identifier=2023/08/20/springboot-web-server-启动逻辑/ itemprop=commentCount></span></a></span></div></div></header><div class=post-body itemprop=articleBody><p>springboot 的一个方便之处就是集成了 web server 进去,接着上一篇继续来看下这个 web server 的启动过程<br>基于 springboot 的 2.2.9.RELEASE 版本<br>整个 springboot 体系主体就是看 <code>org.springframework.context.support.AbstractApplicationContext#refresh</code> 刷新方法,<br>而启动 web server 的方法就是在其中的 OnRefresh<pre class="line-numbers language-java" data-language=java><code class=language-java><span class="token keyword">try</span> <span class="token punctuation">{</span>
<span class="token punctuation">}</span><span aria-hidden=true class=line-numbers-rows><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre></div><footer class=post-footer><div class=post-eof></div></footer></article></div><div class=post-block><article class=post-content itemscope itemtype=http://schema.org/Article><link href=https://nicksxs.me/2023/08/20/springboot-web-server-%E5%90%AF%E5%8A%A8%E9%80%BB%E8%BE%91/ itemprop=mainEntityOfPage><span hidden itemprop=author itemscope itemtype=http://schema.org/Person><meta content=/uploads/avatar.jpg itemprop=image><meta content=Nicksxs itemprop=name></span><span hidden itemprop=publisher itemscope itemtype=http://schema.org/Organization><meta content="Nicksxs's Blog" itemprop=name><meta content="learn from zero,技术博客,Nicksxs,史学森" itemprop=description></span><span hidden itemprop=post itemscope itemtype=http://schema.org/CreativeWork><meta content="undefined | Nicksxs's Blog" itemprop=name><meta itemprop=description></span><header class=post-header><h2 itemprop="name headline" class=post-title><a class=post-title-link href=/2023/08/20/springboot-web-server-%E5%90%AF%E5%8A%A8%E9%80%BB%E8%BE%91/ itemprop=url>springboot web server 启动逻辑</a></h2><div class=post-meta-container><div class=post-meta><span class=post-meta-item><span class=post-meta-item-icon><i class="far fa-calendar"></i> </span><span class=post-meta-item-text>发表于</span> <time itemprop="dateCreated datePublished" title="创建时间:2023-08-20 17:38:56" datetime=2023-08-20T17:38:56+08:00>2023-08-20</time> </span><span class=post-meta-item><span class=post-meta-item-icon><i class="far fa-calendar-check"></i> </span><span class=post-meta-item-text>更新于</span> <time title="修改时间:2023-09-05 17:27:00" datetime=2023-09-05T17:27:00+08:00 itemprop=dateModified>2023-09-05</time> </span><span class=post-meta-item><span class=post-meta-item-icon><i class="far fa-folder"></i> </span><span class=post-meta-item-text>分类于</span> <span itemprop=about itemscope itemtype=http://schema.org/Thing><a href=/categories/Java/ itemprop=url rel=index><span itemprop=name>Java</span></a> </span><span itemprop=about itemscope itemtype=http://schema.org/Thing><a href=/categories/Java/SpringBoot/ itemprop=url rel=index><span itemprop=name>SpringBoot</span></a> </span></span><span class="post-meta-item leancloud_visitors" data-flag-title="springboot web server 启动逻辑" id=/2023/08/20/springboot-web-server-%E5%90%AF%E5%8A%A8%E9%80%BB%E8%BE%91/ title=阅读次数><span class=post-meta-item-icon><i class="far fa-eye"></i> </span><span class=post-meta-item-text>阅读次数:</span> <span class=leancloud-visitors-count></span> </span><span class=post-meta-item><span class=post-meta-item-icon><i class="far fa-comment"></i> </span><span class=post-meta-item-text>Disqus:</span> <a href=/2023/08/20/springboot-web-server-%E5%90%AF%E5%8A%A8%E9%80%BB%E8%BE%91/#disqus_thread itemprop=discussionUrl title=disqus><span class="post-comments-count disqus-comment-count" data-disqus-identifier=2023/08/20/springboot-web-server-启动逻辑/ itemprop=commentCount></span></a></span></div></div></header><div class=post-body itemprop=articleBody><p>springboot 的一个方便之处就是集成了 web server 进去,接着上一篇继续来看下这个 web server 的启动过程<br>这边是基于 springboot 的 2.2.9.RELEASE 版本,整个 springboot 体系主体就是看<br><code>org.springframework.context.support.AbstractApplicationContext#refresh</code><br>刷新方法,而启动 web server 的方法就是在其中的 onRefresh<pre class="line-numbers language-java" data-language=java><code class=language-java><span class="token keyword">try</span> <span class="token punctuation">{</span>
<span class="token comment">// Allows post-processing of the bean factory in context subclasses.</span> <span class="token comment">// Allows post-processing of the bean factory in context subclasses.</span>
<span class="token function">postProcessBeanFactory</span><span class="token punctuation">(</span>beanFactory<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">postProcessBeanFactory</span><span class="token punctuation">(</span>beanFactory<span class="token punctuation">)</span><span class="token punctuation">;</span>
@ -292,7 +292,7 @@
<span class="token keyword">this</span><span class="token punctuation">.</span>tomcat <span class="token operator">=</span> tomcat<span class="token punctuation">;</span> <span class="token keyword">this</span><span class="token punctuation">.</span>tomcat <span class="token operator">=</span> tomcat<span class="token punctuation">;</span>
<span class="token keyword">this</span><span class="token punctuation">.</span>autoStart <span class="token operator">=</span> autoStart<span class="token punctuation">;</span> <span class="token keyword">this</span><span class="token punctuation">.</span>autoStart <span class="token operator">=</span> autoStart<span class="token punctuation">;</span>
<span class="token function">initialize</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">initialize</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span aria-hidden=true class=line-numbers-rows><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>再调用里面的初始化方法,<code>org.springframework.boot.web.embedded.tomcat.TomcatWebServer#initialize</code><pre class="line-numbers language-java" data-language=java><code class=language-java><span class="token keyword">private</span> <span class="token keyword">void</span> <span class="token function">initialize</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">WebServerException</span> <span class="token punctuation">{</span>
<span class="token punctuation">}</span><span aria-hidden=true class=line-numbers-rows><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>再调用里面的初始化方法,<br><code>org.springframework.boot.web.embedded.tomcat.TomcatWebServer#initialize</code><pre class="line-numbers language-java" data-language=java><code class=language-java><span class="token keyword">private</span> <span class="token keyword">void</span> <span class="token function">initialize</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">WebServerException</span> <span class="token punctuation">{</span>
logger<span class="token punctuation">.</span><span class="token function">info</span><span class="token punctuation">(</span><span class="token string">"Tomcat initialized with port(s): "</span> <span class="token operator">+</span> <span class="token function">getPortsDescription</span><span class="token punctuation">(</span><span class="token boolean">false</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> logger<span class="token punctuation">.</span><span class="token function">info</span><span class="token punctuation">(</span><span class="token string">"Tomcat initialized with port(s): "</span> <span class="token operator">+</span> <span class="token function">getPortsDescription</span><span class="token punctuation">(</span><span class="token boolean">false</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">synchronized</span> <span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">.</span>monitor<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">synchronized</span> <span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">.</span>monitor<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">try</span> <span class="token punctuation">{</span> <span class="token keyword">try</span> <span class="token punctuation">{</span>


+ 1
- 0
leancloud.memo View File

@ -231,4 +231,5 @@
{"title":"springboot web server 启动逻辑 - Java - SpringBoot","url":"/2023/08/20/springboot-web-server-启动逻辑/"}, {"title":"springboot web server 启动逻辑 - Java - SpringBoot","url":"/2023/08/20/springboot-web-server-启动逻辑/"},
{"title":"springboot web server 启动逻辑","url":"/2023/08/20/springboot-web-server-启动逻辑/"}, {"title":"springboot web server 启动逻辑","url":"/2023/08/20/springboot-web-server-启动逻辑/"},
{"title":"springboot 请求响应处理流程","url":"/2023/08/27/springboot-请求响应处理流程/"}, {"title":"springboot 请求响应处理流程","url":"/2023/08/27/springboot-请求响应处理流程/"},
{"title":"springboot 处理请求的小分支-跳转 & cookie","url":"/2023/09/03/springboot-处理请求的小分支-跳转-cookie/"},
] ]

+ 1
- 1
leancloud_counter_security_urls.json
File diff suppressed because it is too large
View File


+ 1
- 1
page/32/index.html
File diff suppressed because it is too large
View File


+ 1
- 1
page/33/index.html
File diff suppressed because it is too large
View File


+ 1
- 1
page/34/index.html
File diff suppressed because it is too large
View File


+ 1
- 1
page/36/index.html
File diff suppressed because it is too large
View File


+ 4
- 4
page/37/index.html
File diff suppressed because it is too large
View File


+ 1
- 1
page/39/index.html
File diff suppressed because it is too large
View File


+ 5
- 5
page/40/index.html
File diff suppressed because it is too large
View File


+ 9966
- 9966
search.xml
File diff suppressed because it is too large
View File


+ 795
- 795
sitemap.xml
File diff suppressed because it is too large
View File


+ 1
- 1
tags/Dubbo/index.html
File diff suppressed because it is too large
View File


+ 1
- 1
tags/Windows/index.html
File diff suppressed because it is too large
View File


+ 1
- 1
tags/java/page/3/index.html
File diff suppressed because it is too large
View File


Loading…
Cancel
Save