TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
一、servlet基础
4 I2 ~7 T+ J& K F. U' Y# z7 t0 b5 z 1、什么是servlet?4 p% [# T/ a: ^* l
sun公司制订的一种用于扩展web服务器功能的9 S" @0 D) ^( c& F/ Q: d
组件规范。0 v6 S7 H! E4 |* o% J4 p" I6 ?
1)扩展web服务器功能:. w8 X* G% @8 W9 M0 B* D7 k
早期的web服务器只能够处理静态资源的请$ z9 N+ D0 J/ I9 n2 }! p! q% w) ?
求,即事先要将html文件写好,存放在服务器5 Z! |1 N0 B% |" a, y
上,不能够生成动态的html(也就是,通过; t. k" {# [. z/ K2 ?- t
计算,生成一个新的html)。
6 K% c. C7 j3 h; P* l7 l2 T 所谓扩展,即让web服务器能够生成
. H. P V b2 q7 `8 X6 ^ 动态页面。
+ y' b$ i) \/ r. w, P* f 扩展的方式,早期是采用CGI(common! I" C1 j# _/ r. O- ~7 }0 i: w
gateway interface)技术。
% k5 y, ^4 C0 ?; A- [8 \ 因为采用cgi程序编写的代码,可移植性1 ^; k8 q# Z; w' v% W4 c) U
差、编程相当复杂、如果处理不当,会严重
; |3 p# q7 N4 D" e 影响性能。所以,用得越来越少了。
6 z5 P8 N: V& @8 D: ` 现在,采用的是容器+组件的方式来扩展。
% f7 v5 H* ]. O4 Z0 e2 ?" x 2)容器与组件5 y$ v H- ^' p" l8 w" R( e, j
组件是什么?8 X* J8 P1 I8 b' {! U9 ^
符合规范,实现特定功能,并且可以部署
3 y+ y) f' h! d7 j* y7 y7 {3 X0 g 在容器上的软件模块。
! @' \4 |$ }5 y$ W 容器是什么?" m- R; a' @; Y( w& i$ q+ y
符合规范,为组件提供运行环境,并且
& c" v& B$ ~$ ]0 _; B 管理组件的生命周期(将组件实例化,调用* h/ v/ X0 _6 b' m; @1 A: E' ~2 P
其方法、销毁组件的过程)的软件程序。
% M7 T# I- y0 V. l0 D 采用容器与组件这种编程模型的优势:
/ a5 t: r2 S- M% L2 T 容器负责大量的基础服务(包括浏览器与0 ~2 ]: k# k' n; o7 F$ T
服务器之间的网络通讯、多线程、参数传递2 k5 k, P6 q u4 I/ s; x- c
等等)。而组件只需要处理业务逻辑。另外,
( \2 L- a6 g! H; p0 Q% @/ e 组件的运行不依赖于特定的容器。
; C; M; a( {/ s 2、如何写一个servlet?
' F. ^* j8 ]( h, S 1)写一个java类(servlet只能使用java语言2 a/ K! q0 Y4 p4 T
来编写) ,实现Servlet接口或者继承HttpServlet* o( ^' X6 T3 u, f( {4 n/ h7 F
抽象类。! o. w2 B; ^; o) J" u! I
2)编译7 C$ x- K' F$ n9 X& |7 V
3)打包6 K! R& u( h. X# R! c# ~4 d0 l
建立一个如下的目录结构
# @( K/ Q5 O% X/ F% C appname7 Q' B+ b- O0 f9 Z
WEB-INF4 d& k! ?- \7 ?) x3 K6 C" D, B" S5 r
classes(存放.class文件)6 d3 @0 x+ U. V& A/ Y
lib(存放.jar文件,该文件夹可选)
1 D j9 h2 b6 I/ D& m* [ web.xml(部署描述文件)( }: c& p% a3 g# ^$ S0 w6 Z
该目录结构可以使用jar命令打成一个: f) v1 j+ w+ N. ^4 \. K m
.war为后缀的文件。
+ @9 k }! }! c 4)部署
: O9 f( y2 S) ~ 将第三步的整个目录结构或者是对应的) [8 o' u/ j7 H$ i. D/ d
.war文件拷贝到服务器特定的目录。
) g, D6 [; ~ g! v# Q 5)启动服务器,访问servlet
& i- Z& b- \( ]: W, E4 M http://ip:port/appname/servlet的url-pattern配置
- P. w( ^4 l3 E0 T6 @$ O. y2 ~ 4 G3 f6 q! o( l) J
3、tomcat的安装与简单的使用7 R/ k2 W/ [) i' s' s9 r
安装:+ [$ g% N& ~: }* K' n
step1 将tomcat解压到/home/soft01下。9 f9 E6 Y0 R- J
step2 配置环境变量" i9 F& u5 f) I
cd /home/soft01" a- f: Y9 A$ G- N" y
vi .bash_profile2 L; A, K9 l0 P! [3 r9 T
JAVA_HOME:jdk的主目录, n9 i! l9 s8 W- R: |
CATALINA_HOME:tomcat的主目录
9 {* b9 }- @8 g* u PATH:CATALINA_HOME/bin( s: B6 F$ a& p& w4 Q# ~8 w' q8 j
step3 启动tomcat
# Q$ u+ a5 j. `$ }% d7 B7 C) e cd /home/soft01! }) B+ Y7 w2 a1 i+ d
cd /tomcat主目录/bin
; A! P, M: H6 q/ p @0 g sh startup.sh
2 E1 A" H( z. A2 I 接下来,在浏览器地址栏输入:
# l* Q1 V8 H8 \7 U/ d. N http://localhost:80807 m9 W' X6 U# C$ C* Q
关闭tomcat/ p, f2 p) t5 u; X. a* W, w
sh shutdown.sh
" j$ Q; D- E$ Q! s 目录结构(了解):
" _1 V5 Z8 [, t0 |% Q) t bin:启动和关闭服务器的一些脚本。; @7 N [4 f5 ]! Y
common:共享(部署在该服务器上的
0 A; z4 M4 z7 s) e% a& U, M 所有程序都可以使用)的一些jar包。
/ [9 S. M1 h. p% p+ z+ Y& G, A& M conf:服务器的一些配置文件。
# k. U4 ?7 i1 |! Y webapps:部署目录
! ^3 K. G: C8 ~4 J/ ?( Z/ p work:服务器运行时,生成的一些临时文件。
! z; w+ s% h" \( a; |
7 b& x0 b. j7 j0 f. L1 N9 u. { 4、servlet是如何运行的8 t8 `& T! U# D( {
比如,向浏览器地址栏输入
9 G4 b8 v. R2 T! _8 b) Y2 t" z http://ip:port/helloweb/sayHello?name=zs( B( e2 n; m& Q- [
1)浏览器使用ip,port连接服务器。
8 I$ Y# S! f+ K# z$ @ 2)浏览器将请求数据按照http协议打成一个, q# R# j9 J/ s
数据包(请求数据包)发送给服务器。请求数据
" K4 @4 z3 k1 B @ 包的内容包含了请求资源路径
9 R: X4 G3 Q0 P5 y# k+ J (/helloweb/sayHello?name=zs),另外,在5 r) Z2 I) ~' T& J. Z# w4 b% v; C0 M
请求数据包当中,还会包含浏览器自动生成0 F$ a% K. f. E9 Q' |8 I9 b
的一些信息。
* U9 o2 k& ?/ c6 E 3)服务器创建两个对象:请求对象和响应对象。: X+ s1 A& D, |' `/ l" R
服务器解析请求数据包,将解析之后的数据
5 T5 I6 _4 m7 R% X% i+ ] 存放到请求对象里面,方便servlet读取请求
1 p7 N5 {2 z/ R. t7 S, A 数据(因为servlet不用解析请求数据包,如果* L; \0 @9 T1 {
要解析,需要理解http协议)。; K6 @4 _) t, Q4 |: \
请求对象是HttpServletRequest接口的一个实现。
" C; V$ A" K8 m$ I, l9 h 响应对象是HttpServletResponse接口的一个实现。& I6 w, |0 D7 S7 o: b. Q
响应对象由于存放servlet处理的结果。4 \- Y0 t- t% z: V5 D& y; R$ y1 U
4)依据请求资源路径找到相应的servlet配置,1 s9 l; X9 L7 i5 I t! E, P9 p+ {
通过反射创建servlet实例。然后调用其' I* F+ W: B+ E' a9 B+ \( S
service()方法。在调用service()方法时,4 m2 H0 T. ?$ j* u' i+ H5 m
会将事先创建好的请求对象(request)和0 k6 M8 a# \; s1 n& a# f$ U$ I
响应对象(response)作为参数进行传递。: J/ B$ N8 N' ^* g: R! r9 Z. s
在servlet内部,可以通过request获得请求
% H+ i9 U$ H6 b$ D 数据,或者通过response设置响应数据。
" S9 s1 f9 ]) v: ^. K 5)服务器从response中获取数据,按照% Z( M g# h- V% I
http协议打成一个数据包(响应数据包),
) r- }/ E6 n- O& @4 t" m* Q2 g7 E 发送给浏览器。
) q" P, p$ [# Z6 ?4 L 6)浏览器会解析响应数据包,取出相应的数据,
/ S6 ]6 P0 O+ e8 h 生成相应的界面。8 o: V* Q$ \- z& _) {9 q
( ~. g# C9 V" F4 Z, e
5、使用ide(myeclipse)开发servlet( [$ J# Q# s" p
1)配置myeclipse2 j4 {0 s I; t' L8 ?
myeclipse管理tomcat。3 _4 F! [2 c: K8 j3 c- b% q+ s+ ^3 ?
2)建一个web工程
3 n" h5 E9 f/ Q
3 M/ X4 _ x# G% E0 G- z5 z 练习:
, S1 ~4 l9 }$ R' n 新建一个web工程 "web01_exec"
( V, [1 D+ k- ?2 r+ H3 b8 d 在工程底下,创建一个DateServlet。
7 M3 @$ t7 w! P4 q1 A 可以访问该servlet,输出当前系统(: A6 j/ l: e9 [/ G9 |7 A
tomcat服务器所在的机器)时间。
/ }3 u# E* H) a& A 比如:
& P# ?. l' E2 j3 b" \4 N# R8 m1 b http://localhost:8080/web01_exec/date( {% T: P, o4 v4 m/ o( p0 d. @
在浏览器端,显示
+ G+ n. x6 n3 \' Q now:2011-11-213 w: G3 {* n# ^0 W
要注意的问题:
8 a+ ~. c% ^& |3 W# r+ A: P! v2 L 1、要实现Servlet接口或者继承HttpServlet.+ o2 A4 A7 Y: t: W! @
2、service()方法名称、参数、异常类型
0 [, `4 k8 P$ p/ q# I 要写对!
; h3 k# z5 \& Q3 c/ b: v7 d. x4 ` 3、web.xml配置文件中,类名不要写错!
6 ~* [# p7 d4 A: c& |1 n* B! m servlet-name不要写错。
6 i T& Y" t/ _& m% q5 k- P2 x 4、在浏览器输入访问地址时,地址不要/ f% Z- r8 Z- D* o, c6 v
写错。应该按照: B4 D- c. ?% U! u* y: {: C
http://ip:port/appname/servlet的url-pattern5 g3 K) S a9 s2 U5 p5 J
去访问。) s1 i* e- \' k! i' {
5、记得先部署,记得服务器必须已经运行了,
: ]! k) [5 Z6 @, r! Q+ C' [+ L1 @ 不然不能访问。
8 s- r' G! g6 b7 o1 x' q; l, w 6、如果报500错误,一般是你的程序写错了,% ~/ M0 ^" X1 j. z" V
如果报404错误,访问地址有错。如果是405,
- q1 j" _/ @* a 请检查你的service方法名,包括方法参数等。
% C. H# U0 J& z: P( W ; q, Q' Y9 G' _$ k' r$ r( `
& Z* V# ?+ c, H' w* `7 Y
|
|