- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 565537 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174884
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
& \* z! N' s+ p9 D* n从零开始写一个迷你版的Tomcat从零开始写一个迷你版的Tomcat, n: B- _+ O1 Y& Y
" I! K0 N6 J, b9 ], t6 S2 G2 H: s目录
+ j9 w4 {9 [- }2 @+ f v& y' k# k- f' Q/ o# u
从零开始写一个迷你版的Tomcat* l- x4 R4 S9 i5 _# F8 M1 L9 B0 j: g
1 i D1 a( O! C1 O8 m第一,提供Socket服务3 O/ s' E* P' O" o) E# e6 B
, O3 H5 t, S3 d J第二,进行请求的分发
7 K. q3 H8 B1 ]& v
( B: l! s9 q! O, I3 Z: D/ t0 E第三,需要把请求和响应封装成request/response
, `/ s4 z" c3 R5 v1 L5 e, c6 l6 |& J" B
一、封装请求对象% R" Q4 ?0 ?. H2 ?8 k
3 w2 b# |1 _; N二、封装响应对象, ^7 b1 z: L% z
) r9 l1 n- s) T. ~ U2 a7 Z9 R/ x3 p三、Servlet 请求处理基类& O! m2 j) O+ V* ?
2 `6 B# m; ~2 d2 h! C
四、Servlet 实现类
8 c+ t* |' k$ ^" b' w9 ?$ }6 w! x) a2 u4 n
五、Servlet 配置
; b' r3 K6 j" c) f4 ?
) c- v8 z1 @9 b2 k" Q六、启动类
% }/ O) Z, ~. n2 @& _
/ M* `, t% @ O2 h七、测试
) g/ L3 w9 v5 e9 ]4 Y, ]8 @9 _; ^7 y
Tomcat,这只3脚猫,大学的时候就认识了,直到现在工作中,也常会和它打交道。这是一只神奇的猫,今天让我来抽象你,实现你!
0 W& R$ N# N) ]0 G+ n- H" C
$ j4 ?( q2 K' YTomcat是非常流行的Web Server,它还是一个满足Servlet规范的容器。那么想一想,Tomcat和我们的Web应用是什么关系?
$ j7 ]/ i$ r! a: d; Z$ N& z& U) J
! Q" B Y! K+ w# p. W4 J5 L/ ^; I6 i, q: R( ~: d* k
% T7 \( _# n* Q: a* M. i) n( h从感性上来说,我们一般需要把Web应用打成WAR包部署到Tomcat 中,在我们的 Web应用中,我们要指明URL被哪个类的哪个方法所处理「不论是原始的Servlet 开发,还是现在流行的Spring MVC都必须指明」。! x% f0 o0 D3 q
7 _' o+ m- }# e' m
8 o8 U* J. c" Q2 J$ [% m$ r- I1 ~
7 {3 a y- ~; M2 f- V+ H( r$ i由于我们的Web应用是运行在Tomcat中,请求必定是先到达Tomcat的。Tomcat 对于请求实际上会进行如下的处理。 Z1 ~4 o/ o% F' z0 g8 p6 R
' P; Y: |7 F( `* x5 V. d1 M) x/ v, F8 O' Y. O
+ o" W! F# \ N! o2 L1 d, l: F第一,提供Socket服务+ [) A7 J6 w8 d f
: _ J! ]% Y$ ^/ J$ F5 S( ^5 o" ?' `; D
$ D; O: u7 m c, v% ]" f
Tomcat的启动,必然是Socket服务,只不过它支持HTTP协议而已!
9 o; S' |% ]9 C, f H q! t3 E
# }+ V8 x7 V! w2 [$ L0 P
& H) }( S( ?. v, S' P
4 v' ]) s" o" D$ A2 v7 t! z这里其实可以扩展思考下,Tomcat既然是基于Socket,那么是基于BIO or NIO or AIO 呢?
8 |: M# l/ h9 h
/ f+ u4 L' W* G0 i7 f4 T$ Y4 q" x( M7 h+ X! l( N) k0 T
7 Z5 _- w0 G# g( p! N
第二,进行请求的分发1 `+ f5 v, C/ u1 F" x
8 Q! |) d" j( n( }2 _1 @& n/ h( O2 j/ @; p; q5 U. T
+ s3 Y. v6 j3 f; }5 @4 O要知道一个Tomcat可以为多个Web应用提供服务,很显然,Tomcat可以把URL下发到不同的Web应用。' T5 n' b/ I' R# {! I0 k7 _. d
2 ^& v) a" C4 ^) r: `, j4 p1 s; O( u; N: j$ v; P$ v
1 y5 F6 F4 ^, V! y
第三,需要把请求和响应封装成request/response. }" Q- E/ G* j' O) X+ |: [
& e* G2 v. ]( o# b; K1 |9 Z- X) I9 i- L% i# B7 m
* V7 i& H! @6 z8 s
我们在Web应用这一层,可从来没有封装过request/response 的,我们都是直接使用的,这就是因为Tomcat已经为你做好了!$ _* f- \+ a- D: k: j, [2 K* x8 \
- Y* S, e* G, t5 B2 s/ x. B
; ~; p" O, z: }. h6 D
话不多说,先来看一眼工程截图。
! x V# R/ v3 ?$ z2 W9 r) @
+ g( K. J/ K( L3 ^2 v J/ _一、封装请求对象
- U8 a5 D# e' `/ S" `
# i% ~/ F( s8 z$ w p1 Y h
% ~ ]3 X7 T/ N g# p0 V这里可以清楚的看到,通过输入流,对HTTP 协议进行解析,拿到了HTTP请求头的方法以及URL。
4 D6 E5 l0 c* \5 l二、封装响应对象
# W0 V; \/ h. z
* m+ h q/ A' C# ?' x' l( t; S
2 p; O% k9 G' q6 [1 t基于HTTP协议的格式进行输出写入。
b7 r+ a Y* N* f% C三、Servlet 请求处理基类
3 C1 _5 _6 r% [( s, Y: R
& @! Z6 M3 O- M( R, u9 I/ F. i
" Y, s; n/ ^7 r+ _ m: x9 l3 k5 J! G. ~/ ~6 X
/ l8 D$ M% t& {, f# K6 D
+ x' H! [& y% ~5 m j- J- b
前文说Tomcat是满足Servlet规范的容器,那么自然Tomcat需要提供API。这里看到了Servlet常见的doGet/doPost/service方法。
9 k* V \, H! t" w* P+ Y a9 D' j: b% g: S
7 j+ Z( y4 X+ i/ ?, C8 Y7 ^
) T) w/ a/ c% `& E
# C$ a9 X. _# w
' N5 ~ Y1 C' Y; L5 E* Q3 P提供这2个具体的Servlet实现,只是为了后续的测试!
$ i" M) M' |8 H& F0 j5 a7 h五、Servlet 配置
4 i- Q5 H% [4 h0 n& M
$ b1 a3 q5 |- k- m你应该有些感觉了吧?在servlet开发中,会在web.xml中通过<servlet>和<servlet-mapping>来进行指定哪个URL交给哪个servlet进行处理。
& h. @6 X# t" g. o' ~- [0 {' ~六、启动类
: W/ I3 j5 z2 L. f& L
% a* L- l" P5 }* L
1 J1 M% s: U; B$ d- Q) N T1 I z
这里,你能够看到Tomcat的处理流程,即把URL对应处理的Servlet关系形成,解析HTTP协议,封装请求/响应对象,利用反射实例化具体的Servlet进行处理即可。 8 l; i4 Y& F+ c$ |* d8 M+ [+ I! J
七、测试
$ w& S d; K; ^/ D3 y( K' {/ r3 Z: [4 }. m
+ K9 }, @8 b0 Z1 \2 S6 O6 d实现一个简易版的Tomcat就这么7大步搞定,大家都来动手实现一下吧,代码最好不要复制,自己动手一个个敲,这样实现之后,对Tomcat就没那么陌生了。
, {7 }8 F N$ v————————————————( V0 r% O8 e+ ?+ N
版权声明:本文为CSDN博主「踏雪无痕的狼-Java程序员」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
1 o- Y. a9 a% f( A- r原文链接:https://blog.csdn.net/z1c5809145294zv/article/details/1062274808 m8 M8 r' Y A! y' B$ M
0 O" d, R% m( {' l" N
$ \/ q0 P7 F& N( s" W& E- F
|
-
10.jpg
(102.17 KB, 下载次数: 417)
-
9.jpg
(141.62 KB, 下载次数: 357)
-
8.jpg
(83.61 KB, 下载次数: 389)
zan
|