/ K+ F- a( b: ^3 y" i N1 [从零开始写一个迷你版的Tomcat从零开始写一个迷你版的Tomcat0 W7 o, k8 t% X, u( H
8 k3 [ I' f3 ?6 h# L" g* L目录2 [! [9 C) D9 L5 y5 x( m
! b1 q0 |/ }4 \. I
从零开始写一个迷你版的Tomcat3 f. f6 D& o- [/ N* O* {
" Y- G2 ~; _# b) N
第一,提供Socket服务5 @5 o2 S, c3 b+ K9 I L1 w
1 B5 E, f" E; R9 v$ {) ^7 ?
第二,进行请求的分发 * ?/ V. F2 b! \4 G' {4 Y : k/ [! b2 E0 ~6 b* x第三,需要把请求和响应封装成request/response 8 `5 x- H9 ?+ O7 }. @* R2 r# N
一、封装请求对象 , q8 H- F9 {" N9 j6 h+ U9 ^ % t8 H8 G t. @3 r; G: P二、封装响应对象 3 \) P$ E, a- ]' C! j7 D 1 a' p% h3 Z% j+ S5 r0 ? q三、Servlet 请求处理基类 * U/ G6 p# Q# [; h3 y1 y: V' _: ?! p& ^+ u
四、Servlet 实现类 8 [" D6 A N. [7 R8 | # `, v4 c/ F; {5 R0 E5 P五、Servlet 配置 : ~8 Z( W7 @5 V) E4 x j' Y) v8 H, k
六、启动类 $ q( J& j O: c4 }$ P8 n% _' U8 `6 [8 [
七、测试 8 w$ h3 Y" M6 t5 U: f/ r , p( M7 ~$ ~3 e& U& k+ aTomcat,这只3脚猫,大学的时候就认识了,直到现在工作中,也常会和它打交道。这是一只神奇的猫,今天让我来抽象你,实现你! ( u; Z" E# S" m 8 {8 O( G! Z9 K7 H" `8 NTomcat是非常流行的Web Server,它还是一个满足Servlet规范的容器。那么想一想,Tomcat和我们的Web应用是什么关系? * i N4 ]2 O! F0 I* N q! Y& _ K `2 h
. x1 L& l" T; L# A
& Q/ B- g) m! B# |. x3 u7 r
从感性上来说,我们一般需要把Web应用打成WAR包部署到Tomcat 中,在我们的 Web应用中,我们要指明URL被哪个类的哪个方法所处理「不论是原始的Servlet 开发,还是现在流行的Spring MVC都必须指明」。1 A2 F0 J# r. S& C5 G
: W H. z G. O+ ^. a. U9 T+ H8 w& z! j- ]5 r
3 F/ v3 {) q K2 k
由于我们的Web应用是运行在Tomcat中,请求必定是先到达Tomcat的。Tomcat 对于请求实际上会进行如下的处理。1 g* H$ f8 A5 O; n, w+ z
( A8 K, ?" ]$ m% U2 e2 `
8 Y$ | I) |" w9 z0 A- k# g! n. u7 s$ U8 }& e' g
第一,提供Socket服务$ @3 N2 U( K1 R2 ~6 {" \7 m
* K" n% O5 j5 ~% k' o0 d4 D0 e3 H( t2 V5 J' S
7 ?. ]8 z( m7 P' d0 B1 H4 l9 P* b
Tomcat的启动,必然是Socket服务,只不过它支持HTTP协议而已! 8 T% P9 B0 j$ Y% q7 u& m% G6 A$ w- p4 h
0 C0 ] ~# v9 @! O( H
9 O' ?7 ?8 o2 Z$ r- C; c这里其实可以扩展思考下,Tomcat既然是基于Socket,那么是基于BIO or NIO or AIO 呢?9 L9 M9 d* v5 R, W& m
& H( c7 M$ R5 V$ c1 b
5 |, ]% i/ z+ A- K6 J7 O 6 s& l+ u2 H# Z, P第二,进行请求的分发 ( L7 K8 G$ _4 i% H/ K! B! p. O0 | y
% Q1 q# k: s; ?' U j m$ O) U" Q- G! w/ `, J2 [
要知道一个Tomcat可以为多个Web应用提供服务,很显然,Tomcat可以把URL下发到不同的Web应用。 * c5 \/ t5 X- p3 j1 l' |, k! n# s: u/ W! o
+ [. v- y* i$ ^! h F7 X" R
! V! D) q% O O* U& e
第三,需要把请求和响应封装成request/response 5 V2 |0 C. f) o! O; K+ a* b D& x5 y1 @1 f. C, ^