TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
一、servlet基础5 u- j2 |5 U( t" g: L; _
1、什么是servlet?! K+ f$ v/ q, e
sun公司制订的一种用于扩展web服务器功能的 j8 f. U6 P* p; j; f* h8 k
组件规范。- W, W; ?8 O" e w9 Z! Z
1)扩展web服务器功能:# M# ~$ ~9 D( J- j
早期的web服务器只能够处理静态资源的请! [0 f6 x5 d" z+ ]
求,即事先要将html文件写好,存放在服务器
& n; j: p1 L8 S! _# [' u 上,不能够生成动态的html(也就是,通过+ k1 s6 K% n9 m
计算,生成一个新的html)。
! t ?. @) v# \( @ 所谓扩展,即让web服务器能够生成. F# H0 W; k$ B, T
动态页面。
0 |) _. g4 ^. K! J8 S# V 扩展的方式,早期是采用CGI(common0 K+ m! ~8 d+ b# \9 ~! c
gateway interface)技术。
+ ?: K+ e) [; [: g3 K9 n& I5 w9 o 因为采用cgi程序编写的代码,可移植性
/ [! {. b5 q2 w6 C0 B8 X8 ?0 n 差、编程相当复杂、如果处理不当,会严重0 h( Z; o5 [" \
影响性能。所以,用得越来越少了。
! m5 s' M: M% C$ }- o8 j 现在,采用的是容器+组件的方式来扩展。
( }/ ?8 R, c2 H, R: Y# f( x 2)容器与组件4 K: {9 g0 p7 J! ?1 w" d: Z
组件是什么?
$ B e w' x+ w* K 符合规范,实现特定功能,并且可以部署) q6 k2 @2 J' S+ U6 y% Q
在容器上的软件模块。1 \* b: ^. a9 ^8 ~" V/ |
容器是什么?
2 l4 r9 S1 U) U8 f+ K X9 R 符合规范,为组件提供运行环境,并且
- I; K1 J3 n: R( ^8 R 管理组件的生命周期(将组件实例化,调用
" z' [2 p, T! |1 k' s8 p5 E7 C$ M6 q 其方法、销毁组件的过程)的软件程序。
& y; |% g4 b7 c# G7 k y/ u 采用容器与组件这种编程模型的优势: }+ s, h; X' v
容器负责大量的基础服务(包括浏览器与& T; n6 \& z: o0 `! s
服务器之间的网络通讯、多线程、参数传递% x2 o3 D+ ^1 X, D2 U
等等)。而组件只需要处理业务逻辑。另外,
8 W& `( @$ f4 ~4 N$ i& q0 X% q4 e0 l 组件的运行不依赖于特定的容器。
( O8 b' ^- Z/ L2 B) i) @ 2、如何写一个servlet?
% q- K" b/ U( t' I& z/ | 1)写一个java类(servlet只能使用java语言
* V- Y3 {3 ?- |" @6 _ 来编写) ,实现Servlet接口或者继承HttpServlet$ p& U' e! m2 [( m2 P9 h
抽象类。
6 g$ D, h: G( ~( n6 B 2)编译% \: R! \+ b% K6 \
3)打包
8 U; j* {" C: X1 M& ^ D! P$ T 建立一个如下的目录结构. ^3 [6 v6 l% @8 |9 y" L
appname0 `5 y( j+ |- T. O6 _* b
WEB-INF9 k" F3 x- g6 D
classes(存放.class文件)
. j: T" q* I7 I3 n/ L lib(存放.jar文件,该文件夹可选)1 h# s( F0 ^+ g- }( t1 A2 J4 H
web.xml(部署描述文件)
* A" [% a3 T0 [$ | 该目录结构可以使用jar命令打成一个
) W h' G6 @0 \5 O U .war为后缀的文件。
; X0 a7 F5 _, j {4 o/ X, e 4)部署
5 |: K R2 }/ S& X3 M' ]1 `4 a 将第三步的整个目录结构或者是对应的
2 ?4 q+ i6 n# g& ` K# [& E) q .war文件拷贝到服务器特定的目录。; ~# _: L) V- M
5)启动服务器,访问servlet
1 `. W1 l2 c* W6 V/ X! ] W i. d* W http://ip:port/appname/servlet的url-pattern配置
9 g" ^% M, \- ]9 t ) D i8 N, a$ U+ M" |5 ?- N+ j. _
3、tomcat的安装与简单的使用1 s% g9 a+ ]5 R/ D! p, L4 o4 z1 H
安装:
0 @( _5 c! R6 g% H6 y/ s: @ step1 将tomcat解压到/home/soft01下。# f. g% T7 f, Z8 t' _/ g
step2 配置环境变量
8 O7 |$ z8 p; n cd /home/soft01
R6 E, I/ G& m( ?8 M F( F vi .bash_profile8 @ s8 W6 [% c- J5 o( r \' [
JAVA_HOME:jdk的主目录! ~, L& y7 K3 b3 u& E
CATALINA_HOME:tomcat的主目录
3 k- I# l. v6 ~, W: B PATH:CATALINA_HOME/bin
- s8 V: E# U+ n% s% c* U step3 启动tomcat( \6 `1 \4 c+ V; b: `8 v' A$ S
cd /home/soft01
: Z6 {5 K/ v* v- ^1 D cd /tomcat主目录/bin
# R) T) g9 B0 p, u% V sh startup.sh2 l$ J) c8 Z1 N
接下来,在浏览器地址栏输入:* U( e! l% k4 Q: C6 W
http://localhost:8080; s; B' D8 i. D5 d4 P6 }" }
关闭tomcat
$ K0 s- y6 F* d! U5 U sh shutdown.sh1 j, M4 [( Q0 d3 s; O6 k
目录结构(了解):
" n( L* h' M6 N6 D bin:启动和关闭服务器的一些脚本。
# V. G8 s1 |8 n( M+ k$ [, B! n. g common:共享(部署在该服务器上的
4 M: V( o( L% F! \5 E 所有程序都可以使用)的一些jar包。3 {* X6 V! B2 w+ G3 K
conf:服务器的一些配置文件。8 u7 U$ A" Q6 n* ^4 Y. i
webapps:部署目录5 V K3 r# F6 G3 p6 [. _
work:服务器运行时,生成的一些临时文件。
. e. [/ _. z% W' T( s \ 6 W# f1 s" ?2 c" ~) a0 Z, }
4、servlet是如何运行的7 x7 a- n5 a* O9 o" e) h+ M
比如,向浏览器地址栏输入) G; {4 ]" H6 b
http://ip:port/helloweb/sayHello?name=zs7 i6 l/ n. W' D' b9 c" E1 M9 O: d
1)浏览器使用ip,port连接服务器。
6 Y; j& L, V0 n: l( \7 \/ H& z 2)浏览器将请求数据按照http协议打成一个
. k, _& a; c5 K& _" p 数据包(请求数据包)发送给服务器。请求数据
) T( F& Y0 r% z; S D3 a 包的内容包含了请求资源路径
3 L* D: R/ h& g; G (/helloweb/sayHello?name=zs),另外,在/ B5 g& c+ w" e% M4 F- q. t" K
请求数据包当中,还会包含浏览器自动生成, y" i( D% B+ [& [6 _5 w
的一些信息。% e! Z2 p* Y! }- N; F( m
3)服务器创建两个对象:请求对象和响应对象。# p& c; I8 B! W( B. P4 w W7 C
服务器解析请求数据包,将解析之后的数据
" x( H" \" v, P3 x3 A" k/ w$ y0 K! P0 g 存放到请求对象里面,方便servlet读取请求7 w& @4 q& P8 u. E
数据(因为servlet不用解析请求数据包,如果
0 y! c' v! l- Q9 o 要解析,需要理解http协议)。
4 i* l& l, Q, `! \' v# h+ o$ n 请求对象是HttpServletRequest接口的一个实现。2 C3 D9 R1 k6 M4 D0 f
响应对象是HttpServletResponse接口的一个实现。: R5 w1 B7 b1 E8 C3 g6 D
响应对象由于存放servlet处理的结果。
6 ]' y7 L. {9 m- J 4)依据请求资源路径找到相应的servlet配置,; {; I4 k Q9 ^" @
通过反射创建servlet实例。然后调用其. Q2 X' d+ o7 L
service()方法。在调用service()方法时,/ X( r1 E' P/ C6 }1 U: _8 C
会将事先创建好的请求对象(request)和+ O; v6 m) C2 x. z: W
响应对象(response)作为参数进行传递。. H# P2 O8 H7 D" \
在servlet内部,可以通过request获得请求0 c. \7 H; G- _1 z1 w
数据,或者通过response设置响应数据。& V* p) n- d, s2 h7 U: R
5)服务器从response中获取数据,按照( P( {( Y6 k' X8 w
http协议打成一个数据包(响应数据包),$ E, a7 z( l" ]- r0 E3 ~: i) ]) o
发送给浏览器。9 J$ g3 S3 {3 D6 `
6)浏览器会解析响应数据包,取出相应的数据,: A" |* e2 h4 L( `/ p
生成相应的界面。
% }- N |! N! S* ]# [0 X * I" U' z% E" t5 Q, L
5、使用ide(myeclipse)开发servlet
+ t/ k0 p4 g3 Q u; l5 @ 1)配置myeclipse5 x" g/ @$ U& ?$ d
myeclipse管理tomcat。
5 u1 Y. j) P C+ a( Y- a/ @ 2)建一个web工程
5 f; n! K# }0 x2 e# P
8 q# o+ Z$ A- A& d5 s6 L1 h 练习:5 F( q+ F7 U0 |8 l( W" E
新建一个web工程 "web01_exec"' y( D; X0 c" i, X" |
在工程底下,创建一个DateServlet。; k6 \) B& P& q" i
可以访问该servlet,输出当前系统(. q6 ^* a5 v6 z. |: C
tomcat服务器所在的机器)时间。# S0 e7 K b+ h+ j
比如:
( J( n. o, a. J$ B http://localhost:8080/web01_exec/date: p# {3 v# L) q, A) ~& {* M2 c& f; d
在浏览器端,显示5 F! |- p& O* O
now:2011-11-21
+ y" k1 W, s7 L* H: V4 ]: j要注意的问题:
% M1 I9 t0 r4 S( m$ R 1、要实现Servlet接口或者继承HttpServlet.
( W6 k# y1 q8 U) R- i 2、service()方法名称、参数、异常类型! @ _2 _ K( B, ? w3 @4 V- P
要写对!8 O& R' z) j1 t: z8 W* I" m0 P
3、web.xml配置文件中,类名不要写错!
i9 j$ p$ N5 G, ~5 { servlet-name不要写错。
7 Q8 O- M; x1 k+ o( M: j 4、在浏览器输入访问地址时,地址不要
( B1 ~8 M0 Q" Q U 写错。应该按照# z/ h( s# U* z% ^
http://ip:port/appname/servlet的url-pattern- N A0 n0 x K) {& ~
去访问。1 ]* k9 D; x8 V1 d4 H/ Z
5、记得先部署,记得服务器必须已经运行了,
+ W) _8 f0 X, F, L! n; `0 _ 不然不能访问。
- o6 a8 B( B. B |& d! F# E& x 6、如果报500错误,一般是你的程序写错了," }) v. S6 T/ E1 A F
如果报404错误,访问地址有错。如果是405,/ x& ~; _' a2 B' Q
请检查你的service方法名,包括方法参数等。3 n% ~7 F/ `- h, N+ ?* Y
2 t( R: X$ z4 y
" d- F! \8 D+ Y* F& y9 y- V
|
|