在线时间 1630 小时 最后登录 2024-1-29 注册时间 2017-5-16 听众数 82 收听数 1 能力 120 分 体力 566787 点 威望 12 点 阅读权限 255 积分 175259 相册 1 日志 0 记录 0 帖子 5313 主题 5273 精华 3 分享 0 好友 163
TA的每日心情 开心 2021-8-11 17:59
签到天数: 17 天
[LV.4]偶尔看看III
网络挑战赛参赛者
网络挑战赛参赛者
自我介绍 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
群组 : 2018美赛大象算法课程
群组 : 2018美赛护航培训课程
群组 : 2019年 数学中国站长建
群组 : 2019年数据分析师课程
群组 : 2018年大象老师国赛优
7 |# C; B8 D! r+ ?, A 从零开始写一个迷你版的Tomcat 从零开始写一个迷你版的Tomcat
8 F$ S, w+ B# B; Z- f1 \' U2 D
, i/ C$ x: w! } 目录
: X" y; }0 v4 d
' G' C2 E9 V( {( Y$ A4 T 从零开始写一个迷你版的Tomcat+ D' n% v" B) ]1 O: _( o6 {, y
7 a) Q8 u- W8 Q7 h+ B
第一,提供Socket服务8 m! c/ ]1 @: l: g! B
) S( ~1 J, C$ V9 B$ c$ S" U4 c 第二,进行请求的分发5 w, I1 b' T4 t7 g$ C$ p- Y# W
; q' F+ M: s" V, ~, M9 R$ ]
第三,需要把请求和响应封装成request/response- P2 Z' M2 K# t8 m
( ~4 x0 a1 Y; l4 @* @ 一、封装请求对象& i i& |- u+ n% f F
' I! K' a! k. F! B
二、封装响应对象
9 u& Q) S& i. h% f! @+ O ! O" _1 w3 |1 `9 {/ o( Q1 p. V
三、Servlet 请求处理基类
4 y, k1 @: w$ d! E# ] 3 x* b' v7 Z: m# C3 `8 ^' a, S8 C) S9 i
四、Servlet 实现类( K0 U3 ?) c. p9 k
0 `- v6 f% X0 x8 V
五、Servlet 配置; f" E. E* N4 \& |
" h( A! { P# x q
六、启动类, O+ W& d0 f$ y- A9 n2 u6 b
' c/ v5 L; d! B$ j 七、测试
4 [& M$ A1 {; S! y. U1 i % }1 i7 Y! Z3 f$ B
Tomcat,这只3脚猫,大学的时候就认识了,直到现在工作中,也常会和它打交道。这是一只神奇的猫,今天让我来抽象你,实现你!
( b$ X1 ]( H# `7 e5 t2 z, U ; D, y" f& w3 v* }
Tomcat是非常流行的Web Server,它还是一个满足Servlet规范的容器。那么想一想,Tomcat和我们的Web应用是什么关系?
5 X9 O( s- N y1 h
# ]) c- P6 m3 f) W) i 8 p& W0 K2 _6 Q1 j% R" q. [4 J
2 v$ k+ J; D$ o 从感性上来说,我们一般需要把Web应用打成WAR包部署到Tomcat 中,在我们的 Web应用中,我们要指明URL被哪个类的哪个方法所处理「不论是原始的Servlet 开发,还是现在流行的Spring MVC都必须指明」。! C! u! u. }7 d9 T- W
( \- J8 C# g& ]6 \: ~$ T
' D4 R. p/ r g+ Z% n/ } - d2 m& z1 {6 i# E1 X) y' [' |
由于我们的Web应用是运行在Tomcat中,请求必定是先到达Tomcat的。Tomcat 对于请求实际上会进行如下的处理。1 O6 W& x' p8 r* l7 i& }
" T# t* o* z) a. k ^9 E3 B' W
, N% d8 e N. F# \5 d! z
6 B7 W, ^, T4 T$ N0 r8 U 第一,提供Socket服务
& r" }9 V! }) k6 [7 o ! D( f9 e5 r8 I2 w
5 R8 L8 [& U3 `8 i& u
0 V/ Y+ v! d& j$ d! U% H" A( J3 g Tomcat的启动,必然是Socket服务,只不过它支持HTTP协议而已!! ?9 x- B" g8 p2 ~' W* \
0 G# ]! ~6 N! S+ g
, Y& f, O1 j$ V
/ X1 a/ b+ e% G) p3 @ 这里其实可以扩展思考下,Tomcat既然是基于Socket,那么是基于BIO or NIO or AIO 呢?8 u+ w @1 O* K$ y- x# Y0 d
* V, i. D4 b; J% ~/ T; y
5 |. A; N* j- V+ D7 ]
% h) U' l6 Z% p 第二,进行请求的分发
0 k# G0 d, Y K& u) T' { ; g% ]7 U. B( n0 v6 T
9 |- Q+ o5 P/ F6 q$ n6 M
$ i. K5 Z8 w. P* b7 j. e; ? 要知道一个Tomcat可以为多个Web应用提供服务,很显然,Tomcat可以把URL下发到不同的Web应用。
; h3 i6 C/ m1 W0 R$ i
, ]- u/ Z5 |7 r+ Z" T' d5 D
: o4 q# Z; @2 N; O# j3 ?
+ R" R5 W$ m+ |# n. P 第三,需要把请求和响应封装成request/response
+ U+ m$ Y9 w' ~5 Y 8 A2 y6 [8 V) F2 }) U. l7 I |0 p
: X# `! U% v# M9 @& X9 Q
& \( T) s N) o; E+ Z" C9 h2 w2 N 我们在Web应用这一层,可从来没有封装过request/response 的,我们都是直接使用的,这就是因为Tomcat已经为你做好了!& v$ M% r" N* m) H1 c1 S+ y
/ s/ l: M- X+ @- V; S 9 r& h$ p* E- Y) ~. e1 f0 d
话不多说,先来看一眼工程截图。
, ^) c$ ?3 U2 c/ N
& D q! k6 B% @/ j0 U) T( y( L: a
一、封装请求对象 2 z+ V' G# l' x( ], F" n
* G! y% {% ~, y' G/ p/ q& `4 S
# I) A' i! ~5 X! a) d
这里可以清楚的看到,通过输入流,对HTTP 协议进行解析,拿到了HTTP请求头的方法以及URL。
5 V; @2 _+ k4 l9 D( i5 v 二、封装响应对象 % w5 U% ]7 O! A, x$ l
' g) r# x2 H D
. Q( z* Z+ J+ ]7 X9 ^% D8 u 基于HTTP协议的格式进行输出写入。
1 H L* x, u* e: I- l; F
三、Servlet 请求处理基类 + @, u$ i0 C( u) j0 A; H
! [: E( s3 \. ^
/ O3 k3 j0 I7 Z. j8 L
, o6 C1 d' ]/ F3 `) e3 n
; y1 _% g e" O. L! p; }
3 D o+ G: {' l9 v3 J: ~5 t
前文说Tomcat是满足Servlet规范的容器,那么自然Tomcat需要提供API。这里看到了Servlet常见的doGet/doPost/service方法。 7 B# `1 S6 i1 |5 h& O8 L
8 E4 \) o) E: F! v . B% r g. {9 A q$ Z r6 r
# Y* N( i) y, M {& O ; R' v0 |4 ~- Y# d6 M8 F, U
; Q/ M- O' W; ~/ d( E 提供这2个具体的Servlet实现,只是为了后续的测试!
. r2 O% X# x. \3 n4 ] 五、Servlet 配置
7 A% R, `+ }/ [0 N F/ z
2 q2 ]5 l) \; J 你应该有些感觉了吧?在servlet开发中,会在web.xml中通过<servlet>和<servlet-mapping>来进行指定哪个URL交给哪个servlet进行处理。
9 q! u( e. ^1 j# T7 R# R 六、启动类
6 h( ]6 {8 L3 A6 U* a o$ r
! R1 x2 f* P& r9 b
$ V- F2 z. f0 ~ 这里,你能够看到Tomcat的处理流程,即把URL对应处理的Servlet关系形成,解析HTTP协议,封装请求/响应对象,利用反射实例化具体的Servlet进行处理即可。
$ e# N) a C1 m 七、测试
$ q6 z x, W+ d+ T
X5 ]% N$ q$ B# p5 [' W ! O4 j: R1 s' h4 j( s
实现一个简易版的Tomcat就这么7大步搞定,大家都来动手实现一下吧,代码最好不要复制,自己动手一个个敲,这样实现之后,对Tomcat就没那么陌生了。
2 R( z6 B; f# O1 u# P ————————————————! j R& W5 p2 ]2 W, o4 v- O, U% k7 V# b
版权声明:本文为CSDN博主「踏雪无痕的狼-Java程序员」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。" f9 m- n" ?$ k- e
原文链接:https://blog.csdn.net/z1c5809145294zv/article/details/106227480
, T& Y6 y, U( n Q3 }4 _ 2 J: M' q% X- q6 A! i0 N$ d
5 N, J2 D; M2 S, L' u1 c; n7 q1 N
10.jpg
(102.17 KB, 下载次数: 426)
9.jpg
(141.62 KB, 下载次数: 368)
8.jpg
(83.61 KB, 下载次数: 398)
zan