- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 566774 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 175255
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
0 ^/ @/ ?" r1 s
从零开始写一个迷你版的Tomcat从零开始写一个迷你版的Tomcat3 @3 R; S q! Y0 ]$ z. M
: b- w+ S0 M& k& r) }- k( _# Y目录
- w* P3 n ]& g: Q! v
. i3 e9 y6 |7 M4 R5 I/ u# w从零开始写一个迷你版的Tomcat
$ ]' d: q1 h7 ]# X7 C/ R
9 i& D- N2 k$ t8 b, J v/ a6 r第一,提供Socket服务: x: F6 T4 U. e! Y+ C! O
- {8 ?! a6 t2 C3 k7 W2 \) f8 Y7 p第二,进行请求的分发
4 }5 f" Q9 R) s
6 D$ a' D. B" s7 ^* L7 S0 _: i3 M第三,需要把请求和响应封装成request/response3 H' L1 P6 \% o4 y1 d8 R
& U# ~' v# I- S' |
一、封装请求对象' i2 S; { c2 W
; b, }2 S) [2 y% Q9 t
二、封装响应对象$ [0 h, |6 x0 w" S
6 o) I' Y4 o3 E. x5 G, P+ k% ]5 L4 x" D
三、Servlet 请求处理基类
: h( h1 q+ @; _5 {8 X3 s( L
2 e% d% i u' i( g1 v" ]四、Servlet 实现类
" g. Q& R9 \4 V# x6 B& H5 o
2 I% y: ~8 T( Y# E; X$ H# q( m五、Servlet 配置) p( E7 \! ^1 I, `+ [: t1 @
4 R/ {5 M" p% a; D$ \8 l六、启动类
$ x' ^; |) e2 X& c. u
* ?. X& f$ P" L v. W' x七、测试* ^1 Y7 W# R4 s# Y* U$ D
& a* O/ Q- e8 U+ x; WTomcat,这只3脚猫,大学的时候就认识了,直到现在工作中,也常会和它打交道。这是一只神奇的猫,今天让我来抽象你,实现你!
/ Z* ]6 c6 e* h: n1 c
, i8 @, Z2 X N% [8 sTomcat是非常流行的Web Server,它还是一个满足Servlet规范的容器。那么想一想,Tomcat和我们的Web应用是什么关系?
/ T% ?. r: X: }/ S6 k; Y! Y* ~5 }- W
/ q9 g0 l8 E4 l: }* c6 m9 H
! M1 \9 C% M% i5 X" V [从感性上来说,我们一般需要把Web应用打成WAR包部署到Tomcat 中,在我们的 Web应用中,我们要指明URL被哪个类的哪个方法所处理「不论是原始的Servlet 开发,还是现在流行的Spring MVC都必须指明」。
4 q$ ~; k( G% A. {, B! I; }. ?* x/ Z" x! t. v
\8 D. s) q8 C# K8 L# t0 L% o# z. l6 J3 o8 e$ M
由于我们的Web应用是运行在Tomcat中,请求必定是先到达Tomcat的。Tomcat 对于请求实际上会进行如下的处理。
& \, R8 Y1 t- u* M$ o; ]' i2 G; E- ]9 n* S; `+ G+ O* u2 c5 ^' ~/ N
1 J/ s2 h2 h: R" G4 x4 `/ c# ~3 j6 y& l" o3 h( r
第一,提供Socket服务
, m( \+ f; _- @
' u/ l6 V. U- M6 w( t7 {* q4 j' x' T( x' {
# M3 ], u0 G; Y
Tomcat的启动,必然是Socket服务,只不过它支持HTTP协议而已!& }9 i2 v' Z, v4 q: E' Z6 \2 \% V* }
( U% [' f. ?( `/ t* A# z7 y
+ T" @0 e, i6 s+ V5 b
: V& b6 {& N5 P* v这里其实可以扩展思考下,Tomcat既然是基于Socket,那么是基于BIO or NIO or AIO 呢?
' B: J" n. y, y$ F$ I0 l+ z9 r" l3 i2 d
3 S7 g1 V6 J) |, L- d, ?
4 G0 B8 d4 M3 C+ p, X. w# F/ K第二,进行请求的分发1 U n1 q; j* q6 t+ H* G7 e
I4 ~& S. ]8 o. {& h' K$ a, h
( W- {, w6 _, p0 M8 Y0 L* C/ v
4 e7 K9 _' }# @6 f要知道一个Tomcat可以为多个Web应用提供服务,很显然,Tomcat可以把URL下发到不同的Web应用。
- B; X! n1 y1 a% c% S
: {; a. m9 J8 T) w, o' ]" J8 B4 I, T/ m: x
/ R) E; L1 |2 j; S" e( }第三,需要把请求和响应封装成request/response
& E' l5 W x" k9 D- i; l& M0 S( B$ g: w& n
* m- X) ?0 {7 \( D+ ~# L+ C2 }1 R# U4 x
我们在Web应用这一层,可从来没有封装过request/response 的,我们都是直接使用的,这就是因为Tomcat已经为你做好了!% ?+ x1 E5 R% e1 X0 \6 r. [
# {( w/ B- b0 [3 a# v6 s. z5 _8 {6 a. B) k' L n4 f& G
话不多说,先来看一眼工程截图。
0 r$ Z8 a1 p$ d# x4 x. Q# v4 \' Q0 S
5 d, y+ x1 l- Z# p! R4 T1 F) Z
一、封装请求对象
4 Z6 C' [/ q2 Z) n- w1 s( h
# u& f" W/ M/ c+ ?1 v
" b/ ~ [& X- y1 [# ~% a, n6 u这里可以清楚的看到,通过输入流,对HTTP 协议进行解析,拿到了HTTP请求头的方法以及URL。 , Q; T/ w4 O, C2 T. Q8 c
二、封装响应对象- \9 ^5 Q. z: X2 X! L, X: e
; |, o0 a7 I5 b2 G2 G9 K8 N' R1 m: A! P/ N
基于HTTP协议的格式进行输出写入。
# p4 p5 }" L5 I三、Servlet 请求处理基类$ U- Y- o+ b, Y: L
% @1 o6 \) c5 s$ w" [5 `
% p& G& c# G' P a) c
8 I* k$ E& b2 W" B k
9 \' f `$ D) A$ N; C0 G* f( Q. o, H- U8 d, w
前文说Tomcat是满足Servlet规范的容器,那么自然Tomcat需要提供API。这里看到了Servlet常见的doGet/doPost/service方法。
. d$ g8 Q6 S5 r/ w& U# c8 f4 B7 k$ {: Y. Q. t
) n8 v/ V% }4 n, Q1 U7 ]
7 Z0 ]- }1 T1 m3 P2 }; h/ q' D" r0 B% q7 G: q. X% t1 {% q# ]
. z1 B+ X; }/ J; j+ [: [
提供这2个具体的Servlet实现,只是为了后续的测试! ( [5 @" e p4 b0 g6 t
五、Servlet 配置
2 n, z* J8 B, y5 O* p
$ x# ^: u% w4 S' N, O
你应该有些感觉了吧?在servlet开发中,会在web.xml中通过<servlet>和<servlet-mapping>来进行指定哪个URL交给哪个servlet进行处理。
8 U# |0 K+ o/ G% E( e4 i六、启动类
5 s( U$ H5 z3 \1 \+ O
C9 l+ w5 F4 n
" z0 S+ y A d8 S) _
这里,你能够看到Tomcat的处理流程,即把URL对应处理的Servlet关系形成,解析HTTP协议,封装请求/响应对象,利用反射实例化具体的Servlet进行处理即可。
( U& }( u9 X% w2 `$ S七、测试
, ]5 O+ X6 i n2 `% M
9 o( V7 d% ` Q; R, Y9 K$ v3 o5 s! d1 x+ W) C( a8 x; u, |8 h( O
实现一个简易版的Tomcat就这么7大步搞定,大家都来动手实现一下吧,代码最好不要复制,自己动手一个个敲,这样实现之后,对Tomcat就没那么陌生了。
x3 u. Q2 F! Z1 B0 _% C8 K/ w, @————————————————8 V) t# _9 ?- f/ R3 u4 p, [! R
版权声明:本文为CSDN博主「踏雪无痕的狼-Java程序员」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。" Z" S, i( s1 s: I
原文链接:https://blog.csdn.net/z1c5809145294zv/article/details/106227480
2 r$ M4 G& G+ Z4 d4 @& i4 z& k/ _7 K' i5 L4 m# v4 q5 p
: g+ d3 R" h, m) ]3 w
|
-
10.jpg
(102.17 KB, 下载次数: 425)
-
9.jpg
(141.62 KB, 下载次数: 366)
-
8.jpg
(83.61 KB, 下载次数: 397)
zan
|