- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 565537 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174884
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
$ I% ~: a U, M7 Z' n
从零开始写一个迷你版的Tomcat从零开始写一个迷你版的Tomcat7 E" Q. g- Z! C! W% R, B
6 |) u7 G7 o ?# w p$ M: \# s目录& Z7 r: H% R2 s' F, l1 x
9 e5 A: k6 F4 @0 A8 K% p$ q
从零开始写一个迷你版的Tomcat
* m; F& Q/ b F* T6 }8 L
' C) y5 {* C! u% |+ r* N第一,提供Socket服务 Z5 U- U C8 Y2 Z E
% m$ y4 t! O- @. m6 Y% c
第二,进行请求的分发
5 z. g! X* O5 C" E' c$ }0 z
; E9 y& |. q3 [! }. h1 _第三,需要把请求和响应封装成request/response
c6 R8 u. u6 P U, V# v; x: @% \$ D/ O( i9 q0 o# ~ Q' E3 j
一、封装请求对象
- |8 r5 P) N8 x/ o q' g2 D( `
0 x- k7 R/ J5 \9 B二、封装响应对象
/ c. n* V* D( d- l* k
+ p" r" {( O; ?2 E( o三、Servlet 请求处理基类
! u) F e) ~" V' a# {( y8 k
; A9 E2 y! j* `6 c- H; V- s2 D四、Servlet 实现类7 n1 O. t% W' A' Z2 A8 y
/ n& Q$ Q, T+ F2 l, n5 K
五、Servlet 配置
; u5 H4 Q3 |6 q* O& C4 O$ K1 K" R& \, H# T+ V
六、启动类
# J8 F2 ]. p9 q8 F
! V( {6 k( x! H& X# i, b七、测试6 N+ `, g/ d' a( J3 R. C( r
/ Y. s' @, G- Y- NTomcat,这只3脚猫,大学的时候就认识了,直到现在工作中,也常会和它打交道。这是一只神奇的猫,今天让我来抽象你,实现你!
5 G' [' c+ F# t; q! z( [, M" |/ v- ]% j b( r2 n# ~
Tomcat是非常流行的Web Server,它还是一个满足Servlet规范的容器。那么想一想,Tomcat和我们的Web应用是什么关系?
" T, u" A9 A) r8 v4 a/ c1 U3 B7 k* @ l3 M) Z$ q* N
% O3 d3 y9 `2 Z; k1 a
\: \5 j1 V: W从感性上来说,我们一般需要把Web应用打成WAR包部署到Tomcat 中,在我们的 Web应用中,我们要指明URL被哪个类的哪个方法所处理「不论是原始的Servlet 开发,还是现在流行的Spring MVC都必须指明」。: q2 n9 ~$ r/ K
/ j r r" t4 z/ [ X2 N. I
0 U) w5 m9 \8 _; r; U
" y+ _# I5 }7 K; r由于我们的Web应用是运行在Tomcat中,请求必定是先到达Tomcat的。Tomcat 对于请求实际上会进行如下的处理。
1 d+ s; n! M: Q- l; ]/ R ?0 S% y* w! u# e, t
+ P3 V* M7 U' E( r0 T& s0 U: A c# Y& Y" w3 }) y9 `
第一,提供Socket服务$ z$ I2 w( Z% Q( N) Q5 [; C
3 \# T( q# t; V8 d' D/ d# R
, I' p5 _* @1 K7 J3 z/ w/ p0 n( o) r& n" Z9 {
Tomcat的启动,必然是Socket服务,只不过它支持HTTP协议而已!8 c9 W2 W% ?$ C% i! A9 d+ Q
5 r0 ?# X |+ o4 s# L
+ N$ v# ? E8 d+ o' B2 L
: f* Y7 o7 J( h这里其实可以扩展思考下,Tomcat既然是基于Socket,那么是基于BIO or NIO or AIO 呢?
" b, l) X- [$ E, ~& G( f2 M
: |" ]4 T8 L0 z6 v- `, g
2 p a. t: {# W$ J" O7 J) v. U. S
( O5 I o; Q: {6 h第二,进行请求的分发* Y/ f- n7 {1 L2 _' o
, t4 h$ C ~' W
% `4 Q+ Y( m1 U5 y) S* x
' @& j0 t4 o" j' r8 O" u
要知道一个Tomcat可以为多个Web应用提供服务,很显然,Tomcat可以把URL下发到不同的Web应用。
3 q+ {# L7 h7 d: M7 W
9 \; k! c/ {/ U% K3 N) E/ r X
: b. O/ t: ~, ?" I3 U: K
2 q/ \; }9 @( O7 M) v; o+ G第三,需要把请求和响应封装成request/response
4 M9 @, d9 D/ i; J; j3 F" ^' ?- r! w8 V
_: L i- s+ P+ V9 T1 k9 \5 ^, @5 S/ r0 l9 Q
我们在Web应用这一层,可从来没有封装过request/response 的,我们都是直接使用的,这就是因为Tomcat已经为你做好了!
" g( p# C5 }( G3 ]- g% I8 ?
1 N( p/ F9 g3 V" u8 ~% b
9 _- {7 t) U6 L6 v5 c6 R9 i话不多说,先来看一眼工程截图。
9 z" I8 m3 ?7 g/ Q& Q" i* u" Q
% e2 n3 C7 x2 V4 r* K `一、封装请求对象
1 E% i9 ~9 F9 ~( i$ |7 ^
7 d$ a# n+ m' `. j9 a0 _* d0 Q+ Q) R
这里可以清楚的看到,通过输入流,对HTTP 协议进行解析,拿到了HTTP请求头的方法以及URL。 $ `, q4 A& e: V; N' Q! F# u9 g
二、封装响应对象
2 f; [ ~$ \, y5 j- {
! X& F! J, m: \( B% f9 g; I- q7 V$ W o5 }: \6 |) e8 U
基于HTTP协议的格式进行输出写入。
$ G0 K( w# @( Z4 W三、Servlet 请求处理基类
) B8 a: D1 F2 A! j8 f
W1 V" X8 z$ U" v: Q3 V, f
4 V0 m$ D# O# r% O# t
7 W7 T/ B; U$ T' e% {& U0 V
# G/ Q0 L( U- P: C
9 q" ^) }7 e+ c5 y+ b& G8 \' f* m/ t前文说Tomcat是满足Servlet规范的容器,那么自然Tomcat需要提供API。这里看到了Servlet常见的doGet/doPost/service方法。
* t$ C4 |6 F# [+ O
4 o. T" A2 Q+ l2 \; e( F- L1 a
' H4 z* V' g* |) T" `
; x" B& z: X5 m1 r# `$ ~' c/ M: y, O
0 \& ~" z% ]; P$ @提供这2个具体的Servlet实现,只是为了后续的测试!
; @! h Y% U; U' N) I! J五、Servlet 配置
/ {2 S }$ q& I2 ]
0 I$ u8 C7 ]$ E) @1 @- v! q7 Y
你应该有些感觉了吧?在servlet开发中,会在web.xml中通过<servlet>和<servlet-mapping>来进行指定哪个URL交给哪个servlet进行处理。 4 D" |# l' a8 [! d3 t) a) O
六、启动类
% }) q, q! N4 L( A$ }
* T1 I7 ^5 @/ M) V* h6 r7 N
! R7 I, i0 i) M! i1 Q# @- a( F
这里,你能够看到Tomcat的处理流程,即把URL对应处理的Servlet关系形成,解析HTTP协议,封装请求/响应对象,利用反射实例化具体的Servlet进行处理即可。
2 L- o: c) Q; f* C8 G/ `6 M七、测试
! P7 N1 [( ]9 \2 e s
4 F8 O7 w* l9 c3 J/ n4 t) R
G% `' t7 }% B) W5 w. B7 D
实现一个简易版的Tomcat就这么7大步搞定,大家都来动手实现一下吧,代码最好不要复制,自己动手一个个敲,这样实现之后,对Tomcat就没那么陌生了。0 Q6 Y7 T* M/ s% w) b
————————————————$ ^/ |- o% _4 v: m
版权声明:本文为CSDN博主「踏雪无痕的狼-Java程序员」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。' n$ g( r/ U/ {' Z; B7 i* F
原文链接:https://blog.csdn.net/z1c5809145294zv/article/details/106227480
8 {& `) {1 R5 ~, w' j
" \( Y% |4 P# \3 a$ }) c4 _/ L7 h4 e+ q2 t% d- Q3 d6 Z! J& \) h
|
-
10.jpg
(102.17 KB, 下载次数: 419)
-
9.jpg
(141.62 KB, 下载次数: 359)
-
8.jpg
(83.61 KB, 下载次数: 391)
zan
|