- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 81
- 收听数
- 1
- 能力
- 120 分
- 体力
- 554184 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 171628
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 18
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
9 f9 r6 s8 G \5 v
从零开始写一个迷你版的Tomcat从零开始写一个迷你版的Tomcat7 `7 h5 Z& y. |, v
+ a# t2 Q; T- s# G$ `7 k/ k
目录
( T, Z* t+ T ~9 I2 s; L% h# i4 A
从零开始写一个迷你版的Tomcat! ~) f" }6 Y1 w, e( [. X
4 v* g4 E# _# l) M& _第一,提供Socket服务( e- j) M5 u' h6 x# H6 w
, Q0 J/ u K) ]7 y: ~: |( E第二,进行请求的分发
2 ?4 I( h$ D4 K
, c$ h: e5 L1 R* \2 b* q- m/ O第三,需要把请求和响应封装成request/response: W+ p0 f# W; M* [7 ^
0 l1 }- p5 J* ^1 Q一、封装请求对象
0 d; H) G8 @1 h q8 R' K" P0 A. O# ?/ q
二、封装响应对象7 D4 r& ~6 `* B
$ d& }4 N+ }* T( P" L" N三、Servlet 请求处理基类/ T' W+ V+ T7 R A& w: H3 S$ a1 _% t3 ^
+ h) D4 i4 v1 O w四、Servlet 实现类+ f/ d: o& Q' h8 H9 f6 a8 S8 ^+ f: Y
1 Y+ R$ M5 t3 t+ w# x6 Z: T' y
五、Servlet 配置
7 d1 N) C$ P! }
$ [6 F( Y7 w. V) T六、启动类. J; d7 A7 h% n* _/ Y
9 d* J- e" T4 ^0 [: {0 P8 L& `& I: u. `
七、测试+ p7 W# ]. O, Y0 \
% h3 E% B$ v/ \ F7 u
Tomcat,这只3脚猫,大学的时候就认识了,直到现在工作中,也常会和它打交道。这是一只神奇的猫,今天让我来抽象你,实现你!
5 S3 V1 {! |; |* |+ N8 e6 B, e- t5 F9 X; e, w9 Z
Tomcat是非常流行的Web Server,它还是一个满足Servlet规范的容器。那么想一想,Tomcat和我们的Web应用是什么关系?
$ [1 a9 D8 P" o( e% T. h
( C, e9 j5 G' S/ a: s) p$ M
: ?- @7 {/ ?0 b* p' i; U0 M' x
9 Q( c" A9 x$ E3 e# K' `2 l从感性上来说,我们一般需要把Web应用打成WAR包部署到Tomcat 中,在我们的 Web应用中,我们要指明URL被哪个类的哪个方法所处理「不论是原始的Servlet 开发,还是现在流行的Spring MVC都必须指明」。2 _) k3 t8 o* }6 U- B
: D9 K2 B3 @ C6 i7 b* L( t: a( b/ I! g# J2 ]. _
* ]7 E. @# q$ Y! a- p" ^" `" {: T8 ^由于我们的Web应用是运行在Tomcat中,请求必定是先到达Tomcat的。Tomcat 对于请求实际上会进行如下的处理。% r+ J* j5 l9 o
' _- [: a4 f0 M9 j
& }9 d7 X6 `5 i# K' T' a
+ e2 }' b0 }2 A5 v _& j0 p. ~+ J# L第一,提供Socket服务% [1 P' a E8 k, [2 V. ~/ L$ X5 K
( N: V: L7 I+ K7 o
2 s! R4 a5 \2 h/ l n# R7 J
c/ T6 S4 [1 v: ?; q; @' FTomcat的启动,必然是Socket服务,只不过它支持HTTP协议而已!4 I! f8 {/ J) C7 }
$ `# o( j+ L+ e, |& I
* S2 b8 W3 D* x9 I6 U# e! `% Y
- d8 U6 W/ h! h" m/ n( P. r1 @这里其实可以扩展思考下,Tomcat既然是基于Socket,那么是基于BIO or NIO or AIO 呢?5 X& x6 q$ ~1 J1 D1 q
4 J1 Y0 L% J" q3 {; X
. f" M; H% _2 @/ x. ]% I1 G
% F6 h8 D; d6 S4 K2 v9 V* E第二,进行请求的分发" K& B" I8 {9 \& b
$ G7 f5 R# z5 E; D$ ]/ f: c; y
- Q/ U: R# L1 G$ c, \& ?
- U) ~) F* m8 w' k; V4 X2 W要知道一个Tomcat可以为多个Web应用提供服务,很显然,Tomcat可以把URL下发到不同的Web应用。! m* z9 Y- q" L9 ?4 F6 S( I
# ?. y" q) a, L$ C# T( j
, L: D# w0 |5 L
8 P7 w5 ], } }4 [8 g
第三,需要把请求和响应封装成request/response9 [; e, w: ?: j u" y3 t
' G- E4 ]: x e, {4 r, b' m7 j9 \
: U+ J7 Y; B; z5 j* {
P/ Z5 o; Q" w4 b2 v我们在Web应用这一层,可从来没有封装过request/response 的,我们都是直接使用的,这就是因为Tomcat已经为你做好了!
$ Z" k, N* r1 E1 M
4 `0 I7 D0 q' B* S5 z" ~+ C) z- d% G6 j
话不多说,先来看一眼工程截图。% U) H: A. b8 l- r
* N' B' W: e. ? X
一、封装请求对象
. {. l! f; D4 O: c
9 ~; E) D% v0 m. o
0 M! ~& N, A2 ?$ U* w这里可以清楚的看到,通过输入流,对HTTP 协议进行解析,拿到了HTTP请求头的方法以及URL。
6 u& E: f. H1 T: |- g; e二、封装响应对象# g. H8 I5 @' Q' P( ?6 D8 N
0 s9 f* ~0 t# f+ [ Q/ ~
5 K/ f7 @! f+ }3 v8 w基于HTTP协议的格式进行输出写入。 ( _ m7 e6 ^% l5 B; P8 Z, a- A
三、Servlet 请求处理基类
- ~0 K/ ?& u# S
2 l1 k3 {) _& ^7 ]! T: I, ^5 H* n
. Z! ~) A& B$ H# T5 B& G( t+ M& x0 o* i8 D/ F
" e( w2 l/ }' o- @8 X U: J x$ D
前文说Tomcat是满足Servlet规范的容器,那么自然Tomcat需要提供API。这里看到了Servlet常见的doGet/doPost/service方法。
* p. f# J% ^5 V0 [* ]/ J( R4 d0 _6 m4 B, L/ n
- u* y% F6 t2 |, v0 |: W
0 j/ n: m+ b2 W* _ C
# z1 F8 x- v5 i3 S; H! c7 p
2 w% E' j; c) W* J, l( k
提供这2个具体的Servlet实现,只是为了后续的测试! ' A S. [4 S" H# X* L
五、Servlet 配置
! O! c) L1 v; S2 |( m
% C: T5 j% ?# O5 S M# u/ `
你应该有些感觉了吧?在servlet开发中,会在web.xml中通过<servlet>和<servlet-mapping>来进行指定哪个URL交给哪个servlet进行处理。
# E! C1 A, y8 I) Z$ K* X4 W六、启动类
3 v; W' Z$ {6 ]$ Y+ Y% ` M
8 C( r) i, ]8 ]" r
6 i5 x2 m6 @" S# f3 |
这里,你能够看到Tomcat的处理流程,即把URL对应处理的Servlet关系形成,解析HTTP协议,封装请求/响应对象,利用反射实例化具体的Servlet进行处理即可。
% i) m; L$ N9 G, q6 J七、测试
7 k* M/ t' j: O6 a6 T; i ^) P' h* X. y- L$ L9 U8 A+ d
; {6 t# f! e. ?3 w6 u实现一个简易版的Tomcat就这么7大步搞定,大家都来动手实现一下吧,代码最好不要复制,自己动手一个个敲,这样实现之后,对Tomcat就没那么陌生了。5 A0 V! w2 F: }& D; `+ h2 z2 R
————————————————
2 i4 C8 }: o2 F1 _. L- W* H版权声明:本文为CSDN博主「踏雪无痕的狼-Java程序员」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。( x& M+ [ @7 I8 Z0 H6 a/ n% r8 O
原文链接:https://blog.csdn.net/z1c5809145294zv/article/details/1062274806 Q8 J! z/ b$ S9 D
+ X) R# c7 V3 ~. {
" O( v( _6 s! L7 ?) D8 w6 Q. ? |
-
10.jpg
(102.17 KB, 下载次数: 386)
-
9.jpg
(141.62 KB, 下载次数: 327)
-
8.jpg
(83.61 KB, 下载次数: 353)
zan
|