
{"id":3578,"date":"2021-12-24T22:01:10","date_gmt":"2021-12-24T14:01:10","guid":{"rendered":"https:\/\/mxzfun.com\/?p=3578"},"modified":"2021-12-24T22:01:10","modified_gmt":"2021-12-24T14:01:10","slug":"21-11-14-tomcat%e7%bb%84%e6%88%90%e4%b8%8e%e5%b7%a5%e4%bd%9c%e5%8e%9f%e7%90%86","status":"publish","type":"post","link":"http:\/\/mxzfun.com\/?p=3578","title":{"rendered":"21.11.14 \u2014\u2014 Tomcat\u7ec4\u6210\u4e0e\u5de5\u4f5c\u539f\u7406"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">\u9605\u8bfb\u672c\u6587\u5927\u6982\u9700\u8981 12 \u5206\u949f\u3002<\/p>\n\n\n<p class=\"has-text-align-center wp-block-paragraph\"><strong>\u6765\u81ea\uff1ajuejin.cn\/post\/6844903473482317837<\/strong><\/p>\n\n\n<h2 class=\"wp-block-heading\">Tomcat\u662f\u4ec0\u4e48<\/h2>\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>\u5f00\u6e90\u7684 Java Web \u5e94\u7528\u670d\u52a1\u5668\uff0c\u5b9e\u73b0\u4e86 Java EE(Java Platform Enterprise Edition)\u7684\u90e8 \u5206\u6280\u672f\u89c4\u8303\uff0c\u6bd4\u5982 Java Servlet\u3001Java Server Page\u3001JSTL\u3001Java WebSocket\u3002Java EE \u662f Sun \u516c \u53f8\u4e3a\u4f01\u4e1a\u7ea7\u5e94\u7528\u63a8\u51fa\u7684\u6807\u51c6\u5e73\u53f0\uff0c\u5b9a\u4e49\u4e86\u4e00\u7cfb\u5217\u7528\u4e8e\u4f01\u4e1a\u7ea7\u5f00\u53d1\u7684\u6280\u672f\u89c4\u8303\uff0c\u9664\u4e86\u4e0a\u8ff0\u7684\u4e4b\u5916\uff0c\u8fd8\u6709 EJB\u3001Java Mail\u3001JPA\u3001JTA\u3001JMS \u7b49\uff0c\u800c\u8fd9\u4e9b\u90fd\u4f9d\u8d56\u5177\u4f53\u5bb9\u5668\u7684\u5b9e\u73b0\u3002<\/p><\/blockquote>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"http:\/\/p1-jj.byteimg.com\/tos-cn-i-t2oaga2asx\/leancloud-assets\/dfcfa4209ace11657440.jpeg~tplv-t2oaga2asx-watermark.awebp\" alt=\"\"\/><\/figure>\n\n\n<p class=\"wp-block-paragraph\">\u4e0a\u56fe\u5bf9\u6bd4\u4e86 Java EE \u5bb9\u5668\u7684\u5b9e\u73b0\u60c5\u51b5\uff0cTomcat \u548c Jetty \u90fd\u53ea\u63d0\u4f9b\u4e86 Java Web \u5bb9\u5668\u5fc5\u9700\u7684 Servlet \u548c JSP \u89c4\u8303\uff0c\u5f00\u53d1\u8005\u8981\u60f3\u5b9e\u73b0\u5176\u4ed6\u7684\u529f\u80fd\uff0c\u9700\u8981\u81ea\u5df1\u4f9d\u8d56\u5176\u4ed6\u5f00\u6e90\u5b9e\u73b0\u3002<\/p>\n\n\n<p class=\"wp-block-paragraph\">Glassfish \u662f\u7531 sun \u516c\u53f8\u63a8\u51fa\uff0cJava EE \u6700\u65b0\u89c4\u8303\u51fa\u6765\u4e4b\u540e\uff0c\u9996\u5148\u4f1a\u5728 Glassfish \u4e0a\u8fdb\u884c\u5b9e \u73b0\uff0c\u6240\u4ee5\u662f\u7814\u7a76 Java EE \u6700\u65b0\u6280\u672f\u7684\u9996\u9009\u3002<\/p>\n\n\n<p class=\"wp-block-paragraph\">\u6700\u5e38\u89c1\u7684\u60c5\u51b5\u662f\u4f7f\u7528 Tomcat \u4f5c\u4e3a Java Web \u670d\u52a1\u5668\uff0c\u4f7f\u7528 Spring \u63d0\u4f9b\u7684\u5f00\u7bb1\u5373\u7528\u7684\u5f3a\u5927 \u7684\u529f\u80fd\uff0c\u5e76\u4f9d\u8d56\u5176\u4ed6\u5f00\u6e90\u5e93\u6765\u5b8c\u6210\u8d1f\u8d23\u7684\u4e1a\u52a1\u529f\u80fd\u5b9e\u73b0\u3002<\/p>\n\n\n<h2 class=\"wp-block-heading\">Servlet\u5bb9\u5668<\/h2>\n\n\n<p class=\"wp-block-paragraph\"><strong>Tomcat \u7ec4\u6210\u5982\u4e0b\u56fe<\/strong>\uff1a \u4e3b\u8981\u6709 Container \u548c Connector \u4ee5\u53ca\u76f8\u5173\u7ec4\u4ef6\u6784\u6210\u3002<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"http:\/\/p1-jj.byteimg.com\/tos-cn-i-t2oaga2asx\/leancloud-assets\/9ccc3ed9de0df39faa1e.jpeg~tplv-t2oaga2asx-watermark.awebp\" alt=\"\"\/><\/figure>\n\n\n<p class=\"wp-block-paragraph\"><strong>Server<\/strong>\uff1a\u6307\u7684\u5c31\u662f\u6574\u4e2a Tomcat \u670d \u52a1\u5668\uff0c\u5305\u542b\u591a\u7ec4\u670d\u52a1\uff0c\u8d1f\u8d23\u7ba1\u7406\u548c \u542f\u52a8\u5404\u4e2a Service\uff0c\u540c\u65f6\u76d1\u542c 8005 \u7aef\u53e3\u53d1\u8fc7\u6765\u7684 shutdown \u547d\u4ee4\uff0c\u7528 \u4e8e\u5173\u95ed\u6574\u4e2a\u5bb9\u5668 \uff1b<\/p>\n\n\n<p class=\"wp-block-paragraph\"><strong>Service<\/strong>\uff1aTomcat \u5c01\u88c5\u7684\u3001\u5bf9\u5916\u63d0 \u4f9b\u5b8c\u6574\u7684\u3001\u57fa\u4e8e\u7ec4\u4ef6\u7684 web \u670d\u52a1\uff0c \u5305\u542b Connectors\u3001Container \u4e24\u4e2a \u6838\u5fc3\u7ec4\u4ef6\uff0c\u4ee5\u53ca\u591a\u4e2a\u529f\u80fd\u7ec4\u4ef6\uff0c\u5404 \u4e2a Service \u4e4b\u95f4\u662f\u72ec\u7acb\u7684\uff0c\u4f46\u662f\u5171\u4eab \u540c\u4e00 JVM \u7684\u8d44\u6e90 \uff1b<\/p>\n\n\n<p class=\"wp-block-paragraph\"><strong>Connector<\/strong>\uff1aTomcat \u4e0e\u5916\u90e8\u4e16\u754c\u7684\u8fde\u63a5\u5668\uff0c\u76d1\u542c\u56fa\u5b9a\u7aef\u53e3\u63a5\u6536\u5916\u90e8\u8bf7\u6c42\uff0c\u4f20\u9012\u7ed9 Container\uff0c\u5e76 \u5c06 Container \u5904\u7406\u7684\u7ed3\u679c\u8fd4\u56de\u7ed9\u5916\u90e8\uff1b<\/p>\n\n\n<p class=\"wp-block-paragraph\"><strong>Container<\/strong>\uff1aCatalina\uff0cServlet \u5bb9\u5668\uff0c\u5185\u90e8\u6709\u591a\u5c42\u5bb9\u5668\u7ec4\u6210\uff0c\u7528\u4e8e\u7ba1\u7406 Servlet \u751f\u547d\u5468\u671f\uff0c\u8c03\u7528 servlet \u76f8\u5173\u65b9\u6cd5\u3002<\/p>\n\n\n<p class=\"wp-block-paragraph\"><strong>Loader<\/strong>\uff1a\u5c01\u88c5\u4e86 Java ClassLoader\uff0c\u7528\u4e8e Container \u52a0\u8f7d\u7c7b\u6587\u4ef6\uff1b Realm\uff1aTomcat \u4e2d\u4e3a web \u5e94\u7528\u7a0b\u5e8f\u63d0\u4f9b\u8bbf\u95ee\u8ba4\u8bc1\u548c\u89d2\u8272\u7ba1\u7406\u7684\u673a\u5236\uff1b<\/p>\n\n\n<p class=\"wp-block-paragraph\"><strong>JMX<\/strong>\uff1aJava SE \u4e2d\u5b9a\u4e49\u6280\u672f\u89c4\u8303\uff0c\u662f\u4e00\u4e2a\u4e3a\u5e94\u7528\u7a0b\u5e8f\u3001\u8bbe\u5907\u3001\u7cfb\u7edf\u7b49\u690d\u5165\u7ba1\u7406\u529f\u80fd\u7684\u6846\u67b6\uff0c\u901a\u8fc7 JMX \u53ef\u4ee5\u8fdc\u7a0b\u76d1\u63a7 Tomcat \u7684\u8fd0\u884c\u72b6\u6001\uff1b<\/p>\n\n\n<p class=\"wp-block-paragraph\"><strong>Jasper<\/strong>\uff1aTomcat \u7684 Jsp \u89e3\u6790\u5f15\u64ce\uff0c\u7528\u4e8e\u5c06 Jsp \u8f6c\u6362\u6210 Java \u6587\u4ef6\uff0c\u5e76\u7f16\u8bd1\u6210 class \u6587\u4ef6\u3002 Session\uff1a\u8d1f\u8d23\u7ba1\u7406\u548c\u521b\u5efa session\uff0c\u4ee5\u53ca Session \u7684\u6301\u4e45\u5316(\u53ef\u81ea\u5b9a\u4e49)\uff0c\u652f\u6301 session \u7684\u96c6 \u7fa4\u3002<\/p>\n\n\n<p class=\"wp-block-paragraph\"><strong>Pipeline<\/strong>\uff1a\u5728\u5bb9\u5668\u4e2d\u5145\u5f53\u7ba1\u9053\u7684\u4f5c\u7528\uff0c\u7ba1\u9053\u4e2d\u53ef\u4ee5\u8bbe\u7f6e\u5404\u79cd valve(\u9600\u95e8)\uff0c\u8bf7\u6c42\u548c\u54cd\u5e94\u5728\u7ecf\u7531\u7ba1 \u9053\u4e2d\u5404\u4e2a\u9600\u95e8\u5904\u7406\uff0c\u63d0\u4f9b\u4e86\u4e00\u79cd\u7075\u6d3b\u53ef\u914d\u7f6e\u7684\u5904\u7406\u8bf7\u6c42\u548c\u54cd\u5e94\u7684\u673a\u5236\u3002<\/p>\n\n\n<p class=\"wp-block-paragraph\"><strong>Naming<\/strong>\uff1a\u547d\u540d\u670d\u52a1\uff0cJNDI\uff0c Java \u547d\u540d\u548c\u76ee\u5f55\u63a5\u53e3\uff0c\u662f\u4e00\u7ec4\u5728 Java \u5e94\u7528\u4e2d\u8bbf\u95ee\u547d\u540d\u548c\u76ee\u5f55\u670d\u52a1\u7684 API\u3002\u547d\u540d\u670d\u52a1\u5c06\u540d\u79f0\u548c\u5bf9\u8c61\u8054\u7cfb\u8d77\u6765\uff0c\u4f7f\u5f97\u6211\u4eec\u53ef\u4ee5\u7528\u540d\u79f0\u8bbf\u95ee\u5bf9\u8c61\uff0c\u76ee\u5f55\u670d\u52a1\u4e5f\u662f\u4e00\u79cd\u547d\u540d \u670d\u52a1\uff0c\u5bf9\u8c61\u4e0d\u4f46\u6709\u540d\u79f0\uff0c\u8fd8\u6709\u5c5e\u6027\u3002Tomcat \u4e2d\u53ef\u4ee5\u4f7f\u7528 JNDI \u5b9a\u4e49\u6570\u636e\u6e90\u3001\u914d\u7f6e\u4fe1\u606f\uff0c\u7528\u4e8e\u5f00\u53d1 \u4e0e\u90e8\u7f72\u7684\u5206\u79bb\u3002<\/p>\n\n\n<p class=\"wp-block-paragraph\"><strong>Container\u7ec4\u6210<\/strong><\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"http:\/\/p1-jj.byteimg.com\/tos-cn-i-t2oaga2asx\/leancloud-assets\/1a2613edf5779c7bf184.jpeg~tplv-t2oaga2asx-watermark.awebp\" alt=\"\"\/><\/figure>\n\n\n<p class=\"wp-block-paragraph\">Engine\uff1aServlet \u7684\u9876\u5c42\u5bb9\u5668\uff0c\u5305\u542b\u4e00 \u4e2a\u6216\u591a\u4e2a Host \u5b50\u5bb9\u5668\uff1b Host\uff1a\u865a\u62df\u4e3b\u673a\uff0c\u8d1f\u8d23 web \u5e94\u7528\u7684\u90e8 \u7f72\u548c Context \u7684\u521b\u5efa\uff1b Context\uff1aWeb \u5e94\u7528\u4e0a\u4e0b\u6587\uff0c\u5305\u542b\u591a\u4e2a Wrapper\uff0c\u8d1f\u8d23 web \u914d\u7f6e\u7684\u89e3\u6790\u3001\u7ba1 \u7406\u6240\u6709\u7684 Web \u8d44\u6e90\uff1b Wrapper\uff1a\u6700\u5e95\u5c42\u7684\u5bb9\u5668\uff0c\u662f\u5bf9 Servlet \u7684\u5c01\u88c5\uff0c\u8d1f\u8d23 Servlet \u5b9e\u4f8b\u7684\u521b \u5efa\u3001\u6267\u884c\u548c\u9500\u6bc1\u3002<\/p>\n\n\n<p class=\"wp-block-paragraph\"><strong>\u751f\u547d\u5468\u671f\u7ba1\u7406<\/strong> Tomcat \u4e3a\u4e86\u65b9\u4fbf\u7ba1\u7406\u7ec4\u4ef6\u548c\u5bb9\u5668\u7684\u751f\u547d\u5468\u671f\uff0c\u5b9a\u4e49\u4e86\u4ece\u521b\u5efa\u3001\u542f\u52a8\u3001\u5230\u505c\u6b62\u3001\u9500\u6bc1\u5171 12 \u4e2d\u72b6\u6001\uff0ctomcat \u751f\u547d\u5468\u671f\u7ba1\u7406\u4e86\u5185\u90e8\u72b6\u6001\u53d8\u5316\u7684\u89c4\u5219\u63a7\u5236\uff0c\u7ec4\u4ef6\u548c\u5bb9\u5668\u53ea\u9700\u5b9e\u73b0\u76f8\u5e94\u7684\u751f\u547d\u5468\u671f \u65b9\u6cd5\u5373\u53ef\u5b8c\u6210\u5404\u751f\u547d\u5468\u671f\u5185\u7684\u64cd\u4f5c(initInternal\u3001startInternal\u3001stopInternal\u3001 destroyInternal)\uff1b<\/p>\n\n\n<p class=\"wp-block-paragraph\">\u6bd4\u5982\u6267\u884c\u521d\u59cb\u5316\u64cd\u4f5c\u65f6\uff0c\u4f1a\u5224\u65ad\u5f53\u524d\u72b6\u6001\u662f\u5426 New\uff0c\u5982\u679c\u4e0d\u662f\u5219\u629b\u51fa\u751f\u547d\u5468\u671f\u5f02\u5e38\uff1b\u662f\u7684 \u8bdd\u5219\u8bbe\u7f6e\u5f53\u524d\u72b6\u6001\u4e3a Initializing\uff0c\u5e76\u6267\u884c initInternal \u65b9\u6cd5\uff0c\u7531\u5b50\u7c7b\u5b9e\u73b0\uff0c\u65b9\u6cd5\u6267\u884c\u6210\u529f\u5219\u8bbe\u7f6e\u5f53 \u524d\u72b6\u6001\u4e3a Initialized\uff0c\u6267\u884c\u5931\u8d25\u5219\u8bbe\u7f6e\u4e3a Failed \u72b6\u6001\uff1b<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"http:\/\/p1-jj.byteimg.com\/tos-cn-i-t2oaga2asx\/leancloud-assets\/75e7563785c89a252f3f.jpeg~tplv-t2oaga2asx-watermark.awebp\" alt=\"\"\/><\/figure>\n\n\n<p class=\"wp-block-paragraph\">Tomcat \u7684\u751f\u547d\u5468\u671f\u7ba1\u7406\u5f15\u5165\u4e86\u4e8b\u4ef6\u673a\u5236\uff0c\u5728\u7ec4\u4ef6\u6216\u5bb9\u5668\u7684\u751f\u547d\u5468\u671f\u72b6\u6001\u53d1\u751f\u53d8\u5316\u65f6\u4f1a\u901a \u77e5\u4e8b\u4ef6\u76d1\u542c\u5668\uff0c\u76d1\u542c\u5668\u901a\u8fc7\u5224\u65ad\u4e8b\u4ef6\u7684\u7c7b\u578b\u6765\u8fdb\u884c\u76f8\u5e94\u7684\u64cd\u4f5c\u3002 \u4e8b\u4ef6\u76d1\u542c\u5668\u7684\u6dfb\u52a0\u53ef\u4ee5\u5728 server.xml \u6587\u4ef6\u4e2d\u8fdb\u884c\u914d\u7f6e;<\/p>\n\n\n<p class=\"wp-block-paragraph\">Tomcat \u5404\u7c7b\u5bb9\u5668\u7684\u914d\u7f6e\u8fc7\u7a0b\u5c31\u662f\u901a\u8fc7\u6dfb\u52a0 listener \u7684\u65b9\u5f0f\u6765\u8fdb\u884c\u7684\uff0c\u4ece\u800c\u8fbe\u5230\u914d\u7f6e\u903b\u8f91\u4e0e \u5bb9\u5668\u7684\u89e3\u8026\u3002\u5982 EngineConfig\u3001HostConfig\u3001ContextConfig\u3002 EngineConfig\uff1a\u4e3b\u8981\u6253\u5370\u542f\u52a8\u548c\u505c\u6b62\u65e5\u5fd7 HostConfig\uff1a\u4e3b\u8981\u5904\u7406\u90e8\u7f72\u5e94\u7528\uff0c\u89e3\u6790\u5e94\u7528 META-INF\/context.xml \u5e76\u521b\u5efa\u5e94\u7528\u7684 Context ContextConfig\uff1a\u4e3b\u8981\u89e3\u6790\u5e76\u5408\u5e76 web.xml\uff0c\u626b\u63cf\u5e94\u7528\u7684\u5404\u7c7b web \u8d44\u6e90 (filter\u3001servlet\u3001listener)<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"http:\/\/p1-jj.byteimg.com\/tos-cn-i-t2oaga2asx\/leancloud-assets\/1ea5e727c9ad4ca37e05.jpeg~tplv-t2oaga2asx-watermark.awebp\" alt=\"\"\/><\/figure>\n\n\n<p class=\"wp-block-paragraph\"><strong>Tomcat \u7684\u542f\u52a8\u8fc7\u7a0b<\/strong><\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"http:\/\/p1-jj.byteimg.com\/tos-cn-i-t2oaga2asx\/leancloud-assets\/94989563f76b0c2b6b19.jpeg~tplv-t2oaga2asx-watermark.awebp\" alt=\"\"\/><\/figure>\n\n\n<p class=\"wp-block-paragraph\">\u542f\u52a8\u4ece Tomcat \u63d0\u4f9b\u7684 start.sh \u811a\u672c\u5f00\u59cb\uff0cshell \u811a\u672c\u4f1a\u8c03\u7528 Bootstrap \u7684 main \u65b9\u6cd5\uff0c\u5b9e\u9645 \u8c03\u7528\u4e86 Catalina \u76f8\u5e94\u7684 load\u3001start \u65b9\u6cd5\u3002<\/p>\n\n\n<p class=\"wp-block-paragraph\">load \u65b9\u6cd5\u4f1a\u901a\u8fc7 Digester \u8fdb\u884c config\/server.xml \u7684\u89e3\u6790\uff0c\u5728\u89e3\u6790\u7684\u8fc7\u7a0b\u4e2d\u4f1a\u6839\u636e xml \u4e2d\u7684\u5173\u7cfb \u548c\u914d\u7f6e\u4fe1\u606f\u6765\u521b\u5efa\u5bb9\u5668\uff0c\u5e76\u8bbe\u7f6e\u76f8\u5173\u7684\u5c5e\u6027\u3002\u63a5\u7740 Catalina \u4f1a\u8c03\u7528 StandardServer \u7684 init \u548c start \u65b9\u6cd5\u8fdb\u884c\u5bb9\u5668\u7684\u521d\u59cb\u5316\u548c\u542f\u52a8\u3002<\/p>\n\n\n<p class=\"wp-block-paragraph\">\u6309\u7167 xml \u7684\u914d\u7f6e\u5173\u7cfb\uff0cserver \u7684\u5b50\u5143\u7d20\u662f service\uff0cservice \u7684\u5b50\u5143\u7d20\u662f\u9876\u5c42\u5bb9\u5668 Engine\uff0c\u6bcf\u5c42\u5bb9\u5668\u6709\u6301\u6709\u81ea\u5df1\u7684\u5b50\u5bb9\u5668\uff0c\u800c\u8fd9\u4e9b\u5143\u7d20\u90fd\u5b9e\u73b0\u4e86\u751f\u547d\u5468\u671f\u7ba1\u7406 \u7684\u5404\u4e2a\u65b9\u6cd5\uff0c\u56e0\u6b64\u5c31\u5f88\u5bb9\u6613\u7684\u5b8c\u6210\u6574\u4e2a\u5bb9\u5668\u7684\u542f\u52a8\u3001\u5173\u95ed\u7b49\u751f\u547d\u5468\u671f\u7684\u7ba1\u7406\u3002<\/p>\n\n\n<p class=\"wp-block-paragraph\">StandardServer \u5b8c\u6210 init \u548c start \u65b9\u6cd5\u8c03\u7528\u540e\uff0c\u4f1a\u4e00\u76f4\u76d1\u542c\u6765\u81ea 8005 \u7aef\u53e3(\u53ef\u914d\u7f6e)\uff0c\u5982\u679c\u63a5\u6536 \u5230 shutdown \u547d\u4ee4\uff0c\u5219\u4f1a\u9000\u51fa\u5faa\u73af\u76d1\u542c\uff0c\u6267\u884c\u540e\u7eed\u7684 stop \u548c destroy \u65b9\u6cd5\uff0c\u5b8c\u6210 Tomcat \u5bb9\u5668\u7684 \u5173\u95ed\u3002\u540c\u65f6\u4e5f\u4f1a\u8c03\u7528 JVM \u7684 Runtime.getRuntime()\ufd3f.addShutdownHook \u65b9\u6cd5\uff0c\u5728\u865a\u62df\u673a\u610f\u5916\u9000 \u51fa\u7684\u65f6\u5019\u6765\u5173\u95ed\u5bb9\u5668\u3002<\/p>\n\n\n<p class=\"wp-block-paragraph\">\u6240\u6709\u5bb9\u5668\u90fd\u662f\u7ee7\u627f\u81ea ContainerBase\uff0c\u57fa\u7c7b\u4e2d\u5c01\u88c5\u4e86\u5bb9\u5668\u4e2d\u7684\u91cd\u590d\u5de5\u4f5c\uff0c\u8d1f\u8d23\u542f\u52a8\u5bb9\u5668\u76f8\u5173\u7684\u7ec4 \u4ef6 Loader\u3001Logger\u3001Manager\u3001Cluster\u3001Pipeline\uff0c\u542f\u52a8\u5b50\u5bb9\u5668(\u7ebf\u7a0b\u6c60\u5e76\u53d1\u542f\u52a8\u5b50\u5bb9\u5668\uff0c\u901a\u8fc7 \u7ebf\u7a0b\u6c60 submit \u591a\u4e2a\u7ebf\u7a0b\uff0c\u8c03\u7528\u540e\u8fd4\u56de Future \u5bf9\u8c61\uff0c\u7ebf\u7a0b\u5185\u90e8\u542f\u52a8\u5b50\u5bb9\u5668\uff0c\u63a5\u7740\u8c03\u7528 Future \u5bf9\u8c61 \u7684 get \u65b9\u6cd5\u6765\u7b49\u5f85\u6267\u884c\u7ed3\u679c)\u3002<\/p>\n\n\n<pre class=\"wp-block-code\"><code>List&lt;Future&lt;Void&gt;&gt; results = new ArrayList&lt;Future&lt;Void&gt;&gt;();\nfor (int i = 0; i &lt; children.length; i++) {\n    results.add(startStopExecutor.submit(new StartChild(children&#91;i])));\n}\nboolean fail = false;\nfor (Future&lt;Void&gt; result \uff1a results) {\n    try {\n        result.get();\n    } catch (Exception e) {\n        log.error(sm.getString(\"containerBase.threadedStartFailed\")\uff0c e);\n        fail = true;\n    }\n}\n\u590d\u5236\u4ee3\u7801<\/code><\/pre>\n\n\n<p class=\"wp-block-paragraph\"><strong>Web \u5e94\u7528\u7684\u90e8\u7f72\u65b9\u5f0f<\/strong> \u6ce8\uff1acatalina.home\uff1a\u5b89\u88c5\u76ee\u5f55;catalina.base\uff1a\u5de5\u4f5c\u76ee\u5f55;\u9ed8\u8ba4\u503c user.dir<\/p>\n\n\n<ul class=\"wp-block-list\"><li>Server.xml \u914d\u7f6e Host \u5143\u7d20\uff0c\u6307\u5b9a appBase \u5c5e\u6027\uff0c\u9ed8\u8ba4$catalina.base\/webapps\/<\/li><li>Server.xml \u914d\u7f6e Context \u5143\u7d20\uff0c\u6307\u5b9a docBase\uff0c\u5143\u7d20\uff0c\u6307\u5b9a web \u5e94\u7528\u7684\u8def\u5f84<\/li><li>\u81ea\u5b9a\u4e49\u914d\u7f6e\uff1a\u5728$catalina.base\/EngineName\/HostName\/XXX.xml \u914d\u7f6e Context \u5143\u7d20<\/li><\/ul>\n\n\n<p class=\"wp-block-paragraph\">HostConfig \u76d1\u542c\u4e86 StandardHost \u5bb9\u5668\u7684\u4e8b\u4ef6\uff0c\u5728 start \u65b9\u6cd5\u4e2d\u89e3\u6790\u4e0a\u8ff0\u914d\u7f6e\u6587\u4ef6\uff1a<\/p>\n\n\n<ul class=\"wp-block-list\"><li>\u626b\u63cf appbase \u8def\u5f84\u4e0b\u7684\u6240\u6709\u6587\u4ef6\u5939\u548c war \u5305\uff0c\u89e3\u6790\u5404\u4e2a\u5e94\u7528\u7684 META-INF\/context.xml\uff0c\u5e76 \u521b\u5efa StandardContext\uff0c\u5e76\u5c06 Context \u52a0\u5165\u5230 Host \u7684\u5b50\u5bb9\u5668\u4e2d\u3002<\/li><li>\u89e3\u6790$catalina.base\/EngineName\/HostName\/\u4e0b\u7684\u6240\u6709 Context \u914d\u7f6e\uff0c\u627e\u5230\u76f8\u5e94 web \u5e94 \u7528\u7684\u4f4d\u7f6e\uff0c\u89e3\u6790\u5404\u4e2a\u5e94\u7528\u7684 META-INF\/context.xml\uff0c\u5e76\u521b\u5efa StandardContext\uff0c\u5e76\u5c06 Context \u52a0\u5165\u5230 Host \u7684\u5b50\u5bb9\u5668\u4e2d\u3002<\/li><\/ul>\n\n\n<p class=\"wp-block-paragraph\">\u6ce8\uff1a<\/p>\n\n\n<ul class=\"wp-block-list\"><li>HostConfig \u5e76\u6ca1\u6709\u5b9e\u9645\u89e3\u6790 Context.xml\uff0c\u800c\u662f\u5728 ContextConfig \u4e2d\u8fdb\u884c\u7684\u3002<\/li><li>HostConfig \u4e2d\u4f1a\u5b9a\u671f\u68c0\u67e5 watched \u8d44\u6e90\u6587\u4ef6(context.xml \u914d\u7f6e\u6587\u4ef6)<\/li><\/ul>\n\n\n<p class=\"wp-block-paragraph\">ContextConfig \u89e3\u6790 context.xml \u987a\u5e8f\uff1a<\/p>\n\n\n<ul class=\"wp-block-list\"><li>\u5148\u89e3\u6790\u5168\u5c40\u7684\u914d\u7f6e config\/context.xml<\/li><li>\u7136\u540e\u89e3\u6790 Host \u7684\u9ed8\u8ba4\u914d\u7f6e EngineName\/HostName\/context.xml.default<\/li><li>\u6700\u540e\u89e3\u6790\u5e94\u7528\u7684 META-INF\/context.xml<\/li><\/ul>\n\n\n<p class=\"wp-block-paragraph\">ContextConfig \u89e3\u6790 web.xml \u987a\u5e8f\uff1a<\/p>\n\n\n<ul class=\"wp-block-list\"><li>\u5148\u89e3\u6790\u5168\u5c40\u7684\u914d\u7f6e config\/web.xml<\/li><li>\u7136\u540e\u89e3\u6790 Host \u7684\u9ed8\u8ba4\u914d\u7f6e EngineName\/HostName\/web.xml.default \u63a5\u7740\u89e3\u6790\u5e94\u7528\u7684 MEB-INF\/web.xml<\/li><li>\u626b\u63cf\u5e94\u7528 WEB-INF\/lib\/\u4e0b\u7684 jar \u6587\u4ef6\uff0c\u89e3\u6790\u5176\u4e2d\u7684 META-INF\/web-fragment.xml \u6700\u540e\u5408\u5e76 xml \u5c01\u88c5\u6210 WebXml\uff0c\u5e76\u8bbe\u7f6e Context<\/li><\/ul>\n\n\n<p class=\"wp-block-paragraph\">\u6ce8\uff1a<\/p>\n\n\n<ul class=\"wp-block-list\"><li>\u626b\u63cf web \u5e94\u7528\u548c jar \u4e2d\u7684\u6ce8\u89e3(Filter\u3001Listener\u3001Servlet)\u5c31\u662f\u4e0a\u8ff0\u6b65\u9aa4\u4e2d\u8fdb\u884c\u7684\u3002<\/li><li>\u5bb9\u5668\u7684\u5b9a\u671f\u6267\u884c\uff1abackgroundProcess\uff0c\u7531 ContainerBase \u6765\u5b9e\u73b0\u7684\uff0c\u5e76\u4e14\u53ea\u6709\u5728\u9876\u5c42\u5bb9\u5668 \u4e2d\u624d\u4f1a\u5f00\u542f\u7ebf\u7a0b\u3002(backgroundProcessorDelay=10 \u6807\u5fd7\u4f4d\u6765\u63a7\u5236)<\/li><\/ul>\n\n\n<p class=\"wp-block-paragraph\">**Servlet \u751f\u547d\u5468\u671f **<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"http:\/\/p1-jj.byteimg.com\/tos-cn-i-t2oaga2asx\/leancloud-assets\/8e9e24820d15b183300b.jpeg~tplv-t2oaga2asx-watermark.awebp\" alt=\"\"\/><\/figure>\n\n\n<p class=\"wp-block-paragraph\">Servlet \u662f\u7528 Java \u7f16\u5199\u7684\u670d\u52a1\u5668\u7aef\u7a0b\u5e8f\u3002\u5176\u4e3b\u8981\u529f\u80fd\u5728\u4e8e\u4ea4\u4e92\u5f0f\u5730\u6d4f\u89c8\u548c\u4fee\u6539\u6570\u636e\uff0c\u751f\u6210\u52a8\u6001 Web \u5185\u5bb9\u3002<\/p>\n\n\n<ol class=\"wp-block-list\"><li>\u8bf7\u6c42\u5230\u8fbe server \u7aef\uff0cserver \u6839\u636e url \u6620\u5c04\u5230\u76f8\u5e94\u7684 Servlet<\/li><li>\u5224\u65ad Servlet \u5b9e\u4f8b\u662f\u5426\u5b58\u5728\uff0c\u4e0d\u5b58\u5728\u5219\u52a0\u8f7d\u548c\u5b9e\u4f8b\u5316 Servlet \u5e76\u8c03\u7528 init \u65b9\u6cd5<\/li><li>Server \u5206\u522b\u521b\u5efa Request \u548c Response \u5bf9\u8c61\uff0c\u8c03\u7528 Servlet \u5b9e\u4f8b\u7684 service \u65b9\u6cd5(service \u65b9\u6cd5 \u5185\u90e8\u4f1a\u6839\u636e http \u8bf7\u6c42\u65b9\u6cd5\u7c7b\u578b\u8c03\u7528\u76f8\u5e94\u7684 doXXX \u65b9\u6cd5)<\/li><li>doXXX \u65b9\u6cd5\u5185\u4e3a\u4e1a\u52a1\u903b\u8f91\u5b9e\u73b0\uff0c\u4ece Request \u5bf9\u8c61\u83b7\u53d6\u8bf7\u6c42\u53c2\u6570\uff0c\u5904\u7406\u5b8c\u6bd5\u4e4b\u540e\u5c06\u7ed3\u679c\u901a\u8fc7 response \u5bf9\u8c61\u8fd4\u56de\u7ed9\u8c03\u7528\u65b9<\/li><li>\u5f53 Server \u4e0d\u518d\u9700\u8981 Servlet \u65f6(\u4e00\u822c\u5f53 Server \u5173\u95ed\u65f6)\uff0cServer \u8c03\u7528 Servlet \u7684 destroy() \u65b9 \u6cd5\u3002<\/li><\/ol>\n\n\n<p class=\"wp-block-paragraph\">load on startup<\/p>\n\n\n<p class=\"wp-block-paragraph\">\u5f53\u503c\u4e3a 0 \u6216\u8005\u5927\u4e8e 0 \u65f6\uff0c\u8868\u793a\u5bb9\u5668\u5728\u5e94\u7528\u542f\u52a8\u65f6\u5c31\u52a0\u8f7d\u8fd9\u4e2a servlet; \u5f53\u662f\u4e00\u4e2a\u8d1f\u6570\u65f6\u6216\u8005\u6ca1\u6709\u6307\u5b9a\u65f6\uff0c\u5219\u6307\u793a\u5bb9\u5668\u5728\u8be5 servlet \u88ab\u9009\u62e9\u65f6\u624d\u52a0\u8f7d; \u6b63\u6570\u7684\u503c\u8d8a\u5c0f\uff0c\u542f\u52a8\u8be5 servlet \u7684\u4f18\u5148\u7ea7\u8d8a\u9ad8;<\/p>\n\n\n<p class=\"wp-block-paragraph\">single thread model<\/p>\n\n\n<p class=\"wp-block-paragraph\">\u6bcf\u6b21\u8bbf\u95ee servlet\uff0c\u65b0\u5efa servlet \u5b9e\u4f53\u5bf9\u8c61\uff0c\u4f46\u5e76\u4e0d\u80fd\u4fdd\u8bc1\u7ebf\u7a0b\u5b89\u5168\uff0c\u540c\u65f6 tomcat \u4f1a\u9650\u5236 servlet \u7684\u5b9e\u4f8b\u6570\u76ee \u6700\u4f73\u5b9e\u8df5\uff1a\u4e0d\u8981\u4f7f\u7528\u8be5\u6a21\u578b\uff0cservlet \u4e2d\u4e0d\u8981\u6709\u5168\u5c40\u53d8\u91cf<\/p>\n\n\n<p class=\"wp-block-paragraph\">**\u8bf7\u6c42\u5904\u7406\u8fc7\u7a0b  **<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"http:\/\/p1-jj.byteimg.com\/tos-cn-i-t2oaga2asx\/leancloud-assets\/36a5730697cd0e18a7f5.png~tplv-t2oaga2asx-watermark.awebp\" alt=\"\"\/><\/figure>\n\n\n<ol class=\"wp-block-list\"><li>\u6839\u636e server.xml \u914d\u7f6e\u7684\u6307\u5b9a\u7684 connector \u4ee5\u53ca\u7aef\u53e3\u76d1\u542c http\u3001\u6216\u8005 ajp \u8bf7\u6c42<\/li><li>\u8bf7\u6c42\u5230\u6765\u65f6\u5efa\u7acb\u8fde\u63a5,\u89e3\u6790\u8bf7\u6c42\u53c2\u6570,\u521b\u5efa Request \u548c Response \u5bf9\u8c61,\u8c03\u7528\u9876\u5c42\u5bb9\u5668 pipeline \u7684 invoke \u65b9\u6cd5<\/li><li>\u5bb9\u5668\u4e4b\u95f4\u5c42\u5c42\u8c03\u7528,\u6700\u7ec8\u8c03\u7528\u4e1a\u52a1 servlet \u7684 service \u65b9\u6cd5<\/li><li>Connector \u5c06 response \u6d41\u4e2d\u7684\u6570\u636e\u5199\u5230 socket \u4e2d<\/li><\/ol>\n\n\n<p class=\"wp-block-paragraph\">**Pipeline \u4e0e Valve  **<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"http:\/\/p1-jj.byteimg.com\/tos-cn-i-t2oaga2asx\/leancloud-assets\/76ce4dd2ecb33beabdbd.png~tplv-t2oaga2asx-watermark.awebp\" alt=\"\"\/><\/figure>\n\n\n<p class=\"wp-block-paragraph\">Pipeline \u53ef\u4ee5\u7406\u89e3\u4e3a\u73b0\u5b9e\u4e2d\u7684\u7ba1\u9053,Valve \u4e3a\u7ba1\u9053\u4e2d\u7684\u9600\u95e8,Request \u548c Response \u5bf9\u8c61\u5728\u7ba1\u9053\u4e2d \u7ecf\u8fc7\u5404\u4e2a\u9600\u95e8\u7684\u5904\u7406\u548c\u63a7\u5236\u3002<\/p>\n\n\n<p class=\"wp-block-paragraph\">\u6bcf\u4e2a\u5bb9\u5668\u7684\u7ba1\u9053\u4e2d\u90fd\u6709\u4e00\u4e2a\u5fc5\u4e0d\u53ef\u5c11\u7684 basic valve,\u5176\u4ed6\u7684\u90fd\u662f\u53ef\u9009\u7684,basic valve \u5728\u7ba1\u9053\u4e2d\u6700 \u540e\u8c03\u7528,\u540c\u65f6\u8d1f\u8d23\u8c03\u7528\u5b50\u5bb9\u5668\u7684\u7b2c\u4e00\u4e2a valve\u3002<\/p>\n\n\n<p class=\"wp-block-paragraph\">Valve \u4e2d\u4e3b\u8981\u7684\u4e09\u4e2a\u65b9\u6cd5:setNext\u3001getNext\u3001invoke;valve \u4e4b\u95f4\u7684\u5173\u7cfb\u662f\u5355\u5411\u94fe\u5f0f\u7ed3\u6784,\u672c\u8eab invoke \u65b9\u6cd5\u4e2d\u4f1a\u8c03\u7528\u4e0b\u4e00\u4e2a valve \u7684 invoke \u65b9\u6cd5\u3002<\/p>\n\n\n<p class=\"wp-block-paragraph\">\u5404\u5c42\u5bb9\u5668\u5bf9\u5e94\u7684 basic valve \u5206\u522b\u662f StandardEngineValve\u3001StandardHostValve\u3001 StandardContextValve\u3001StandardWrapperValve\u3002<\/p>\n\n\n<h2 class=\"wp-block-heading\">JSP\u5f15\u64ce<\/h2>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"http:\/\/p1-jj.byteimg.com\/tos-cn-i-t2oaga2asx\/leancloud-assets\/ad68a0bd4000a898060e.png~tplv-t2oaga2asx-watermark.awebp\" alt=\"\"\/><\/figure>\n\n\n<p class=\"wp-block-paragraph\"><strong>JSP \u751f\u547d\u5468\u671f<\/strong><\/p>\n\n\n<ul class=\"wp-block-list\"><li>\u7f16\u8bd1\u9636\u6bb5:servlet \u5bb9\u5668\u7f16\u8bd1 servlet \u6e90\u6587 \u4ef6,\u751f\u6210 servlet \u7c7b<\/li><li>\u521d\u59cb\u5316\u9636\u6bb5:\u52a0\u8f7d\u4e0e JSP \u5bf9\u5e94\u7684 servlet \u7c7b, \u521b\u5efa\u5176\u5b9e\u4f8b,\u5e76\u8c03\u7528\u5b83\u7684\u521d\u59cb\u5316\u65b9\u6cd5<\/li><li>\u6267\u884c\u9636\u6bb5:\u8c03\u7528\u4e0e JSP \u5bf9\u5e94\u7684 servlet \u5b9e\u4f8b\u7684 \u670d\u52a1\u65b9\u6cd5<\/li><li>\u9500\u6bc1\u9636\u6bb5:\u8c03\u7528\u4e0e JSP \u5bf9\u5e94\u7684 servlet \u5b9e\u4f8b\u7684 \u9500\u6bc1\u65b9\u6cd5,\u7136\u540e\u9500\u6bc1 servlet \u5b9e\u4f8b<\/li><\/ul>\n\n\n<p class=\"wp-block-paragraph\"><strong>JSP\u5143\u7d20<\/strong> \u4ee3\u7801\u7247\u6bb5\uff1a &lt;% \u4ee3\u7801\u7247\u6bb5 %&gt; JSP\u58f0\u660e\uff1a &lt;%! declaration; [ declaration; ]+ &#8230; %&gt; JSP\u8868\u8fbe\u5f0f\uff1a&lt;%= \u8868\u8fbe\u5f0f %&gt; JSP\u6ce8\u91ca\uff1a &lt;%&#8211; \u6ce8\u91ca &#8211;%&gt; JSP\u6307\u4ee4\uff1a &lt;%@ directive attribute=\u201cvalue\u201d %&gt; JSP\u884c\u4e3a\uff1a &lt;jsp:action_name attribute=\u201cvalue\u201d \/&gt; HTML\u5143\u7d20\uff1a html\/head\/body\/div\/p\/\u2026 JSP\u9690\u5f0f\u5bf9\u8c61\uff1arequest\u3001response\u3001out\u3001session\u3001application\u3001config\u3001 pageContext\u3001page\u3001Exception<\/p>\n\n\n<p class=\"wp-block-paragraph\">**JSP \u5143\u7d20\u8bf4\u660e ** \u4ee3\u7801\u7247\u6bb5:\u5305\u542b\u4efb\u610f\u91cf\u7684 Java \u8bed\u53e5\u3001\u53d8\u91cf\u3001\u65b9\u6cd5\u6216\u8868\u8fbe\u5f0f; JSP \u58f0\u660e:\u4e00\u4e2a\u58f0\u660e\u8bed\u53e5\u53ef\u4ee5\u58f0\u660e\u4e00\u4e2a\u6216\u591a\u4e2a\u53d8\u91cf\u3001\u65b9\u6cd5,\u4f9b\u540e\u9762\u7684 Java \u4ee3\u7801\u4f7f\u7528; JSP \u8868\u8fbe\u5f0f:\u8f93\u51fa Java \u8868\u8fbe\u5f0f\u7684\u503c,String \u5f62\u5f0f; JSP \u6ce8\u91ca:\u4e3a\u4ee3\u7801\u4f5c\u6ce8\u91ca\u4ee5\u53ca\u5c06\u67d0\u6bb5\u4ee3\u7801\u6ce8\u91ca\u6389 JSP \u6307\u4ee4:\u7528\u6765\u8bbe\u7f6e\u4e0e\u6574\u4e2a JSP \u9875\u9762\u76f8\u5173\u7684\u5c5e\u6027, &lt;%@ page &#8230; %&gt;\u5b9a\u4e49\u9875\u9762\u7684\u4f9d\u8d56\u5c5e\u6027,\u6bd4\u5982 language\u3001contentType\u3001errorPage\u3001 isErrorPage\u3001import\u3001isThreadSafe\u3001session \u7b49\u7b49 &lt;%@ include &#8230; %&gt;\u5305\u542b\u5176\u4ed6\u7684 JSP \u6587\u4ef6\u3001HTML \u6587\u4ef6\u6216\u6587\u672c\u6587\u4ef6,\u662f\u8be5 JSP \u6587\u4ef6\u7684\u4e00\u90e8\u5206,\u4f1a \u88ab\u540c\u65f6\u7f16\u8bd1\u6267\u884c &lt;%@ taglib &#8230; %&gt;\u5f15\u5165\u6807\u7b7e\u5e93\u7684\u5b9a\u4e49,\u53ef\u4ee5\u662f\u81ea\u5b9a\u4e49\u6807\u7b7e JSP \u884c\u4e3a:jsp:include\u3001jsp:useBean\u3001jsp:setProperty\u3001jsp:getProperty\u3001jsp:forward<\/p>\n\n\n<p class=\"wp-block-paragraph\">**Jsp \u89e3\u6790\u8fc7\u7a0b  **<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"http:\/\/p1-jj.byteimg.com\/tos-cn-i-t2oaga2asx\/leancloud-assets\/72e3e39e2218baccab31.png~tplv-t2oaga2asx-watermark.awebp\" alt=\"\"\/><\/figure>\n\n\n<ul class=\"wp-block-list\"><li>\u4ee3\u7801\u7247\u6bb5:\u5728_jspService()\u65b9\u6cd5\u5185\u76f4\u63a5\u8f93\u51fa<\/li><li>JSP \u58f0\u660e: \u5728 servlet \u7c7b\u4e2d\u8fdb\u884c\u8f93\u51fa<\/li><li>JSP \u8868\u8fbe\u5f0f:\u5728_jspService()\u65b9\u6cd5\u5185\u76f4\u63a5\u8f93\u51fa<\/li><li>JSP \u6ce8\u91ca:\u76f4\u63a5\u5ffd\u7565,\u4e0d\u8f93\u51fa<\/li><li>JSP \u6307\u4ee4:\u6839\u636e\u4e0d\u540c\u6307\u4ee4\u8fdb\u884c\u533a\u5206,include:\u5bf9\u5f15\u5165\u7684\u6587\u4ef6\u8fdb\u884c\u89e3\u6790;page \u76f8\u5173\u7684\u5c5e\u6027\u4f1a\u505a\u4e3a JSP \u7684\u5c5e\u6027,\u5f71\u54cd\u7684\u662f\u89e3\u6790\u548c\u8bf7\u6c42\u5904\u7406\u65f6\u7684\u884c\u4e3a<\/li><li>JSP \u884c\u4e3a:\u4e0d\u540c\u7684\u884c\u4e3a\u6709\u4e0d\u540c\u7684\u5904\u7406\u65b9\u5f0f,jsp:useBean \u4e3a\u4f8b,\u4f1a\u4ece pageContext \u6839\u636e scope \u7684 \u7c7b\u522b\u83b7\u53d6 bean \u5bf9\u8c61,\u5982\u679c\u6ca1\u6709\u4f1a\u521b\u5efa bean,\u540c\u65f6\u5b58\u5230\u76f8\u5e94 scope \u7684 pageContext \u4e2d<\/li><li>HTML:\u5728_jspService()\u65b9\u6cd5\u5185\u76f4\u63a5\u8f93\u51fa<\/li><li>JSP \u9690\u5f0f\u5bf9\u8c61:\u5728_jspService()\u65b9\u6cd5\u4f1a\u8fdb\u884c\u58f0\u660e,\u53ea\u80fd\u5728\u65b9\u6cd5\u4e2d\u4f7f\u7528;<\/li><\/ul>\n\n\n<h2 class=\"wp-block-heading\">Connector<\/h2>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"http:\/\/p1-jj.byteimg.com\/tos-cn-i-t2oaga2asx\/leancloud-assets\/edd423fe65e74312df50.png~tplv-t2oaga2asx-watermark.awebp\" alt=\"\"\/><\/figure>\n\n\n<p class=\"wp-block-paragraph\">Http:HTTP \u662f\u8d85\u6587\u672c\u4f20\u8f93\u534f\u8bae,\u662f\u5ba2\u6237\u7aef\u6d4f\u89c8\u5668\u6216\u5176\u4ed6\u7a0b\u5e8f\u4e0e Web \u670d\u52a1\u5668\u4e4b\u95f4\u7684\u5e94\u7528\u5c42\u901a\u4fe1\u534f \u8bae AJP:Apache JServ \u534f\u8bae(AJP)\u662f\u4e00\u79cd\u4e8c\u8fdb\u5236\u534f\u8bae,\u4e13\u95e8\u4ee3\u7406\u4ece Web \u670d\u52a1\u5668\u5230\u4f4d\u4e8e\u540e\u7aef\u7684\u5e94\u7528 \u7a0b\u5e8f\u670d\u52a1\u5668\u7684\u5165\u7ad9\u8bf7\u6c42 <strong>\u963b\u585e IO<\/strong><\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"http:\/\/p1-jj.byteimg.com\/tos-cn-i-t2oaga2asx\/leancloud-assets\/23ec3d5eb0c760ea277f.png~tplv-t2oaga2asx-watermark.awebp\" alt=\"\"\/><\/figure>\n\n\n<p class=\"wp-block-paragraph\"><strong>\u975e\u963b\u585e IO<\/strong><\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"http:\/\/p1-jj.byteimg.com\/tos-cn-i-t2oaga2asx\/leancloud-assets\/344773ecc6b8e38b8892.png~tplv-t2oaga2asx-watermark.awebp\" alt=\"\"\/><\/figure>\n\n\n<p class=\"wp-block-paragraph\">** IO\u591a\u8def\u590d\u7528**<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"http:\/\/p1-jj.byteimg.com\/tos-cn-i-t2oaga2asx\/leancloud-assets\/c5b59386908b65c3fcad.png~tplv-t2oaga2asx-watermark.awebp\" alt=\"\"\/><\/figure>\n\n\n<p class=\"wp-block-paragraph\">\u963b\u585e\u4e0e\u975e\u963b\u585e\u7684\u533a\u522b\u5728\u4e8e\u8fdb\u884c\u8bfb\u64cd\u4f5c\u548c\u5199\u64cd\u4f5c\u7684\u7cfb\u7edf\u8c03\u7528\u65f6\uff0c\u5982\u679c\u6b64\u65f6\u5185\u6838\u6001\u6ca1\u6709\u6570\u636e\u53ef\u8bfb\u6216\u8005\u6ca1\u6709\u7f13\u51b2\u7a7a\u95f4\u53ef\u5199\u65f6\uff0c\u662f\u5426\u963b\u585e\u3002<\/p>\n\n\n<p class=\"wp-block-paragraph\">IO\u591a\u8def\u590d\u7528\u7684\u597d\u5904\u5728\u4e8e\u53ef\u540c\u65f6\u76d1\u542c\u591a\u4e2asocket\u7684\u53ef\u8bfb\u548c\u53ef\u5199\u4e8b\u4ef6\uff0c\u8fd9\u6837\u5c31\u80fd\u4f7f\u5f97\u5e94\u7528\u53ef\u4ee5\u540c\u65f6\u76d1\u542c\u591a\u4e2asocket\uff0c\u91ca\u653e\u4e86\u5e94\u7528\u7ebf\u7a0b\u8d44\u6e90\u3002<\/p>\n\n\n<p class=\"wp-block-paragraph\"><strong>Tomcat\u5404\u7c7bConnector\u5bf9\u6bd4<\/strong><\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"http:\/\/p1-jj.byteimg.com\/tos-cn-i-t2oaga2asx\/leancloud-assets\/9123bf19b3402b447bed.jpeg~tplv-t2oaga2asx-watermark.awebp\" alt=\"\"\/><\/figure>\n\n\n<p class=\"wp-block-paragraph\">Connector\u7684\u5b9e\u73b0\u6a21\u5f0f\u6709\u4e09\u79cd\uff0c\u5206\u522b\u662fBIO\u3001NIO\u3001APR\uff0c\u53ef\u4ee5\u5728server.xml\u4e2d\u6307\u5b9a\u3002<\/p>\n\n\n<ul class=\"wp-block-list\"><li>JIO\uff1a\u7528java.io\u7f16\u5199\u7684TCP\u6a21\u5757\uff0c\u963b\u585eIO<\/li><li>NIO\uff1a\u7528java.nio\u7f16\u5199\u7684TCP\u6a21\u5757\uff0c\u975e\u963b\u585eIO\uff0c\uff08IO\u591a\u8def\u590d\u7528\uff09<\/li><li>APR\uff1a\u5168\u79f0Apache Portable Runtime\uff0c\u4f7f\u7528JNI\u7684\u65b9\u5f0f\u6765\u8fdb\u884c\u8bfb\u53d6\u6587\u4ef6\u4ee5\u53ca\u8fdb\u884c\u7f51\u7edc\u4f20\u8f93<\/li><\/ul>\n\n\n<p class=\"wp-block-paragraph\">Apache Portable Runtime\u662f\u4e00\u4e2a\u9ad8\u5ea6\u53ef\u79fb\u690d\u7684\u5e93\uff0c\u5b83\u662fApache HTTP Server 2.x\u7684\u6838\u5fc3\u3002 APR\u5177\u6709\u8bb8\u591a\u7528\u9014\uff0c\u5305\u62ec\u8bbf\u95ee\u9ad8\u7ea7IO\u529f\u80fd\uff08\u5982sendfile\uff0cepoll\u548cOpenSSL\uff09\uff0c\u64cd\u4f5c\u7cfb\u7edf\u7ea7\u529f\u80fd\uff08\u968f\u673a\u6570\u751f\u6210\uff0c\u7cfb\u7edf\u72b6\u6001\u7b49\uff09\u548c\u672c\u5730\u8fdb\u7a0b\u5904\u7406\uff08\u5171\u4eab\u5185\u5b58\uff0cNT\u7ba1\u9053\u548cUnix\u5957\u63a5\u5b57\uff09\u3002<\/p>\n\n\n<p class=\"wp-block-paragraph\">\u8868\u683c\u4e2d\u5b57\u6bb5\u542b\u4e49\u8bf4\u660e\uff1a<\/p>\n\n\n<ul class=\"wp-block-list\"><li>Support Polling\uff1a\u662f\u5426\u652f\u6301\u57fa\u4e8eIO\u591a\u8def\u590d\u7528\u7684socket\u4e8b\u4ef6\u8f6e\u8be2<\/li><li>Polling Size\uff1a\u8f6e\u8be2\u7684\u6700\u5927\u8fde\u63a5\u6570<\/li><li>Wait for next Request\uff1a\u5728\u7b49\u5f85\u4e0b\u4e00\u4e2a\u8bf7\u6c42\u65f6\uff0c\u5904\u7406\u7ebf\u7a0b\u662f\u5426\u91ca\u653e\uff0cBIO\u662f\u6ca1\u6709\u91ca\u653e\u7684\uff0c\u6240\u4ee5\u5728keep-alive=true\u7684\u60c5\u51b5\u4e0b\u5904\u7406\u7684\u5e76\u53d1\u8fde\u63a5\u6570\u6709\u9650<\/li><li>Read Request Headers\uff1a\u7531\u4e8erequest header\u6570\u636e\u8f83\u5c11\uff0c\u53ef\u4ee5\u7531\u5bb9\u5668\u63d0\u524d\u89e3\u6790\u5b8c\u6bd5\uff0c\u4e0d\u9700\u8981\u963b\u585e<\/li><li>Read Request Body\uff1a\u8bfb\u53d6request body\u7684\u6570\u636e\u662f\u5e94\u7528\u4e1a\u52a1\u903b\u8f91\u7684\u4e8b\u60c5\uff0c\u540c\u65f6Servlet\u7684\u9650\u5236\uff0c\u662f\u9700\u8981\u963b\u585e\u8bfb\u53d6\u7684<\/li><li>Write Response\uff1a\u8ddf\u8bfb\u53d6request body\u7684\u903b\u8f91\u7c7b\u4f3c\uff0c\u540c\u6837\u9700\u8981\u963b\u585e\u5199<\/li><\/ul>\n\n\n<p class=\"wp-block-paragraph\"><strong>NIO\u5904\u7406\u76f8\u5173\u7c7b<\/strong><\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"http:\/\/p1-jj.byteimg.com\/tos-cn-i-t2oaga2asx\/leancloud-assets\/36ca2efea0d5318dc6d1.jpeg~tplv-t2oaga2asx-watermark.awebp\" alt=\"\"\/><\/figure>\n\n\n<p class=\"wp-block-paragraph\">Acceptor\u7ebf\u7a0b\u8d1f\u8d23\u63a5\u6536\u8fde\u63a5\uff0c\u8c03\u7528accept\u65b9\u6cd5\u963b\u585e\u63a5\u6536\u5efa\u7acb\u7684\u8fde\u63a5\uff0c\u5e76\u5bf9socket\u8fdb\u884c\u5c01\u88c5\u6210PollerEvent\uff0c\u6307\u5b9a\u6ce8\u518c\u7684\u4e8b\u4ef6\u4e3aop_read\uff0c\u5e76\u653e\u5165\u5230EventQueue\u961f\u5217\u4e2d\uff0cPollerEvent\u7684run\u65b9\u6cd5\u903b\u8f91\u7684\u662f\u5c06Selector\u6ce8\u518c\u5230socket\u7684\u6307\u5b9a\u4e8b\u4ef6\uff1b<\/p>\n\n\n<p class=\"wp-block-paragraph\">Poller\u7ebf\u7a0b\u4eceEventQueue\u83b7\u53d6PollerEvent\uff0c\u5e76\u6267\u884cPollerEvent\u7684run\u65b9\u6cd5\uff0c\u8c03\u7528Selector\u7684select\u65b9\u6cd5\uff0c\u5982\u679c\u6709\u53ef\u8bfb\u7684Socket\u5219\u521b\u5efaHttp11NioProcessor\uff0c\u653e\u5165\u5230\u7ebf\u7a0b\u6c60\u4e2d\u6267\u884c\uff1b<\/p>\n\n\n<p class=\"wp-block-paragraph\">CoyoteAdapter\u662fConnector\u5230Container\u7684\u9002\u914d\u5668\uff0cHttp11NioProcessor\u8c03\u7528\u5176\u63d0\u4f9b\u7684service\u65b9\u6cd5\uff0c\u5185\u90e8\u521b\u5efaRequest\u548cResponse\u5bf9\u8c61\uff0c\u5e76\u8c03\u7528\u6700\u9876\u5c42\u5bb9\u5668\u7684Pipeline\u4e2d\u7684\u7b2c\u4e00\u4e2aValve\u7684invoke\u65b9\u6cd5<\/p>\n\n\n<p class=\"wp-block-paragraph\">Mapper\u4e3b\u8981\u5904\u7406http url \u5230servlet\u7684\u6620\u5c04\u89c4\u5219\u7684\u89e3\u6790\uff0c\u5bf9\u5916\u63d0\u4f9bmap\u65b9\u6cd5<\/p>\n\n\n<p class=\"wp-block-paragraph\"><strong>NIO Connector\u4e3b\u8981\u53c2\u6570<\/strong><\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"http:\/\/p1-jj.byteimg.com\/tos-cn-i-t2oaga2asx\/leancloud-assets\/6a25927b428e2e6db858.jpeg~tplv-t2oaga2asx-watermark.awebp\" alt=\"\"\/><\/figure>\n\n\n<h2 class=\"wp-block-heading\">Comet<\/h2>\n\n\n<p class=\"wp-block-paragraph\">Comet\u662f\u4e00\u79cd\u7528\u4e8eweb\u7684\u63a8\u9001\u6280\u672f\uff0c\u80fd\u4f7f\u670d\u52a1\u5668\u5b9e\u65f6\u5730\u5c06\u66f4\u65b0\u7684\u4fe1\u606f\u4f20\u9001\u5230\u5ba2\u6237\u7aef\uff0c\u800c\u65e0\u987b\u5ba2\u6237\u7aef\u53d1\u51fa\u8bf7\u6c42 \u5728WebSocket\u51fa\u6765\u4e4b\u524d\uff0c\u5982\u679c\u4e0d\u4f7f\u7528comet\uff0c\u53ea\u80fd\u901a\u8fc7\u6d4f\u89c8\u5668\u7aef\u8f6e\u8be2Server\u6765\u6a21\u62df\u5b9e\u73b0\u670d\u52a1\u5668\u7aef\u63a8\u9001\u3002 Comet\u652f\u6301servlet\u5f02\u6b65\u5904\u7406IO\uff0c\u5f53\u8fde\u63a5\u4e0a\u6570\u636e\u53ef\u8bfb\u65f6\u89e6\u53d1\u4e8b\u4ef6\uff0c\u5e76\u5f02\u6b65\u5199\u6570\u636e(\u963b\u585e)<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"http:\/\/p1-jj.byteimg.com\/tos-cn-i-t2oaga2asx\/leancloud-assets\/030676ad4f439effcd6f.jpeg~tplv-t2oaga2asx-watermark.awebp\" alt=\"\"\/><\/figure>\n\n\n<p class=\"wp-block-paragraph\">Tomcat\u8981\u5b9e\u73b0Comet\uff0c\u53ea\u9700\u7ee7\u627fHttpServlet\u540c\u65f6\uff0c\u5b9e\u73b0CometProcessor\u63a5\u53e3<\/p>\n\n\n<ul class=\"wp-block-list\"><li>Begin\uff1a\u65b0\u7684\u8bf7\u6c42\u8fde\u63a5\u63a5\u5165\u8c03\u7528\uff0c\u53ef\u8fdb\u884c\u4e0eRequest\u548cResponse\u76f8\u5173\u7684\u5bf9\u8c61\u521d\u59cb\u5316\u64cd\u4f5c\uff0c\u5e76\u4fdd\u5b58response\u5bf9\u8c61\uff0c\u7528\u4e8e\u540e\u7eed\u5199\u5165\u6570\u636e<\/li><li>Read\uff1a\u8bf7\u6c42\u8fde\u63a5\u6709\u6570\u636e\u53ef\u8bfb\u65f6\u8c03\u7528<\/li><li>End\uff1a\u5f53\u6570\u636e\u53ef\u7528\u65f6\uff0c\u5982\u679c\u8bfb\u53d6\u5230\u6587\u4ef6\u7ed3\u675f\u6216\u8005response\u88ab\u5173\u95ed\u65f6\u5219\u88ab\u8c03\u7528<\/li><li>Error\uff1a\u5728\u8fde\u63a5\u4e0a\u53d1\u751f\u5f02\u5e38\u65f6\u8c03\u7528\uff0c\u6570\u636e\u8bfb\u53d6\u5f02\u5e38\u3001\u8fde\u63a5\u65ad\u5f00\u3001\u5904\u7406\u5f02\u5e38\u3001socket\u8d85\u65f6<\/li><\/ul>\n\n\n<p class=\"wp-block-paragraph\">Note\uff1a<\/p>\n\n\n<ul class=\"wp-block-list\"><li>Read\uff1a\u5728post\u8bf7\u6c42\u6709\u6570\u636e\uff0c\u4f46\u5728begin\u4e8b\u4ef6\u4e2d\u6ca1\u6709\u5904\u7406\uff0c\u5219\u4f1a\u8c03\u7528read\uff0c\u5982\u679cread\u6ca1\u6709\u8bfb\u53d6\u6570\u636e\uff0c\u5728\u4f1a\u89e6\u53d1Error\u56de\u8c03\uff0c\u5173\u95edsocket<\/li><li>End\uff1a\u5f53socket\u8d85\u65f6\uff0c\u5e76\u4e14response\u88ab\u5173\u95ed\u65f6\u4e5f\u4f1a\u8c03\u7528\uff1bserver\u88ab\u5173\u95ed\u65f6\u8c03\u7528<\/li><li>Error\uff1a\u9664\u4e86socket\u8d85\u65f6\u4e0d\u4f1a\u5173\u95edsocket\uff0c\u5176\u4ed6\u90fd\u4f1a\u5173\u95edsocket<\/li><li>End\u548cError\u65f6\u95f4\u89e6\u53d1\u65f6\u5e94\u5173\u95ed\u5f53\u524dcomet\u4f1a\u8bdd\uff0c\u5373\u8c03\u7528CometEvent\u7684close\u65b9\u6cd5 Note\uff1a\u5728\u4e8b\u4ef6\u89e6\u53d1\u65f6\u8981\u505a\u597d\u7ebf\u7a0b\u5b89\u5168\u7684\u64cd\u4f5c<\/li><\/ul>\n\n\n<h2 class=\"wp-block-heading\">\u5f02\u6b65Servlet<\/h2>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"http:\/\/p1-jj.byteimg.com\/tos-cn-i-t2oaga2asx\/leancloud-assets\/11e26c65a2cdc42e8f05.png~tplv-t2oaga2asx-watermark.awebp\" alt=\"\"\/><\/figure>\n\n\n<p class=\"wp-block-paragraph\">\u4f20\u7edf\u6d41\u7a0b\uff1a<\/p>\n\n\n<ul class=\"wp-block-list\"><li>\u9996\u5148\uff0cServlet \u63a5\u6536\u5230\u8bf7\u6c42\u4e4b\u540e\uff0crequest\u6570\u636e\u89e3\u6790\uff1b<\/li><li>\u63a5\u7740\uff0c\u8c03\u7528\u4e1a\u52a1\u63a5\u53e3\u7684\u67d0\u4e9b\u65b9\u6cd5\uff0c\u4ee5\u5b8c\u6210\u4e1a\u52a1\u5904\u7406\uff1b<\/li><li>\u6700\u540e\uff0c\u6839\u636e\u5904\u7406\u7684\u7ed3\u679c\u63d0\u4ea4\u54cd\u5e94\uff0cServlet \u7ebf\u7a0b\u7ed3\u675f<\/li><\/ul>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"http:\/\/p1-jj.byteimg.com\/tos-cn-i-t2oaga2asx\/leancloud-assets\/7c352f6a0239331ec91f.png~tplv-t2oaga2asx-watermark.awebp\" alt=\"\"\/><\/figure>\n\n\n<p class=\"wp-block-paragraph\">\u5f02\u6b65\u5904\u7406\u6d41\u7a0b\uff1a<\/p>\n\n\n<ul class=\"wp-block-list\"><li>\u5ba2\u6237\u7aef\u53d1\u9001\u4e00\u4e2a\u8bf7\u6c42<\/li><li>Servlet\u5bb9\u5668\u5206\u914d\u4e00\u4e2a\u7ebf\u7a0b\u6765\u5904\u7406\u5bb9\u5668\u4e2d\u7684\u4e00\u4e2aservlet<\/li><li>servlet\u8c03\u7528request.startAsync()\uff0c\u4fdd\u5b58AsyncContext, \u7136\u540e\u8fd4\u56de<\/li><li>\u4efb\u4f55\u65b9\u5f0f\u5b58\u5728\u7684\u5bb9\u5668\u7ebf\u7a0b\u90fd\u5c06\u9000\u51fa\uff0c\u4f46\u662fresponse\u4ecd\u7136\u4fdd\u6301\u5f00\u653e<\/li><li>\u4e1a\u52a1\u7ebf\u7a0b\u4f7f\u7528\u4fdd\u5b58\u7684AsyncContext\u6765\u5b8c\u6210\u54cd\u5e94\uff08\u7ebf\u7a0b\u6c60\uff09<\/li><li>\u5ba2\u6237\u7aef\u6536\u5230\u54cd\u5e94<\/li><\/ul>\n\n\n<p class=\"wp-block-paragraph\">Servlet \u7ebf\u7a0b\u5c06\u8bf7\u6c42\u8f6c\u4ea4\u7ed9\u4e00\u4e2a\u5f02\u6b65\u7ebf\u7a0b\u6765\u6267\u884c\u4e1a\u52a1\u5904\u7406\uff0c\u7ebf\u7a0b\u672c\u8eab\u8fd4\u56de\u81f3\u5bb9\u5668\uff0c\u6b64\u65f6 Servlet \u8fd8\u6ca1\u6709\u751f\u6210\u54cd\u5e94\u6570\u636e\uff0c\u5f02\u6b65\u7ebf\u7a0b\u5904\u7406\u5b8c\u4e1a\u52a1\u4ee5\u540e\uff0c\u53ef\u4ee5\u76f4\u63a5\u751f\u6210\u54cd\u5e94\u6570\u636e\uff08\u5f02\u6b65\u7ebf\u7a0b\u62e5\u6709 ServletRequest \u548c ServletResponse \u5bf9\u8c61\u7684\u5f15\u7528\uff09<\/p>\n\n\n<p class=\"wp-block-paragraph\"><strong>\u4e3a\u4ec0\u4e48web\u5e94\u7528\u4e2d\u652f\u6301\u5f02\u6b65\uff1f<\/strong><\/p>\n\n\n<p class=\"wp-block-paragraph\">\u63a8\u51fa\u5f02\u6b65\uff0c\u4e3b\u8981\u662f\u9488\u5bf9\u90a3\u4e9b\u6bd4\u8f83\u8017\u65f6\u7684\u8bf7\u6c42\uff1a\u6bd4\u5982\u4e00\u6b21\u7f13\u6162\u7684\u6570\u636e\u5e93\u67e5\u8be2\uff0c\u4e00\u6b21\u5916\u90e8REST API\u8c03\u7528, \u6216\u8005\u662f\u5176\u4ed6\u4e00\u4e9bI\/O\u5bc6\u96c6\u578b\u64cd\u4f5c\u3002\u8fd9\u79cd\u8017\u65f6\u7684\u8bf7\u6c42\u4f1a\u5f88\u5feb\u7684\u8017\u5149Servlet\u5bb9\u5668\u7684\u7ebf\u7a0b\u6c60\uff0c\u7ee7\u800c\u5f71\u54cd\u53ef\u6269\u5c55\u6027\u3002<\/p>\n\n\n<p class=\"wp-block-paragraph\">Note\uff1a\u4ece\u5ba2\u6237\u7aef\u7684\u89d2\u5ea6\u6765\u770b\uff0crequest\u4ecd\u7136\u50cf\u4efb\u4f55\u5176\u4ed6\u7684HTTP\u7684request-response\u4ea4\u4e92\u4e00\u6837\uff0c\u53ea\u662f\u8017\u8d39\u4e86\u66f4\u957f\u7684\u65f6\u95f4\u800c\u5df2<\/p>\n\n\n<p class=\"wp-block-paragraph\"><strong>\u5f02\u6b65\u4e8b\u4ef6\u76d1\u542c<\/strong><\/p>\n\n\n<ul class=\"wp-block-list\"><li>onStartAsync\uff1aRequest\u8c03\u7528startAsync\u65b9\u6cd5\u65f6\u89e6\u53d1<\/li><li>onComplete\uff1asyncContext\u8c03\u7528complete\u65b9\u6cd5\u65f6\u89e6\u53d1<\/li><li>onError\uff1a\u5904\u7406\u8bf7\u6c42\u7684\u8fc7\u7a0b\u51fa\u73b0\u5f02\u5e38\u65f6\u89e6\u53d1<\/li><li>onTimeout\uff1asocket\u8d85\u65f6\u89e6\u53d1<\/li><\/ul>\n\n\n<p class=\"wp-block-paragraph\">Note : onError\/ onTimeout\u89e6\u53d1\u540e\uff0c\u4f1a\u7d27\u63a5\u7740\u56de\u8c03onComplete onComplete \u6267\u884c\u540e\uff0c\u5c31\u4e0d\u53ef\u518d\u64cd\u4f5crequest\u548cresponse\u3002<br \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tomcat\u662f\u4ec0\u4e48<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,5,7],"tags":[10,12,13],"class_list":["post-3578","post","type-post","status-publish","format-standard","hentry","category-2","category-5","category-7","tag-10","tag-12","tag-13"],"views":728,"_links":{"self":[{"href":"http:\/\/mxzfun.com\/index.php?rest_route=\/wp\/v2\/posts\/3578","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/mxzfun.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/mxzfun.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/mxzfun.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/mxzfun.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3578"}],"version-history":[{"count":0,"href":"http:\/\/mxzfun.com\/index.php?rest_route=\/wp\/v2\/posts\/3578\/revisions"}],"wp:attachment":[{"href":"http:\/\/mxzfun.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3578"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/mxzfun.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3578"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/mxzfun.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3578"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}