在线时间 1630 小时 最后登录 2024-1-29 注册时间 2017-5-16 听众数 82 收听数 1 能力 120 分 体力 563411 点 威望 12 点 阅读权限 255 积分 174246 相册 1 日志 0 记录 0 帖子 5313 主题 5273 精华 3 分享 0 好友 163
TA的每日心情 开心 2021-8-11 17:59
签到天数: 17 天
[LV.4]偶尔看看III
网络挑战赛参赛者
网络挑战赛参赛者
自我介绍 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
群组 : 2018美赛大象算法课程
群组 : 2018美赛护航培训课程
群组 : 2019年 数学中国站长建
群组 : 2019年数据分析师课程
群组 : 2018年大象老师国赛优
: u9 j; \7 ^) I" @8 w
从零开始写一个迷你版的Tomcat 从零开始写一个迷你版的Tomcat
4 y. R5 l+ }2 N; \5 a
0 E9 r5 u3 K( h0 e 目录7 J- a$ b9 m/ k5 M
3 l6 }7 h% e$ @8 e5 X# C: T 从零开始写一个迷你版的Tomcat
/ e& Z f5 \) b3 K 6 X; N2 O j1 o8 h
第一,提供Socket服务, ^( P+ Y8 D. g- U% f- B4 E
. ]4 m0 _+ @( ?. K 第二,进行请求的分发
/ @- F0 D4 q4 B; t4 R% e5 s 2 Y+ \, W4 R% x
第三,需要把请求和响应封装成request/response
, l1 t- `% A+ d/ V& J . e) U7 a; z; v2 E
一、封装请求对象
# H- _8 M% z8 q/ S0 q! d1 u# j
2 }8 X6 v7 Y6 K7 f8 ^5 D; N, u 二、封装响应对象
T# O: O- @# n* k+ W+ k - e# t) z! t0 }
三、Servlet 请求处理基类
7 f2 ~% J s/ D0 |, M* S: U. P
( J$ ]2 [& Q1 @: I; c) q 四、Servlet 实现类) p) H; I, I1 e) m
2 [1 e" ^/ }6 \9 E9 p
五、Servlet 配置0 t9 S" z: C- Y- J" b
0 F7 |% A8 H1 Y. l0 d+ p* B1 t7 m
六、启动类
6 F0 ^$ X+ _& j) h6 i$ Q0 [$ W
! c% y. t; b' ]( _. E) c4 M 七、测试7 ]- }1 v( b4 u g8 {8 `8 ]
5 s# q$ s" l+ z+ Z Tomcat,这只3脚猫,大学的时候就认识了,直到现在工作中,也常会和它打交道。这是一只神奇的猫,今天让我来抽象你,实现你!
% |4 H9 E0 ?* `2 _& t
. a9 l& |: ]7 D2 R7 L Tomcat是非常流行的Web Server,它还是一个满足Servlet规范的容器。那么想一想,Tomcat和我们的Web应用是什么关系?9 e. E( j9 O+ Z3 _: F
9 Y8 m: y$ p- G- k
. j) U D4 R3 H, I# e, J/ H , c% c( x0 x: v) K" g
从感性上来说,我们一般需要把Web应用打成WAR包部署到Tomcat 中,在我们的 Web应用中,我们要指明URL被哪个类的哪个方法所处理「不论是原始的Servlet 开发,还是现在流行的Spring MVC都必须指明」。
3 z7 j1 v: g, `3 c, x+ d+ L # x. |$ T. m1 N
2 f# J' }1 N# `/ T& A% v* O( U
# k8 \6 d3 y/ u5 q, j
由于我们的Web应用是运行在Tomcat中,请求必定是先到达Tomcat的。Tomcat 对于请求实际上会进行如下的处理。
& ~: m% i z& ~. s; _% X, ]2 J 2 u! m$ l, d; p, _9 f
8 ~, d+ p6 d: \6 D ' i6 R1 f; Y2 @8 W
第一,提供Socket服务
, {0 {' ~+ ?6 C; l- H5 O3 b7 [ ; F* ?( Z" M. }9 {9 A7 j2 J2 }: w
0 Q- g! g; X2 N4 q& B0 G
/ E8 k! ]% S1 J3 P+ f+ F% b
Tomcat的启动,必然是Socket服务,只不过它支持HTTP协议而已!9 Q7 @2 O0 Q, q* k4 q4 K5 X, k2 @" l
& Z* U7 L% ~/ N& T( d/ f% L
7 E# y: X' v' j' r: a8 |
1 p; k" p2 s, F4 b4 y) ] 这里其实可以扩展思考下,Tomcat既然是基于Socket,那么是基于BIO or NIO or AIO 呢?# u. ?" v/ b/ i7 W. h% ]
+ v+ u' M; r+ N- _) \2 e& X. I ! x, q: x% Z9 z2 _$ V6 g
: {) l7 G5 ]" p f* j
第二,进行请求的分发
9 T3 f: S7 K0 [0 ^
0 t1 }5 X% b. r3 v( s8 @/ l 0 r/ C; f7 g8 U. m6 Y b5 H% U! C
+ Q" d3 x% W/ Y# l- K5 \. i
要知道一个Tomcat可以为多个Web应用提供服务,很显然,Tomcat可以把URL下发到不同的Web应用。
+ \% u$ b- y W* w ! M. d/ F: R$ c1 X) a `
8 i, g3 A1 b8 e" L! D J 4 o( z* k1 p5 Y4 ?# h: U9 f# l7 w
第三,需要把请求和响应封装成request/response
* w' F. G2 c9 X8 v5 P- P0 l
( J7 v9 F/ x' c) {! `! j2 T R 4 w' ?3 Z& h7 R1 |4 u
; h. E# i6 `/ {% ^4 N) e! \, N
我们在Web应用这一层,可从来没有封装过request/response 的,我们都是直接使用的,这就是因为Tomcat已经为你做好了!/ {1 O- N5 R7 i. @8 l1 {& R' V* D
3 w+ {5 o" A4 H 0 ]: f8 F' }: o' i: z
话不多说,先来看一眼工程截图。 p l2 D3 o" c4 C0 f7 F* T
4 J# ^) L( y- f) y
一、封装请求对象 i% W9 i7 t& x+ @
3 ~! c7 S9 t5 J
, l. S1 Z+ z9 Y 这里可以清楚的看到,通过输入流,对HTTP 协议进行解析,拿到了HTTP请求头的方法以及URL。
7 n& A R5 f0 }6 I2 j 二、封装响应对象
% @8 i8 z. g1 ?+ }* _
2 W2 u' ]/ I! X
/ W4 s* l1 H- \% N8 {) I 基于HTTP协议的格式进行输出写入。
$ ?# E8 R7 C; R+ S/ J, F 三、Servlet 请求处理基类 - M, Q5 f6 S1 i/ B
9 W9 j( l; B! u4 B6 }
+ n! w( k, E' e6 v0 M+ j- L
+ B! l: }. x `1 v- z
. n7 }; m. o4 p
/ Q/ v6 t( r/ T" b) K5 H; k# k 前文说Tomcat是满足Servlet规范的容器,那么自然Tomcat需要提供API。这里看到了Servlet常见的doGet/doPost/service方法。
. M' z4 p% s4 I% C1 i% A! H
1 |" ]5 s: t. R x
4 J; @( l% e. D
! H! u# U* j: K+ j. y/ x2 L5 c( e C9 M' k- `6 K8 r
^2 w) T% W$ f. F+ ~* Z9 `4 @ 提供这2个具体的Servlet实现,只是为了后续的测试!
; a8 ^$ j" c4 V3 ~$ w9 H 五、Servlet 配置
( k# P; }. L7 W" w' K9 Z
8 Q& [' S1 h+ D: D" P1 u2 V# z9 _' Y 你应该有些感觉了吧?在servlet开发中,会在web.xml中通过<servlet>和<servlet-mapping>来进行指定哪个URL交给哪个servlet进行处理。
3 E* S! v+ G( u7 Z4 s v" e
六、启动类
! c( Z1 X/ X! c* R* t
) F/ Y9 Y. |) S# q
0 H, A* ]& g, \. U3 F" H/ v
这里,你能够看到Tomcat的处理流程,即把URL对应处理的Servlet关系形成,解析HTTP协议,封装请求/响应对象,利用反射实例化具体的Servlet进行处理即可。
! X6 n* d, D; F- ^8 s; N+ r, l* ~" B 七、测试
" S0 e. T4 {1 L
2 d" Q* ?8 J _& c! k; H1 L - q+ \! o3 V+ ^- R3 g3 m5 n' }
实现一个简易版的Tomcat就这么7大步搞定,大家都来动手实现一下吧,代码最好不要复制,自己动手一个个敲,这样实现之后,对Tomcat就没那么陌生了。
5 w# Q4 m A: ?6 `+ K% x% R4 i: w. q ———————————————— P4 r8 D. s# h r' S
版权声明:本文为CSDN博主「踏雪无痕的狼-Java程序员」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。% a" b0 _) k( S2 D+ J
原文链接:https://blog.csdn.net/z1c5809145294zv/article/details/106227480! E/ Q& z) d7 r6 w
2 v8 v( K! S' f4 R9 t5 o/ @ 2 S0 }+ o/ E( t+ ?6 M1 W
10.jpg
(102.17 KB, 下载次数: 391)
9.jpg
(141.62 KB, 下载次数: 332)
8.jpg
(83.61 KB, 下载次数: 364)
zan