TA的每日心情 | 衰 2021-2-2 11:21 |
|---|
签到天数: 36 天 [LV.5]常住居民I
|
一、servlet基础. o* m3 m/ i7 O; `$ l
1、什么是servlet?& |6 F9 Y# F, t: k
sun公司制订的一种用于扩展web服务器功能的
; R) `+ z9 ^" D! J% |) G 组件规范。
6 P0 O! {8 U$ g; l1 S+ ~ 1)扩展web服务器功能:% _* `+ P5 C( |$ ~' m6 u6 ]: {: @; v
早期的web服务器只能够处理静态资源的请- M% g' c7 g! A$ {! H
求,即事先要将html文件写好,存放在服务器
& d- k7 C0 H; ^( o8 P1 G 上,不能够生成动态的html(也就是,通过
- ?. ]# U) k( j( @9 B* c 计算,生成一个新的html)。4 P5 a9 ~; _ _, G* o
所谓扩展,即让web服务器能够生成
4 } ]- J( Q+ H 动态页面。5 [% L; g+ Q! Q: v3 x* `# q
扩展的方式,早期是采用CGI(common; ]7 J2 R% G# b, k! b- V
gateway interface)技术。
! }7 R1 g8 S: i! \3 S7 v 因为采用cgi程序编写的代码,可移植性) g* `5 ~: R+ V8 B; U4 I& F
差、编程相当复杂、如果处理不当,会严重
9 }1 \$ ?7 I0 K# C9 H7 ^6 s 影响性能。所以,用得越来越少了。
6 B& |- d7 X1 B) \! h* H! `4 x 现在,采用的是容器+组件的方式来扩展。8 e: F$ r2 v9 C* G/ p2 \& W* l
2)容器与组件+ T- l: g% x. z& k9 \# U. Q, ?; ~$ r
组件是什么?
, r% a6 |3 E' ]6 G3 R; \ 符合规范,实现特定功能,并且可以部署
0 l2 ?3 l, M- v" a |$ [ 在容器上的软件模块。8 J* h5 u$ V+ h' K! ~# x
容器是什么?1 q" B) |$ I9 ?/ U8 t8 A9 a7 J
符合规范,为组件提供运行环境,并且1 f6 u: k7 t% B8 f& O% x3 ?
管理组件的生命周期(将组件实例化,调用, E* u# ^% F- X! C, Y
其方法、销毁组件的过程)的软件程序。
& n# h2 L. P2 E1 X) S/ O 采用容器与组件这种编程模型的优势:
$ O% M" e- k3 V# n e 容器负责大量的基础服务(包括浏览器与! Q+ n: r2 n( I; A/ B
服务器之间的网络通讯、多线程、参数传递
' d. Y& x$ u& w" t3 Z 等等)。而组件只需要处理业务逻辑。另外,4 N$ V& t/ r1 A
组件的运行不依赖于特定的容器。
( F! N9 d, \9 Z6 A1 P2 d; s5 C- n 2、如何写一个servlet?
3 v# W6 @7 _# B. L- e) b 1)写一个java类(servlet只能使用java语言) K; B0 u+ m, v( _; Y6 a4 I R
来编写) ,实现Servlet接口或者继承HttpServlet
# C/ V; o, V# l/ i; N3 \ T 抽象类。" i0 Z) ^7 [$ k1 D* h
2)编译/ ?' d5 p3 G7 d' N5 G# g
3)打包9 I. r! u) ]/ J! l
建立一个如下的目录结构
( a: v3 f Y* M# g9 n appname
; N6 h& G' C. ~$ C" p WEB-INF
* O G' {% ?. l1 R classes(存放.class文件)1 i. B, v/ ^; O) P* q
lib(存放.jar文件,该文件夹可选)( m0 l# L" c: U* v6 B8 O; t
web.xml(部署描述文件)( [7 M1 e1 j5 [7 l8 B3 w3 a# W, W
该目录结构可以使用jar命令打成一个
$ ?9 L5 f$ v% b7 i- B$ | K& c .war为后缀的文件。8 |- q+ ^$ G8 P) ~ e) @4 Q
4)部署. \$ x, _) U0 h* R9 f* `
将第三步的整个目录结构或者是对应的
) N# l/ Z6 X+ @/ A9 a/ W .war文件拷贝到服务器特定的目录。
' F6 r" B5 Q$ ]. D `, _. j9 m 5)启动服务器,访问servlet
% X- [6 R% o |) t% W7 i4 j http://ip:port/appname/servlet的url-pattern配置6 X/ q b& V* Q, M
% [/ D i( s. I+ U
3、tomcat的安装与简单的使用: {, m9 ^8 U4 ^
安装:
6 v" n! O" O8 L- o% q# q step1 将tomcat解压到/home/soft01下。
3 u( A; w8 I* e( H! O step2 配置环境变量, @! U, T; Z1 W( o2 ^( \
cd /home/soft018 Z% p( Z8 y' \
vi .bash_profile' E0 [0 J& k) y; [4 Q7 K# I
JAVA_HOME:jdk的主目录
" M% A5 H& h, V) r$ ?" h# q CATALINA_HOME:tomcat的主目录9 D. O* Z" Q* b( u/ G- }( V
PATH:CATALINA_HOME/bin
0 {- x/ Z5 z" J# \: |! b8 L step3 启动tomcat
. a: V. n$ `) y7 \ Q cd /home/soft01
( j+ J- `4 ]9 p3 f( w cd /tomcat主目录/bin
/ t: J( B5 p" m2 H0 F! S. D) V( A; T sh startup.sh' |9 n. k, k$ D3 x1 b, b
接下来,在浏览器地址栏输入:
3 `& t1 O6 V. `" L. T1 K _" g+ I+ N http://localhost:8080
) X d/ E1 P" ^( z 关闭tomcat
/ E. h' z: [ r# ^. @$ y- h sh shutdown.sh
. V7 O( b3 D+ W0 f 目录结构(了解):! `- V3 | g2 T: j& E9 [# T& W
bin:启动和关闭服务器的一些脚本。
. v5 q9 N! f* [' l% O( c2 ~- a- v common:共享(部署在该服务器上的
# h0 m/ U4 W7 B4 u; @ 所有程序都可以使用)的一些jar包。
6 O$ d" x8 f3 b" V( b+ Y# N conf:服务器的一些配置文件。2 D) p, V; Q. L. c6 U$ R( p; Q% a+ E
webapps:部署目录
, S2 P! K8 G$ J4 Q2 ` work:服务器运行时,生成的一些临时文件。
0 h# S) W. C+ Q" [1 F* i$ M " }8 X0 r4 O2 Z3 ]3 v
4、servlet是如何运行的5 q& c/ F! {7 N% I# I7 @, ~
比如,向浏览器地址栏输入
; x1 g u) a; b8 e9 z http://ip:port/helloweb/sayHello?name=zs6 A5 k# O! j* P0 P
1)浏览器使用ip,port连接服务器。6 u3 a0 o4 k% u2 n" S: p0 A' c, c
2)浏览器将请求数据按照http协议打成一个
5 t- J0 {1 i, d! ]: G- d4 m 数据包(请求数据包)发送给服务器。请求数据
2 r% I2 V% h4 n a 包的内容包含了请求资源路径
+ h w, X" K& \) P (/helloweb/sayHello?name=zs),另外,在3 y( ?1 K4 Q' D8 R- V0 S- T" B
请求数据包当中,还会包含浏览器自动生成
2 Q/ H9 I# C& r- E. D% U! y 的一些信息。5 W* K2 e! z' I; |) E' y
3)服务器创建两个对象:请求对象和响应对象。
4 E- F0 x/ `9 h* e 服务器解析请求数据包,将解析之后的数据
* x: j. O! h$ K4 s% s 存放到请求对象里面,方便servlet读取请求
+ |2 ~1 |( e" Z: x1 e 数据(因为servlet不用解析请求数据包,如果1 M9 q6 C3 _, k. f
要解析,需要理解http协议)。 W& c# o5 }+ I' e- M& Y
请求对象是HttpServletRequest接口的一个实现。
0 \3 @' y2 w3 O% w% u 响应对象是HttpServletResponse接口的一个实现。$ U2 ~, j( @! X& b/ ^
响应对象由于存放servlet处理的结果。
8 f7 `. P7 [9 e' x1 c; s 4)依据请求资源路径找到相应的servlet配置,
+ I# B/ _3 B; N9 D, O" G; t 通过反射创建servlet实例。然后调用其& p9 w, ^1 ^& O' X3 k2 A
service()方法。在调用service()方法时,. u% q. \5 D$ ^4 |
会将事先创建好的请求对象(request)和* m4 m3 ? z1 E, ]. j" d
响应对象(response)作为参数进行传递。7 k$ B+ l2 W9 M V
在servlet内部,可以通过request获得请求+ h+ s' R( k* @+ B. g1 ?
数据,或者通过response设置响应数据。
' T/ ^6 b! J- z% d( b! a 5)服务器从response中获取数据,按照: u1 o- Z! O$ D( g+ L& J0 g
http协议打成一个数据包(响应数据包),; ]7 Y* }, ~8 q6 Z. W
发送给浏览器。9 d. K4 k2 a+ r4 U( i. Q# ~: w) D
6)浏览器会解析响应数据包,取出相应的数据,
3 S1 R7 H7 C2 O+ g. I 生成相应的界面。
' \ r' c% R, d
5 |6 R* v3 A3 E 5、使用ide(myeclipse)开发servlet% g! D8 l* D& C
1)配置myeclipse: R; H) F5 l$ ~0 l" l
myeclipse管理tomcat。" |$ z- S; j% A- x
2)建一个web工程
. y5 o" d) }: _7 o# Z
9 ?( k* v6 Q6 b/ p* }5 p 练习:
1 ]4 Y& r5 R$ G9 g. _- b 新建一个web工程 "web01_exec"
8 T! R9 Y+ u6 i 在工程底下,创建一个DateServlet。0 |% r1 t! N/ M, f
可以访问该servlet,输出当前系统(
: D) m9 L0 `- ~- o, g, o tomcat服务器所在的机器)时间。
* r& r6 Q$ I1 |2 p 比如:# F" B" C6 ~; E/ {5 C/ S
http://localhost:8080/web01_exec/date. @) G$ b7 Z: A' t9 D/ E
在浏览器端,显示
) O9 z# H# P* z' ^ T now:2011-11-21. t! L- L; G/ N. m" {* P
要注意的问题:# [; ]! F) b7 i
1、要实现Servlet接口或者继承HttpServlet.
; C5 W1 v3 i9 E- o) q$ h: @ 2、service()方法名称、参数、异常类型
5 J" ]$ w9 Z8 u6 a' g4 j6 K5 k5 A5 t 要写对!
5 _$ p9 @( U8 p# j7 W 3、web.xml配置文件中,类名不要写错!
$ G% _: |7 y9 _( }5 V. b servlet-name不要写错。! V+ g h: F6 q# {" i! j
4、在浏览器输入访问地址时,地址不要
k) R6 N- l: h 写错。应该按照9 G0 s2 h1 M# Q+ j& v' X
http://ip:port/appname/servlet的url-pattern
4 A; e) m- Y# U1 R3 v4 l 去访问。7 J3 l9 t# h. `6 y# }* W& n
5、记得先部署,记得服务器必须已经运行了,) _: q, [1 g0 N& a
不然不能访问。$ A! D" V5 ?' }4 J$ e
6、如果报500错误,一般是你的程序写错了,0 M- k9 z! G% q& [: S; q
如果报404错误,访问地址有错。如果是405,
# W/ K+ S- M: M% k' H$ Z# j 请检查你的service方法名,包括方法参数等。
" S8 Y; ?9 r! Y5 f) _! e
j B5 m: J8 \9 T+ w
5 U% ?! N1 w2 h# r1 C& D2 N |
|