- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 558615 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 172957
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 18
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
* P: @& K0 e2 E% @从零开始写一个迷你版的Tomcat从零开始写一个迷你版的Tomcat
, F! ^% D9 \% _# Z
8 |7 C! Y9 J0 Q: Y& U+ j4 s8 K$ |目录$ R# L( w0 g1 e5 f
1 f$ c: G7 [" S
从零开始写一个迷你版的Tomcat
7 g9 Y q$ W, @; ^! \+ S" E' g- {7 Q. w/ _- m7 h5 \
第一,提供Socket服务
; \. P# `+ _) q5 X' A5 o& D9 E- T* k0 {- N
第二,进行请求的分发
% Z0 R, Z% ?7 r- ^6 @4 q. w0 V8 ?) ?7 T. R
第三,需要把请求和响应封装成request/response
+ t, L6 ^ {- {6 A
$ S$ `, A. a2 s: |6 V$ ~5 g一、封装请求对象' C" f% g" g8 ~4 `7 S- T
* n* k4 s9 d, Z4 S
二、封装响应对象
9 E4 `+ v: J' M. D, W! _
/ r% Z, q7 f, s7 ^+ O1 n6 q三、Servlet 请求处理基类5 u1 c; g' H ~# B1 _% {" c
' q6 V: _7 ~ G2 ]$ a \. {% Y四、Servlet 实现类- b6 q3 y j% b0 N" l. |+ R3 U
8 r$ A8 x! e- S8 a2 I d" T' V& a
五、Servlet 配置
0 |) a. g1 z1 D
) V, g6 B# n5 B/ k六、启动类2 d7 H! d+ [) s; i7 J7 J& L/ N
$ M- m* c# t4 r- x# Y7 p+ T
七、测试
* C A3 Q9 Y6 \7 l6 l* R0 W9 M
4 J O8 r X8 Y7 t yTomcat,这只3脚猫,大学的时候就认识了,直到现在工作中,也常会和它打交道。这是一只神奇的猫,今天让我来抽象你,实现你!
, U9 A9 ~, A3 u0 g- H
: i Z. m: N, S/ ~' ^Tomcat是非常流行的Web Server,它还是一个满足Servlet规范的容器。那么想一想,Tomcat和我们的Web应用是什么关系?
2 i1 e/ f: e6 X) M# Q/ e
5 q$ R c. F! v! N [* L; @' t; {& s( E6 r/ e
! e8 ^. W$ u, g \) E% z0 x: u7 s8 a# W从感性上来说,我们一般需要把Web应用打成WAR包部署到Tomcat 中,在我们的 Web应用中,我们要指明URL被哪个类的哪个方法所处理「不论是原始的Servlet 开发,还是现在流行的Spring MVC都必须指明」。
: P3 ~6 v7 e7 i }( E5 \1 k1 |8 T f' G
. c# C/ _) n1 k% L
) R3 l3 k4 P+ a& h: t0 c; L由于我们的Web应用是运行在Tomcat中,请求必定是先到达Tomcat的。Tomcat 对于请求实际上会进行如下的处理。+ t; C. E) y9 _6 u0 V
Y% o( d7 `! E6 _' b4 o8 r) O5 e/ K
5 J: s% U& F( F
( Y" t. C p! |3 ]9 V# Y5 D第一,提供Socket服务
l7 x# @: T+ r/ ^% S6 }& T4 S! t- ?, J' }+ D! Y5 M7 T6 N
$ g: ?5 p7 {1 ~
+ s5 r+ E" @2 Z$ i5 a4 t0 rTomcat的启动,必然是Socket服务,只不过它支持HTTP协议而已!; k0 F1 g, U5 Y
0 Q/ K4 j+ G1 r0 a3 o: ~
% Q6 c0 R- D$ g, @* n
- b0 r( L( W& N+ X( h这里其实可以扩展思考下,Tomcat既然是基于Socket,那么是基于BIO or NIO or AIO 呢?
* U% H) l v; C% W
/ y ?" R( o5 v
& f. Q2 _$ j9 |. ]: e9 y/ P: u5 s) k# v9 l
第二,进行请求的分发0 G. r$ W* \! X. P% Y5 X2 F
& h0 j# Y$ ^- ~ ]4 T
7 s) R' }* S) ]; D! g
* t2 H: A9 p1 u- Z要知道一个Tomcat可以为多个Web应用提供服务,很显然,Tomcat可以把URL下发到不同的Web应用。
/ O6 V: a% ` G, v* s3 u7 S3 o5 h1 X# I$ o( d6 \: t! ]
; N: Y6 Y! [' G* ^4 F H( _
" `# n7 ~& j6 V6 g
第三,需要把请求和响应封装成request/response, c! |" N5 _5 g1 u9 E3 A$ l
+ ]9 E2 r8 N1 k( o1 h+ V
5 l9 |: f6 b- B
" N ~+ \) M: ^4 N) l/ K" ?我们在Web应用这一层,可从来没有封装过request/response 的,我们都是直接使用的,这就是因为Tomcat已经为你做好了!
$ a8 I/ {1 v& b% B, N- b
' s4 h2 S' ~/ H, ?( W! ?0 K2 o9 V/ l8 A( b; T6 M7 d% A6 G$ \
话不多说,先来看一眼工程截图。8 d, Y3 O% x, @* P1 n
5 D; G P7 P7 d3 R+ C! I
一、封装请求对象4 c: E7 @! x8 c0 b9 G
( K* f: G9 s& C/ e7 P2 D e' _: U' l0 |( L
这里可以清楚的看到,通过输入流,对HTTP 协议进行解析,拿到了HTTP请求头的方法以及URL。 * A$ P; f- G! C! f
二、封装响应对象
4 z5 i( ?9 |, l- z0 K
! X% D. N( e7 M0 ~
# ?( @, a, i& U* A# c( e( V7 A- W基于HTTP协议的格式进行输出写入。
* @# ]* l/ o$ }三、Servlet 请求处理基类$ h; i: G" c" c i% s3 r+ T
, y+ b9 ^- o% O- b
) K3 O+ m% V9 n5 X2 L3 ~
$ ~5 j* v/ m% ^/ N$ X1 f
- {/ x9 Z- F" h+ F+ f# O$ P9 s- X+ U/ ^+ g9 K
前文说Tomcat是满足Servlet规范的容器,那么自然Tomcat需要提供API。这里看到了Servlet常见的doGet/doPost/service方法。) Y6 |0 D; L1 ~$ z
6 z9 n) i1 I2 h7 }$ z
% V+ g ~- }4 J, y3 O7 x" n3 @
+ o2 ?" `/ L' k; }' ~( H1 h' E5 }9 @ g# `& w% X
s+ b# ]; [+ t# _提供这2个具体的Servlet实现,只是为了后续的测试!
; l# X9 W) M, R% m \9 s3 x* C1 \五、Servlet 配置
% T+ o* Z$ D9 q. |
: z \( P) ?6 G( ?! ^
你应该有些感觉了吧?在servlet开发中,会在web.xml中通过<servlet>和<servlet-mapping>来进行指定哪个URL交给哪个servlet进行处理。 8 b2 T3 S4 I' x4 _* S
六、启动类
3 R/ a2 C3 ? s( y( C; ~
( q' U! h$ C. ?' N' g
# k" d7 b- d3 K$ \* Y3 t这里,你能够看到Tomcat的处理流程,即把URL对应处理的Servlet关系形成,解析HTTP协议,封装请求/响应对象,利用反射实例化具体的Servlet进行处理即可。 ) \+ \ z; N+ _! T3 y& q& O1 q8 N5 l. B
七、测试
7 E* B' Q j1 J9 d( n
' G6 i' w# [( f. Q" C8 d# @ V: K# W; Q) S6 W6 T
实现一个简易版的Tomcat就这么7大步搞定,大家都来动手实现一下吧,代码最好不要复制,自己动手一个个敲,这样实现之后,对Tomcat就没那么陌生了。
* Q3 {4 g% A! A, ?' z9 M1 I————————————————8 I6 ~/ \' F+ F
版权声明:本文为CSDN博主「踏雪无痕的狼-Java程序员」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
" S1 m8 I! [# F7 g/ A原文链接:https://blog.csdn.net/z1c5809145294zv/article/details/106227480
: j) W9 b0 h' {" d8 k
' E5 T# ^& v$ J/ b6 C. B$ p; s4 _- d; o9 W# v# g: X1 m
|
-
10.jpg
(102.17 KB, 下载次数: 387)
-
9.jpg
(141.62 KB, 下载次数: 328)
-
8.jpg
(83.61 KB, 下载次数: 358)
zan
|