- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 558766 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 173003
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 18
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
+ }& o' e4 }7 m' u; O从零开始写一个迷你版的Tomcat从零开始写一个迷你版的Tomcat# {8 F& r$ W- f) g) T( R0 a
c* ~3 F% m( g8 z. _
目录
# t% s' ]/ d+ h2 r5 C0 y, n7 S6 V: \
从零开始写一个迷你版的Tomcat, V' x' P# I9 \$ P" |' d) W5 {
, i; S- a( r% |4 r+ s3 r) h
第一,提供Socket服务; l+ z- z$ z* A' @3 f6 X1 k5 _
. W& j, s- _ m4 x2 t' h' c- ?
第二,进行请求的分发
: I# E2 U: X* d& W
! k4 u" Z3 q) E$ T- Z; p, C第三,需要把请求和响应封装成request/response( Y) K- a$ {2 h
! d+ b5 u, a1 Q- H" S* M* t9 |& Z
一、封装请求对象2 K* |9 e1 W( ~
3 L o7 T4 z- W) R# E二、封装响应对象
7 W' {& p V- y( p/ Q% G- S8 C* m
三、Servlet 请求处理基类
. u g# _% R( m+ H3 e) ]8 j; J
+ f7 {: h9 a: f1 {2 s9 [四、Servlet 实现类
5 H( C) h- Q$ `0 O5 L+ Y9 I; a9 \5 v- s
五、Servlet 配置
+ I% Z; @ d3 d
# n! B& V5 d1 [2 o/ v: o( p六、启动类 |" V/ Z2 d/ }) O$ V- f. p
P/ @6 ?- I8 d2 L1 H七、测试; L5 S) Q6 j0 C" }3 C$ A
0 `6 j4 f1 ?2 l7 n3 hTomcat,这只3脚猫,大学的时候就认识了,直到现在工作中,也常会和它打交道。这是一只神奇的猫,今天让我来抽象你,实现你!1 H# I+ _ `, L. y4 f' C
, R; i: i- b, V( K5 R+ k0 K% p
Tomcat是非常流行的Web Server,它还是一个满足Servlet规范的容器。那么想一想,Tomcat和我们的Web应用是什么关系?7 F4 ?& H3 v* _& s7 T+ S& B
4 O/ s3 `0 p! |( E$ {. z6 ]2 Q! W9 @) s( h" a6 M% _
+ b1 Z R: C. |% x2 Z/ A从感性上来说,我们一般需要把Web应用打成WAR包部署到Tomcat 中,在我们的 Web应用中,我们要指明URL被哪个类的哪个方法所处理「不论是原始的Servlet 开发,还是现在流行的Spring MVC都必须指明」。0 M+ |3 G, F( r" n) K
0 ? @ i+ E+ b3 I& v* _/ r
4 e. L4 ^7 P2 o- j* t
% G. j' `2 `. F由于我们的Web应用是运行在Tomcat中,请求必定是先到达Tomcat的。Tomcat 对于请求实际上会进行如下的处理。
: j: I l: d$ [. E+ e! P5 M& x
0 q. j4 x, G1 ]5 p5 Y! | ]" t3 r: @6 C1 Z! F& E& u, r
; X [1 K6 K( ?. x第一,提供Socket服务: L+ s) u3 g. c. f% ^: Z8 S
1 D9 g4 L/ o2 k& x, S
. Z' M& ^+ t% s1 m; |& w0 @6 C j/ k6 B( ]: M( y
Tomcat的启动,必然是Socket服务,只不过它支持HTTP协议而已!
; p7 F, y. d0 C
) L4 z& X& x& M: {' f, `6 k4 r/ N4 f) T3 a4 V) u1 k
2 N+ {. f7 X9 c/ n" ~1 k9 V
这里其实可以扩展思考下,Tomcat既然是基于Socket,那么是基于BIO or NIO or AIO 呢?$ g$ ?' I( M2 q, v# f
" n* K$ ?* f C0 k, K, c8 y% i' t/ p. t- R5 H" u" b
7 F% g" N D$ t
第二,进行请求的分发
+ d1 u" j) U$ d3 i
+ |" ]" d6 D% p0 B; p' n
* v3 p) x& O: w/ q( N
9 q* ], d: ~9 T0 H; s要知道一个Tomcat可以为多个Web应用提供服务,很显然,Tomcat可以把URL下发到不同的Web应用。( N$ c; a: W. `6 b6 B
' M: E" B! Z7 u; N& K9 D$ ^
, Y* V5 l) `' ~1 w q6 U0 P7 N
3 x4 x: T, T; m第三,需要把请求和响应封装成request/response1 c* X6 x+ E9 d: b1 \# D: t
' v8 z3 o+ g3 j
1 [2 `2 {9 d& m. a$ a' }
6 L5 ]1 g3 P8 F6 ]3 T F2 h* K
我们在Web应用这一层,可从来没有封装过request/response 的,我们都是直接使用的,这就是因为Tomcat已经为你做好了!% D: G; m0 Q; z1 c+ K' K
) T) Z% s% @: A4 g2 z
! N8 N0 B8 c3 j4 A- F3 X
话不多说,先来看一眼工程截图。
: A; d- V3 d1 t! c; D
3 V4 `+ V0 A0 |2 j [+ \: E一、封装请求对象0 U+ D) Y( Y$ D8 K, U v0 [
$ n, Z/ ?0 H, Y8 l! a5 U, T
7 v2 N7 k' N6 s/ R- a+ Y, g# i这里可以清楚的看到,通过输入流,对HTTP 协议进行解析,拿到了HTTP请求头的方法以及URL。
! v9 Q1 B& B9 L8 @* w二、封装响应对象
) z6 \ Z6 u$ z5 y ?% E# P
" r3 v, b9 \- [5 k( @4 j- E1 X0 \
! k" t& A1 b! d基于HTTP协议的格式进行输出写入。
& a% T7 E( N$ i9 h& q. g三、Servlet 请求处理基类
& E0 Z4 {. A; {3 V. Z& X+ ~% u8 e9 O2 f2 G. [# x1 {
- K# H& e6 l% `3 y7 {; N, @! ]- \( i. V& v# d4 ]5 Z7 K
9 i O) D& z9 c
3 j- X! R& E, h+ }7 c前文说Tomcat是满足Servlet规范的容器,那么自然Tomcat需要提供API。这里看到了Servlet常见的doGet/doPost/service方法。
3 U, k$ P! Q- Q. w3 @7 H1 Q) k: J$ N9 p; x0 p6 _& W
7 |, ^ |6 Y3 O; u
$ D8 w/ s6 o& K/ J3 W: @4 F
, T+ i9 c* i2 @4 [ ^( D
& H6 j" @% S" p5 C" |提供这2个具体的Servlet实现,只是为了后续的测试! 3 c: ~5 G* i( b( x6 s! J2 m
五、Servlet 配置
" n# L9 o- T9 P( ?3 E4 Z! Y8 w5 E
% q: J9 x0 x8 @: y1 [
你应该有些感觉了吧?在servlet开发中,会在web.xml中通过<servlet>和<servlet-mapping>来进行指定哪个URL交给哪个servlet进行处理。
3 n! [5 F0 Q$ L: \$ ?2 r六、启动类
& H: R4 X5 b7 F! b# m2 E' c" G
6 _0 o( [5 N1 B& G+ U0 N
, W1 R; G/ X/ Q: N u$ n$ }
这里,你能够看到Tomcat的处理流程,即把URL对应处理的Servlet关系形成,解析HTTP协议,封装请求/响应对象,利用反射实例化具体的Servlet进行处理即可。 / C! _2 z, H" a% g, ^
七、测试
& c1 A, z) u3 V1 ^" }/ j
8 ^: A9 z5 i, q' b% i) ^ l2 l' |; Q. S) O4 q( E: P, P
实现一个简易版的Tomcat就这么7大步搞定,大家都来动手实现一下吧,代码最好不要复制,自己动手一个个敲,这样实现之后,对Tomcat就没那么陌生了。
; j$ }. J+ t8 Q7 L! l————————————————+ q% R) G0 q- B7 @2 i8 m
版权声明:本文为CSDN博主「踏雪无痕的狼-Java程序员」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。, ]* V" a; X; H$ ?" G8 h* w
原文链接:https://blog.csdn.net/z1c5809145294zv/article/details/106227480
- p4 l2 P( Q; G5 w1 e" S3 v* m5 U" c% X1 x3 C
9 D3 O2 m5 B% ]
|
-
10.jpg
(102.17 KB, 下载次数: 387)
-
9.jpg
(141.62 KB, 下载次数: 328)
-
8.jpg
(83.61 KB, 下载次数: 358)
zan
|