+ o. \7 K+ a- M/ Y1 G. N 2 }# g. }8 W3 w$ t0 K% ~3 L4 n+ c从感性上来说,我们一般需要把Web应用打成WAR包部署到Tomcat 中,在我们的 Web应用中,我们要指明URL被哪个类的哪个方法所处理「不论是原始的Servlet 开发,还是现在流行的Spring MVC都必须指明」。' P: ~- w8 j; J* I2 W7 r/ ~* B
& C( @. e8 @9 {1 Z8 I- z; q5 y2 O6 B( I8 F' i
& Q q5 b. e& P* {( `由于我们的Web应用是运行在Tomcat中,请求必定是先到达Tomcat的。Tomcat 对于请求实际上会进行如下的处理。5 H8 V4 ~" c+ j6 a4 r. p% v7 g9 g
- @' {9 `6 y( ^: p
! I* ?3 Y7 z. E
1 l }" o- O; r9 a' z4 ~
第一,提供Socket服务) }! Q* a f7 J7 U
; l' c: b2 N2 j. E" C, @( W4 y 8 b7 `0 a" s& i; q! z5 j " \' }$ P* e3 l2 }- U& MTomcat的启动,必然是Socket服务,只不过它支持HTTP协议而已!; Q5 s+ k/ [: M1 N5 ]- h
3 {) U( H- Y# M" a/ Y6 |7 T9 }/ s x+ _
* ?( x, {, ]( o! m5 t$ D这里其实可以扩展思考下,Tomcat既然是基于Socket,那么是基于BIO or NIO or AIO 呢?9 Z$ l: h8 V0 g4 p$ j% ]
( k: O4 M* W! e; h5 b7 R$ ^
; X% x1 y* z5 ~+ @2 R0 @# j2 F2 s
' k8 e$ U4 E2 {+ q# e! }5 V
第二,进行请求的分发4 G3 F8 N( T! {- Y
0 g& }' B' _- O5 J( E6 F
/ @* L5 _2 G* z9 I, P. A3 U @; Y 2 m9 M! J$ f# q; R* [0 b* y) ]要知道一个Tomcat可以为多个Web应用提供服务,很显然,Tomcat可以把URL下发到不同的Web应用。* \, r7 S U, Z2 o) `, c5 u
$ P3 Z( ~; Z/ m6 I. n; b
) K% I6 O" G, j$ b3 A
& _& H& h0 y) Y' n
第三,需要把请求和响应封装成request/response0 B+ f2 ^2 r5 g/ K9 x: w' p! m; ?, J
" ~2 f$ ?. y: n- @& W: A0 K7 L2 g4 ]. D5 h) m( e
3 h. @0 s* u. O' ^2 @% J$ b: j: W
我们在Web应用这一层,可从来没有封装过request/response 的,我们都是直接使用的,这就是因为Tomcat已经为你做好了! 0 |9 V' c8 c3 ]$ X) m+ t& z / M) ~( }) d v4 i) w' m! H }1 ?9 J, Q$ s
话不多说,先来看一眼工程截图。5 K( }5 T% V( |