- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 566852 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 175278
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
# E% {5 j+ R) h
从零开始写一个迷你版的Tomcat从零开始写一个迷你版的Tomcat1 q) j7 F# C4 z( c/ `' i
0 S4 z1 p9 F! n" P% Q% W- p目录
7 H0 o; P; O( q, k' N5 m* h- I) A( j) U* @" F% r% ^! r8 ]
从零开始写一个迷你版的Tomcat$ d. j; O$ E6 f0 p" r6 a0 P6 `3 R9 Y- u
$ E, ~! Z% L1 e0 ]第一,提供Socket服务0 G- y2 T. s C) \5 M
8 k3 L4 ]# N5 l+ J& n2 Z$ M
第二,进行请求的分发
7 m! L7 j q' Z4 d$ W6 d$ }+ A. P1 P( H' g7 B5 _: V
第三,需要把请求和响应封装成request/response
- M+ _, _) l6 r: e: G6 w% j; Q, g9 n5 _3 M
一、封装请求对象
) C. E3 B- X2 F* U, `1 z5 A
2 A0 u2 @8 ~* m8 G1 v1 E. P二、封装响应对象1 `# R" C" b# d4 w2 J8 J
4 K: H, g# h5 j6 `三、Servlet 请求处理基类 T, u) x, _$ ?# s
* N' h. [. f; ^$ M$ ?四、Servlet 实现类0 J8 T7 @' w% e& t& d" i: S9 b7 E
& N3 m7 S9 ]! I, t# Y3 l1 e
五、Servlet 配置; n2 I5 I: C" [
, ^2 l9 \$ J. |: J
六、启动类
3 ` B7 o7 [* N& H! l3 _' S$ S# G" U6 {$ d
七、测试
* `6 W( K, }7 i& n. z$ b5 K7 J
0 Q1 I/ Q* M, S7 o# N* l7 CTomcat,这只3脚猫,大学的时候就认识了,直到现在工作中,也常会和它打交道。这是一只神奇的猫,今天让我来抽象你,实现你!
3 e4 n! q \# e3 g& u* A4 Q9 \8 X4 f0 I4 D
Tomcat是非常流行的Web Server,它还是一个满足Servlet规范的容器。那么想一想,Tomcat和我们的Web应用是什么关系?
0 H" {0 ~/ I6 c" \
, C+ v, C) C. S: |1 W! }1 F: w8 v5 P* R" l4 a3 F" W G( m& D
/ ?8 a: O- e3 D3 W从感性上来说,我们一般需要把Web应用打成WAR包部署到Tomcat 中,在我们的 Web应用中,我们要指明URL被哪个类的哪个方法所处理「不论是原始的Servlet 开发,还是现在流行的Spring MVC都必须指明」。
: r R' l3 M9 r. H E" b- F2 L1 g, W8 |3 `* s4 m6 D4 R. ], T1 T" {# g
+ C u: \& U0 Y: ^
4 Q; X6 ]$ q( d/ R/ }& P由于我们的Web应用是运行在Tomcat中,请求必定是先到达Tomcat的。Tomcat 对于请求实际上会进行如下的处理。& r- e2 i! N3 x4 R$ t% A
* U6 y% J$ r0 u' v6 a/ d# [& H+ M1 P
2 n) ~7 L! R0 B* J" H* K0 C8 O2 U1 o0 u/ X! n7 w
第一,提供Socket服务5 M4 Z2 |# G, g; @# D- K
8 z8 U6 K% v1 x& z1 \5 ?1 R6 S# ` K; |/ V: b) m
+ W) x/ A: p0 j' x, { F! b7 Z
Tomcat的启动,必然是Socket服务,只不过它支持HTTP协议而已!
7 ~5 @3 q6 J/ X7 r. l6 w
7 a* b6 X' h6 s4 K. c8 {! c( @, ]6 \: k7 ?# w- @
' |3 v7 l ~4 D这里其实可以扩展思考下,Tomcat既然是基于Socket,那么是基于BIO or NIO or AIO 呢?) A1 C5 J$ p4 O. l6 G
0 A( b0 v4 i* \/ F- }9 N* Y
1 i2 Z- c" o3 e: ^! j6 S5 k x+ i1 z! H. p4 v& K9 r' Z, _' R
第二,进行请求的分发! H% _8 i* }: f8 a: l5 r
/ |. P# O+ o; N, F
2 j! v8 j" V/ U$ ~
+ p! e0 ^( r1 X) M4 Z+ [
要知道一个Tomcat可以为多个Web应用提供服务,很显然,Tomcat可以把URL下发到不同的Web应用。
" X6 X1 x5 l9 y( P& X# a
( z/ i1 o9 M$ h) w3 F. d( [$ h# ]1 o& {6 z& `
0 J% U4 m" M8 o% g" L3 R" [第三,需要把请求和响应封装成request/response5 b( v- W5 {% X/ g, p7 Q* E
. P3 F, x3 P1 d3 i7 n
9 y$ X: f9 h, Z; s- B' I
4 D0 Z0 y6 x0 E# z+ ~我们在Web应用这一层,可从来没有封装过request/response 的,我们都是直接使用的,这就是因为Tomcat已经为你做好了!) {' J2 h2 g+ i+ O# f
. _* L+ _3 f' j% F! w! X% F" s2 A/ P' b- U% X+ Z7 a; W. [
话不多说,先来看一眼工程截图。
8 b+ y0 _% f; _
" c5 x O8 q3 b4 y一、封装请求对象
2 A. }/ J/ b7 N3 @
' L$ V% g2 Y. M* n
+ H* E$ X1 O+ v; }这里可以清楚的看到,通过输入流,对HTTP 协议进行解析,拿到了HTTP请求头的方法以及URL。
; {9 ~* H0 J5 O' |6 a: n: I' _二、封装响应对象! c2 z8 t& j0 q! F: v
. s) Y& A/ P: {8 D0 n [, |2 K" p$ r
! Y( A( S& O6 h基于HTTP协议的格式进行输出写入。
- r. |. V, q+ {) I三、Servlet 请求处理基类3 E5 u: n9 z) o7 C/ Y; x2 v5 c
5 W/ s% O0 X7 f
( a4 p+ r0 Z @& \8 H; [8 {
- s9 K/ w' m' W+ X, O& w/ F) q7 X; H9 G, Y
: q5 b$ }% y, P' M& [3 i
前文说Tomcat是满足Servlet规范的容器,那么自然Tomcat需要提供API。这里看到了Servlet常见的doGet/doPost/service方法。
[! C* k0 k) v9 K/ h
$ A4 V9 g& [7 l. n3 A/ I: }, i
7 H- H2 u8 x9 P9 A6 ]
! @6 E* ?7 `3 Z+ p0 d
- i4 [8 Q9 K* l7 q3 c$ T* i1 d/ G; i
' ?- N' P0 \* q; x$ A提供这2个具体的Servlet实现,只是为了后续的测试! , W L; u" ~1 Q+ D; E# D
五、Servlet 配置
. T8 s2 `3 d& o; X
0 U- e; Z/ l% q# F- t! [ }
你应该有些感觉了吧?在servlet开发中,会在web.xml中通过<servlet>和<servlet-mapping>来进行指定哪个URL交给哪个servlet进行处理。 4 m: r! v; |! S) P2 Q" T
六、启动类
: V( L! _% [8 C/ a, U
/ ^+ V! M# E* d
" T! P/ \2 R# m v
这里,你能够看到Tomcat的处理流程,即把URL对应处理的Servlet关系形成,解析HTTP协议,封装请求/响应对象,利用反射实例化具体的Servlet进行处理即可。 9 n, w2 P8 A7 z, U! R) D: t
七、测试
( s, T) Z% {, K- D! h5 X2 _
. W/ p7 r/ S; N1 ?* V: f( N# ~7 B* \
) {. \; G$ n# d$ t: l" |, a! ~1 F
实现一个简易版的Tomcat就这么7大步搞定,大家都来动手实现一下吧,代码最好不要复制,自己动手一个个敲,这样实现之后,对Tomcat就没那么陌生了。6 @/ a7 ] S- W0 n+ }
————————————————9 Q5 i/ z, g1 ^0 m* t* B
版权声明:本文为CSDN博主「踏雪无痕的狼-Java程序员」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
; a& y- _9 E& o原文链接:https://blog.csdn.net/z1c5809145294zv/article/details/106227480
2 o% J! e0 c. r7 W- w, K- H* n# w+ P/ j6 ?1 z% l1 v" e0 d9 W$ [
( g4 A7 ~+ ^% u5 `5 Y5 E
|
-
10.jpg
(102.17 KB, 下载次数: 429)
-
9.jpg
(141.62 KB, 下载次数: 370)
-
8.jpg
(83.61 KB, 下载次数: 400)
zan
|