- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 564679 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174627
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
6 _3 o; s9 ^* ~2 [/ n7 J& `从零开始写一个迷你版的Tomcat从零开始写一个迷你版的Tomcat
- h7 _5 x5 {( d/ |
$ s4 C, ?0 F$ M# V8 C$ {$ h目录0 q2 \) Z7 x) Z V" i. B
9 v3 C4 O J6 p3 T# j
从零开始写一个迷你版的Tomcat
8 M3 m" M2 [; ?( b4 g) t: d1 J) t) y
/ J! i C/ v4 x* }3 w第一,提供Socket服务
$ s1 J/ P5 C: r- c. l1 k* X0 S8 F, o: J% ^$ J2 x; o% \
第二,进行请求的分发6 \0 N5 A8 N, t& |
% p, @$ g) \* M: B6 V, z7 ]/ E
第三,需要把请求和响应封装成request/response
# t, L) e R% q4 z8 {2 Q7 \
6 F- U7 ?/ {4 _. Z' g+ [一、封装请求对象
+ {; [7 g5 ~' d. M( t
" S- y: n- T3 ?6 H! v2 e' e+ R二、封装响应对象3 a6 C3 [9 e2 c* @
- J& F! H# S; d* A a( t三、Servlet 请求处理基类
, P3 y% Z6 |4 ]7 \" |9 A% l" f" |
2 H3 g. x* W. u# C- N) k+ ^5 o四、Servlet 实现类
# v1 r: Y, @$ I4 I' c2 F
2 W0 F' v! P2 b W# i五、Servlet 配置
) [5 c/ y2 W9 p2 h$ e
3 h9 k7 C: X# A5 D s: p六、启动类
b( j; Y; x. ]/ @# B4 H- ?) j/ G% n+ H5 z! R+ k( k _
七、测试1 e1 s. ]+ Z1 e5 ?; X
% W+ ?) Q" @2 a" |0 ETomcat,这只3脚猫,大学的时候就认识了,直到现在工作中,也常会和它打交道。这是一只神奇的猫,今天让我来抽象你,实现你!
! d0 W2 t% Y& I+ o9 i, s5 s; W: ?9 E
/ M! ?" q- Z( o* D, eTomcat是非常流行的Web Server,它还是一个满足Servlet规范的容器。那么想一想,Tomcat和我们的Web应用是什么关系?
1 `/ m& {% F& y$ u% U7 q' B% i h9 O/ D! P; a0 H* \, A
( s2 Q0 w$ t6 a, s& F" h$ h. d
1 K3 I* h8 J _! {, m# m7 E从感性上来说,我们一般需要把Web应用打成WAR包部署到Tomcat 中,在我们的 Web应用中,我们要指明URL被哪个类的哪个方法所处理「不论是原始的Servlet 开发,还是现在流行的Spring MVC都必须指明」。
5 P0 v1 q2 {6 o
/ Z. K! j" T. E4 K- {8 V. ~# r/ J1 S c
. |$ E [0 b( Q4 C! B$ e: {
由于我们的Web应用是运行在Tomcat中,请求必定是先到达Tomcat的。Tomcat 对于请求实际上会进行如下的处理。0 X* L% `2 V2 j, ^! H8 ]
4 j" y, [9 \" y( M
9 [' L; {6 G/ N1 h+ X+ z
f$ P) A4 T7 q7 A; p* |第一,提供Socket服务
5 c2 ?3 t/ l; M. a/ _, A7 n' A t9 @0 j1 g- H* `2 G; E
% H: v) o+ _& L+ z" N, A7 a& i& b5 N
0 _9 A Z( T+ c4 P( JTomcat的启动,必然是Socket服务,只不过它支持HTTP协议而已!
' Y- G- O/ V3 s) m6 y' p2 a; F( z- h6 K5 G# ], h' E% B8 y8 }
0 z2 Y8 D, |, S8 \5 M# m) ^$ w: r" k6 x) Z1 ]8 ^. n
这里其实可以扩展思考下,Tomcat既然是基于Socket,那么是基于BIO or NIO or AIO 呢?
# U/ h1 i7 ?, O4 G6 W
# n: Q6 V r7 y7 d9 N. a4 Y9 @4 x2 v
; G6 x- X% _6 B& W. ^! {
第二,进行请求的分发0 e0 I$ q E7 X- U/ E
, n$ ?8 w: k- S) F
# M3 m5 y6 D- w" W8 q/ m
) s# f4 s$ G. p要知道一个Tomcat可以为多个Web应用提供服务,很显然,Tomcat可以把URL下发到不同的Web应用。
( N6 u+ U t3 m5 |9 G8 h# l- g# i8 O
4 g9 j) p8 _$ Z
( A; w, B e: |0 S
第三,需要把请求和响应封装成request/response
5 T m2 G* M' F y2 u" X. ?1 P( t @ V9 V2 ]
5 ?; E8 P4 o3 w+ a1 u, p. d
2 y. E# Q0 _; l0 N0 L0 Q9 Q$ e* _* y- \) J
我们在Web应用这一层,可从来没有封装过request/response 的,我们都是直接使用的,这就是因为Tomcat已经为你做好了!6 I6 y! J* {9 h# q: C& Q6 E
: P) ]- D7 z) a" T. n4 q1 T7 Z
" p* U0 Q6 l5 e, s! Q! m5 x话不多说,先来看一眼工程截图。: \; _" [. D& H# y
! L* x7 W g3 [* C
一、封装请求对象: |; f* K% Z7 h" @
4 t3 A$ g, M/ l- j' L0 E; V) ?+ }4 j f
这里可以清楚的看到,通过输入流,对HTTP 协议进行解析,拿到了HTTP请求头的方法以及URL。
# L' ]" D5 A; c" U- i; }; J2 x% e二、封装响应对象
& }; j0 U3 v0 \9 `5 D& T' i
/ [% y5 }* m% {9 i) q; o
2 y# g$ w) I B9 e9 w2 b% Y2 V/ b基于HTTP协议的格式进行输出写入。 1 P6 R9 d; D( z$ R! T: r. }! n$ s
三、Servlet 请求处理基类6 U9 J [) ?) ?( m0 n
% |$ _9 c7 @9 p0 Q) U
% L. b# C0 A) {9 H0 C8 a( H: ]! I4 A- N% }, T
# L' R4 Q" ~$ K* Q8 ^3 k4 t# U$ O" g& m# d5 L+ ~! w/ V
前文说Tomcat是满足Servlet规范的容器,那么自然Tomcat需要提供API。这里看到了Servlet常见的doGet/doPost/service方法。$ M- S% c+ P8 C: ^
- G( q% H' a* E4 \ W5 K6 R
9 f1 e0 ~% c) {) s% Q# j# k0 ~$ S5 O* _
. b" Z: C( E0 Y# c3 @% u6 c5 ]
( C' p9 a0 y! G+ q
0 d3 H% T8 M: R6 f+ i. L3 k提供这2个具体的Servlet实现,只是为了后续的测试!
3 r" `8 W4 y; I9 V8 V4 t) c五、Servlet 配置
/ g$ A- \; u9 Z1 _9 a! e( U: I
$ \" W+ f' n. f4 [1 T你应该有些感觉了吧?在servlet开发中,会在web.xml中通过<servlet>和<servlet-mapping>来进行指定哪个URL交给哪个servlet进行处理。
5 Z' Y/ ?% [# Y; \2 m% `六、启动类
+ W8 @: F4 X: M/ p( N5 |! P9 j) Q8 o
, G* l X: ^3 O d6 ^# B4 p
2 T3 @3 w5 ?! t% I8 o这里,你能够看到Tomcat的处理流程,即把URL对应处理的Servlet关系形成,解析HTTP协议,封装请求/响应对象,利用反射实例化具体的Servlet进行处理即可。 * D, m h4 d/ K4 ~* l$ b
七、测试
" p0 h% K( ^0 ~: d ~5 ]5 I
% m w* Z, p( ~9 M- r* S7 g3 s5 r, o% Z. y) u7 m
实现一个简易版的Tomcat就这么7大步搞定,大家都来动手实现一下吧,代码最好不要复制,自己动手一个个敲,这样实现之后,对Tomcat就没那么陌生了。- F& P* F# w& E5 W
————————————————
6 q- v) T$ v2 G, N0 b4 O* m版权声明:本文为CSDN博主「踏雪无痕的狼-Java程序员」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
5 u; M( v* b4 x' Q7 Y原文链接:https://blog.csdn.net/z1c5809145294zv/article/details/106227480. ?+ m8 ]: f5 [1 w0 M
" j# }# a' I; @5 _6 \5 f; W! u
. m- k3 ^* d+ N8 w
|
-
10.jpg
(102.17 KB, 下载次数: 411)
-
9.jpg
(141.62 KB, 下载次数: 353)
-
8.jpg
(83.61 KB, 下载次数: 384)
zan
|