该用户从未签到
|
一、servlet基础
1 h5 f* E8 ]: P+ i* i 1、什么是servlet?( n: x# l) [' m, ?, J, g0 a N/ j
sun公司制订的一种用于扩展web服务器功能的; g2 K0 x! Y# L4 r
组件规范。
+ @$ q f5 k3 I4 t' E( [2 `8 W 1)扩展web服务器功能:1 g. g' A3 m \8 C
早期的web服务器只能够处理静态资源的请
. J8 K. b3 f3 {, Q% j( J; R- N, ] 求,即事先要将html文件写好,存放在服务器
6 Z8 z3 }6 \$ r+ d9 Y1 [" |' h& ]! a 上,不能够生成动态的html(也就是,通过0 a$ p# f( w7 h' J% { ^
计算,生成一个新的html)。3 x0 z% K3 n& _8 @2 T4 Z" d
所谓扩展,即让web服务器能够生成
H3 a, y$ }0 p! r 动态页面。, y! \0 [9 C, t8 l' _ V, T4 z+ L9 |+ d
扩展的方式,早期是采用CGI(common
2 `! t1 U8 O& g/ u+ M8 h gateway interface)技术。% g$ C/ \$ K+ S* O/ E
因为采用cgi程序编写的代码,可移植性/ |& q6 i, p E, q3 a$ Z! o
差、编程相当复杂、如果处理不当,会严重
1 o/ n$ k% L/ F2 x& B 影响性能。所以,用得越来越少了。2 _% k4 Q" F" y: b# Y; a2 _7 k8 R
现在,采用的是容器+组件的方式来扩展。; U! C& e! O- l1 c
2)容器与组件
- [2 k& @8 @; F1 @1 O 组件是什么?
- f, R Q$ M7 J6 q: m" X3 ?. _1 H( x 符合规范,实现特定功能,并且可以部署
# K7 K A2 P: r* g( F- H2 y- s1 t1 @ 在容器上的软件模块。
& X5 N& T6 f% T2 C1 p 容器是什么?
0 C/ V$ P. h" l$ B( p 符合规范,为组件提供运行环境,并且( F" ] o& z, m: \ S! f$ ~7 @
管理组件的生命周期(将组件实例化,调用
! i& ~# w1 C6 R: _( j& z# t 其方法、销毁组件的过程)的软件程序。' c# K: p, e) V& n ?: y- M6 K
采用容器与组件这种编程模型的优势:" w( ~+ [) T) m3 S! I! k
容器负责大量的基础服务(包括浏览器与! i. L5 t' p* ?+ W+ ] D+ v
服务器之间的网络通讯、多线程、参数传递
1 V5 j! ]/ E2 E2 p% J 等等)。而组件只需要处理业务逻辑。另外,& ^* e5 O+ J# w; {: V# G/ Q- w! p
组件的运行不依赖于特定的容器。
+ P0 U0 }5 E7 ~6 C9 a" \2 g 2、如何写一个servlet?" c8 ]: S& K+ }. n9 d
1)写一个java类(servlet只能使用java语言( V2 O' ?" r" b9 S% T
来编写) ,实现Servlet接口或者继承HttpServlet
, c5 q+ ]: |+ e0 X. y" E0 f1 Z 抽象类。
. i3 ^! ^ k1 }" R 2)编译
$ p# K) M! s+ i: b. O' C/ [5 F 3)打包' U& d: H' X8 S
建立一个如下的目录结构/ M. p/ {$ V, [, m! i
appname$ d+ ?: \4 q! C
WEB-INF& D, ~9 W) N, w$ T& M' _
classes(存放.class文件)& X1 u. ~7 e- ~ E. K/ u
lib(存放.jar文件,该文件夹可选)% R6 s w4 Z, K+ O) a* U
web.xml(部署描述文件), ], X0 K3 `; t' N3 q0 j7 O
该目录结构可以使用jar命令打成一个 ^' D, w5 K9 d$ v
.war为后缀的文件。9 H7 m* c' ]* b; T/ S
4)部署0 [6 s6 T& G! o
将第三步的整个目录结构或者是对应的
( u, o( [. b0 O G# l; l# ~: t* Z, P .war文件拷贝到服务器特定的目录。( n( \. c- G0 o+ C. ~. N
5)启动服务器,访问servlet
3 O) q* z5 }! j: K http://ip:port/appname/servlet的url-pattern配置# d6 H. Y$ M5 e* x$ T
6 s/ z& I5 c2 i- c 3、tomcat的安装与简单的使用/ N3 W( v, P2 V4 h
安装:+ M& ?- I* ^# H$ f6 r$ ~) M
step1 将tomcat解压到/home/soft01下。
! h5 h" A: J, P. R3 O8 D/ _! J step2 配置环境变量5 w4 D* _/ c+ A1 ?7 \
cd /home/soft01
K& O, L9 {! \ g! w$ @ vi .bash_profile; }- Y8 d1 b8 y0 w" T2 R
JAVA_HOME:jdk的主目录: W: l8 x% |$ [# ]
CATALINA_HOME:tomcat的主目录% s) ?0 _, p$ j; f9 B. j `
PATH:CATALINA_HOME/bin) A( |1 n9 R' u8 g* a9 ]
step3 启动tomcat7 X q* T* U+ |- f! @7 s* ~
cd /home/soft01. \) u% w! P. r V9 Y
cd /tomcat主目录/bin( J& O! K! n9 w, b: U9 o2 l2 M
sh startup.sh" J6 {% j) w2 U: r
接下来,在浏览器地址栏输入:) M! C9 y5 t! [
http://localhost:8080" @/ J: S$ s0 F/ o3 |; i( A
关闭tomcat
# c J& M) s" [9 G sh shutdown.sh+ Y8 l: Z) R0 Y$ B. g
目录结构(了解):! m& m% H$ G$ R! I; s; i* j. d
bin:启动和关闭服务器的一些脚本。
9 K M3 _/ _3 V! A common:共享(部署在该服务器上的
+ w; D( q9 Q2 E1 e! U: Q$ L, T 所有程序都可以使用)的一些jar包。
0 S) I9 |! Z( B! g; L/ V9 ^ conf:服务器的一些配置文件。
$ @ K6 F* F) |6 @2 J6 e$ v webapps:部署目录/ {. Q$ ~" v0 p/ v9 u: U
work:服务器运行时,生成的一些临时文件。; O4 ]& U9 O, I1 s$ |# z& H
7 b; `7 a% s7 Y7 V
4、servlet是如何运行的
! f3 l4 B4 s( W- w& x+ N" f0 c 比如,向浏览器地址栏输入! m1 k; [" A3 J- b0 K
http://ip:port/helloweb/sayHello?name=zs( ^, B, S- V" _7 H0 ], S2 Y1 t
1)浏览器使用ip,port连接服务器。
% k) B r/ i8 G8 G8 A 2)浏览器将请求数据按照http协议打成一个
0 M# z; M& v' D" S0 C$ Y 数据包(请求数据包)发送给服务器。请求数据4 D( K& J4 p n2 I
包的内容包含了请求资源路径" J5 h0 V4 A' Q
(/helloweb/sayHello?name=zs),另外,在5 u* n6 U1 H" M% O+ @$ j$ W
请求数据包当中,还会包含浏览器自动生成* O. d" h. h u, L8 g: Q. \
的一些信息。+ @5 `: ]/ P; M( `
3)服务器创建两个对象:请求对象和响应对象。
! s; O+ e: G6 x8 D 服务器解析请求数据包,将解析之后的数据1 ^$ `0 M8 K1 b, Q
存放到请求对象里面,方便servlet读取请求: S. V5 [% p {% B1 N# L8 `
数据(因为servlet不用解析请求数据包,如果
0 G- J$ d0 p7 o 要解析,需要理解http协议)。
- D' a$ x# b' ^7 x2 S# Q2 T0 _. V 请求对象是HttpServletRequest接口的一个实现。% }. ?, d0 A1 a5 d
响应对象是HttpServletResponse接口的一个实现。
+ F0 H a. ]9 E l+ K f. D 响应对象由于存放servlet处理的结果。5 l) {) {! W5 U5 M+ L: m
4)依据请求资源路径找到相应的servlet配置,
" T1 ~! d' t) H, J6 P! f) M8 y; S. e 通过反射创建servlet实例。然后调用其
& z X: r+ N* d- V- U2 \ service()方法。在调用service()方法时,
# p/ _, [7 J8 Q" d. f 会将事先创建好的请求对象(request)和
! l# L; Z* |1 K s+ j 响应对象(response)作为参数进行传递。
& }$ T& O! M$ ~$ H- l 在servlet内部,可以通过request获得请求& F- p9 b3 A2 `& \) Z0 \6 D4 Q
数据,或者通过response设置响应数据。
! r! k8 Q/ _& P5 m 5)服务器从response中获取数据,按照& q. p, d* A7 ?: P
http协议打成一个数据包(响应数据包),
/ E3 U7 Z! F) k- S# @) _ 发送给浏览器。
^2 `2 a8 y+ i, V3 h3 O& p/ ^ 6)浏览器会解析响应数据包,取出相应的数据,
) [7 E& O. q1 n" k 生成相应的界面。# s% g% t* _6 i& {1 |
/ y4 i) L6 w l9 L- `* X, C; U- c 5、使用ide(myeclipse)开发servlet( E+ v8 i# M( v- Z; I* A
1)配置myeclipse
D" C. A" V# W' `! n# M myeclipse管理tomcat。6 M0 j: k+ R8 q b ~
2)建一个web工程$ {' d2 t0 ?* t) u& E
; ~* m2 x( z6 _3 H/ B, j. U
练习:
/ Q9 Q) |; M# B* i, A# T7 h 新建一个web工程 "web01_exec"/ O- N3 u+ H1 m
在工程底下,创建一个DateServlet。2 i" ^6 N% G& f9 d) j' x
可以访问该servlet,输出当前系统(. \7 @- P W9 u! k w
tomcat服务器所在的机器)时间。
: Z* j/ O. Y( _8 v7 N K; E 比如:
: a8 A7 [! r1 C4 J! z http://localhost:8080/web01_exec/date1 Q; M6 v) e& X" x8 C+ k. e
在浏览器端,显示- n: ^7 M+ O+ {% d: p* l
now:2011-11-21
- g8 ^, j: ]* w! a1 v要注意的问题:: D. z3 V5 U" o& R, X1 W! q: ?
1、要实现Servlet接口或者继承HttpServlet.
" o" B" G2 K6 V, } 2、service()方法名称、参数、异常类型
& _, t3 O. }, {* a+ g 要写对! D# u* g7 l: A6 V n+ m) H! Z
3、web.xml配置文件中,类名不要写错!: h" S* _; |; K+ R
servlet-name不要写错。
]7 r6 l. {/ R1 T/ P. W7 x) Q 4、在浏览器输入访问地址时,地址不要
" |* ?! H2 ^ ^0 b' S, t6 S 写错。应该按照' Y& a; L9 d0 h, F: l/ T
http://ip:port/appname/servlet的url-pattern# b( e4 }! ?4 U
去访问。; `( y% H, W# F$ C
5、记得先部署,记得服务器必须已经运行了,
" A8 _2 t) A7 D" Q4 l 不然不能访问。# D7 `8 y+ n3 S: o, \& C& m
6、如果报500错误,一般是你的程序写错了,
$ L$ O4 {5 o3 r1 p7 q 如果报404错误,访问地址有错。如果是405,# w) a* j0 A. Q: @, a* \& { Q
请检查你的service方法名,包括方法参数等。7 s' ~+ F* G, b* U! X6 A6 y
* H, k, @, v8 u6 [4 P 练习,写一个BMIServlet,计算一个人的5 l; o) V' L6 u) ~+ D
bmi指数。
, ~ G% r4 @+ [% p5 I 体质指数(BMI)=体重(kg)/身高(m)/ 身高(m)
0 m+ G+ M$ c }! W3 @% }/ ~- q 例如:70kg/1.75/1.75=22.86
; ]7 f- f. V+ r3 ?6 Y$ r# r 成人的BMI数值 0 k/ |4 b7 t) H3 P, W
体重指数, 男性, 女性 结论
5 R1 I( q* M9 j# }4 |# a% N- B 低于20, 低于19 过轻
5 l8 k: B. c; Z3 H0 q7 s 20-25, 19-24 适中- S3 C( W; [, Q1 V9 J b! ?
25-30, 24-29 过重/ @- p- S7 ^0 X+ D
30-35, 29-34 肥胖' H* |) @4 ~: q) l1 q" ]# b2 Z8 N) R
高于35, 高于34 非常肥胖
" ?+ l4 Z) W! u) X 专家指出最理想的体重指数是22
( @' X" t# W* _ ' C9 X$ Q3 P: ^, q& A
http://ip:port/web01_exec/bmi?height=1.7&
( `' ?, y: C$ o4 q4 K; t weigth=70&gendar=m" I7 ]! C; Q Y. B. P
; m% y6 W6 o! O, t |
|