该用户从未签到
|
一、servlet基础
* e- B+ D- p/ }) j6 w 1、什么是servlet?
% G/ U. k0 |) s/ K( i sun公司制订的一种用于扩展web服务器功能的/ y, j4 B; K8 X; ` i. Q
组件规范。' \- U4 g; l5 v. l- J& F$ n1 |+ E
1)扩展web服务器功能:
. _1 m3 K$ G0 `6 G 早期的web服务器只能够处理静态资源的请# A2 x0 E# }' r5 ~1 O2 {7 s
求,即事先要将html文件写好,存放在服务器% S" ? M/ x- T! x
上,不能够生成动态的html(也就是,通过1 y* j2 y1 ?' |1 F
计算,生成一个新的html)。
' O. a% n: @8 }' C' s 所谓扩展,即让web服务器能够生成
4 c% I; T9 X2 T0 j& s" ]$ h 动态页面。1 q; h* r0 U8 P
扩展的方式,早期是采用CGI(common
: f7 g5 I8 j4 X" M9 _ gateway interface)技术。/ [/ C X \- `5 Q( O
因为采用cgi程序编写的代码,可移植性; H. `+ X- k+ ?
差、编程相当复杂、如果处理不当,会严重) s, z& ]/ I( D; r1 J/ z
影响性能。所以,用得越来越少了。% m6 L; H# p1 K3 _1 m ?( s
现在,采用的是容器+组件的方式来扩展。
- }+ p# N* I9 U; @" ~' M5 \ 2)容器与组件
- d& X5 b: H; [5 y, ?( G0 Y# o 组件是什么?
$ ~% h8 ^% Y' w, W3 t8 C; M- N 符合规范,实现特定功能,并且可以部署
$ D- |3 N0 c& P 在容器上的软件模块。
8 S, i! [6 b+ F0 d. ^ 容器是什么? O& [4 z( v l; _
符合规范,为组件提供运行环境,并且' V* V/ ?4 u% g% A; L
管理组件的生命周期(将组件实例化,调用
3 {( _3 c; t1 ?% {9 w( @& [) m 其方法、销毁组件的过程)的软件程序。
_0 Z, D' ~9 p2 e 采用容器与组件这种编程模型的优势:, E9 e* p, j* u$ r% `* |. T4 R \
容器负责大量的基础服务(包括浏览器与, @1 h* T( {0 `& e7 S
服务器之间的网络通讯、多线程、参数传递
3 h R6 A3 [9 Q. v 等等)。而组件只需要处理业务逻辑。另外,
5 Q- {5 _5 f& @* X) O% W 组件的运行不依赖于特定的容器。# E2 m8 C7 }& L; `& @
2、如何写一个servlet?
2 U9 f3 v2 }& J 1)写一个java类(servlet只能使用java语言
0 f) o/ a4 h; t- x; D0 j6 H/ w 来编写) ,实现Servlet接口或者继承HttpServlet) u. T- m h) \& F/ j$ b
抽象类。. N+ `0 y6 z ~% Z# R
2)编译
5 I% r. y7 a/ m0 E% B 3)打包
$ X# }) c$ T# d! F+ Q: I 建立一个如下的目录结构
: A7 J4 E8 }) h, y' S' S appname- X/ q, f7 r9 e/ O: l3 q6 `" \% F
WEB-INF( A# ~' O- y& t4 B- D
classes(存放.class文件)
" c6 |8 [- r) F9 ?1 H lib(存放.jar文件,该文件夹可选)
# t# B2 L( u4 {& p: e web.xml(部署描述文件)& E, s/ K9 \: B( L. h
该目录结构可以使用jar命令打成一个
! _# f3 a* F4 m4 M/ V .war为后缀的文件。
) t/ U) R4 j+ X0 G2 S 4)部署4 u" E T! D- r6 {) V9 U
将第三步的整个目录结构或者是对应的) g# D L9 y' m# e9 w- Q7 i) O
.war文件拷贝到服务器特定的目录。
+ t5 Z( R! Z0 J! D 5)启动服务器,访问servlet4 F! _- [' H& i- S
http://ip:port/appname/servlet的url-pattern配置
. j( C- @* m; ]$ }: e 3 w6 J6 b1 P4 F) E6 P6 E5 _
3、tomcat的安装与简单的使用
. `% c- _3 S$ k 安装:
2 i( }9 q! W+ Q, l* [ step1 将tomcat解压到/home/soft01下。% F- [, R$ L; I! s6 B) o0 f
step2 配置环境变量/ I) \' I8 I8 D8 B
cd /home/soft014 b% N) b8 S9 b _5 x2 X/ d7 q, m# `; N
vi .bash_profile2 n5 t( }8 V1 z4 Y% Z, o3 V' y0 B
JAVA_HOME:jdk的主目录
4 P1 H% T; |+ p# L1 a+ a9 Q CATALINA_HOME:tomcat的主目录
; a6 c( B6 f+ H9 F PATH:CATALINA_HOME/bin
5 d l2 [7 _+ U E5 {+ K1 Y/ R step3 启动tomcat+ ]; u7 x6 p9 i* @" [3 j3 t
cd /home/soft01
P i4 T. U0 ~ k7 n' Q2 ~7 R cd /tomcat主目录/bin
6 \7 ]/ z; |; ~1 z' G# i" r" }& u" F sh startup.sh
9 f" v" \% m, |4 t+ O4 `9 L 接下来,在浏览器地址栏输入:3 r6 s, K) t, l
http://localhost:8080
4 n& s. \# Q# e5 K 关闭tomcat
* L6 p8 v; L; v* n sh shutdown.sh
- D; t' F/ n) N2 @* h# { 目录结构(了解):
2 q: N J) Z, w, D. h% q8 R7 ] bin:启动和关闭服务器的一些脚本。8 ~ V3 m6 [" q; l `
common:共享(部署在该服务器上的4 r* m0 J: B, F# B! X& Q) h) C
所有程序都可以使用)的一些jar包。* y6 W3 n9 ?* R/ Z+ N
conf:服务器的一些配置文件。
( X4 Y$ g! B# }( l webapps:部署目录8 L0 \' y, |' m# M+ z2 T: h: _3 }
work:服务器运行时,生成的一些临时文件。6 }& d3 a& w, [* S
8 F0 ~. {9 O( P8 L4 ] 4、servlet是如何运行的
* L2 b3 A1 V/ z( x 比如,向浏览器地址栏输入. W+ j8 y3 R0 C+ v2 @6 ~0 y
http://ip:port/helloweb/sayHello?name=zs' X- h h$ d/ Q1 F
1)浏览器使用ip,port连接服务器。
, V4 Q- C: }" U; ^ 2)浏览器将请求数据按照http协议打成一个) Z$ F; E3 g+ Q' v9 m! p: ?& {
数据包(请求数据包)发送给服务器。请求数据
) q1 [0 |0 ^- B3 |& w+ y 包的内容包含了请求资源路径
: S) S9 V7 i$ t4 X (/helloweb/sayHello?name=zs),另外,在. b: }* f% F. d O, T L
请求数据包当中,还会包含浏览器自动生成
+ ?, [9 Y& ~, r$ n 的一些信息。& o) w7 S# ?5 G5 Y+ {: d* `
3)服务器创建两个对象:请求对象和响应对象。! T! G& d6 {9 c/ X' l3 ?
服务器解析请求数据包,将解析之后的数据9 b# H# H! ~5 e S
存放到请求对象里面,方便servlet读取请求; U2 C r+ X l0 q* h- b
数据(因为servlet不用解析请求数据包,如果
( T, j0 R% O8 P4 U! t+ U" f 要解析,需要理解http协议)。
; J) @. U% e* i 请求对象是HttpServletRequest接口的一个实现。# g5 k& |, f6 b! |3 h* ~3 Y2 K
响应对象是HttpServletResponse接口的一个实现。0 [: F- q( |9 o2 j
响应对象由于存放servlet处理的结果。
! k1 x2 _+ y8 x- K 4)依据请求资源路径找到相应的servlet配置,
- t2 u1 f! ?7 R 通过反射创建servlet实例。然后调用其' K* U$ R/ b$ `2 ~
service()方法。在调用service()方法时,
- ]& u) ?* X" y( _. C8 I9 i$ d 会将事先创建好的请求对象(request)和! y% T" a5 h& a
响应对象(response)作为参数进行传递。
4 V$ `* z4 y# I3 C 在servlet内部,可以通过request获得请求& o* S, E% ~& E7 }) e
数据,或者通过response设置响应数据。
: d/ G+ V4 S) p9 v2 f8 o- b 5)服务器从response中获取数据,按照) W* q7 n" D. Z# `" |% K
http协议打成一个数据包(响应数据包),
P4 }3 `) H/ y9 P3 k 发送给浏览器。! m0 T8 Q0 B6 g, U- A* Y/ c4 S
6)浏览器会解析响应数据包,取出相应的数据,7 h9 F; c2 g# B2 \1 l3 \4 C. ]
生成相应的界面。
3 b/ H9 Q, ~7 T
. k l- k9 H# |9 D z7 x+ I 5、使用ide(myeclipse)开发servlet" B, L( |7 X, r: E% }8 @
1)配置myeclipse ?# i$ `# ^$ a0 A
myeclipse管理tomcat。+ q" d9 x: D t& L; y& c
2)建一个web工程
# l8 e( v; [; D0 z ( a9 I3 _! Q* S* _+ Z& K: @& z9 d+ x
练习:, R9 z# s8 I5 x: ^
新建一个web工程 "web01_exec"
2 d1 k8 u( L6 p" M0 y 在工程底下,创建一个DateServlet。
; I& B6 z. Z1 [" T4 z2 o 可以访问该servlet,输出当前系统(& N+ S B. ?7 U$ B' Q- E
tomcat服务器所在的机器)时间。
6 w2 ]# C. {2 Q$ K4 D; s4 u5 O+ m 比如:
$ k3 d* D# i; h: w; i O' } z# { http://localhost:8080/web01_exec/date
1 U7 o" O* Q6 ?; |0 F$ ^ 在浏览器端,显示8 J% g5 g1 l- J
now:2011-11-21
8 X! P0 `8 `) d* X# S, l d) E要注意的问题:
2 K5 m+ C: s" ^ 1、要实现Servlet接口或者继承HttpServlet.
% b4 b5 {# f P# @3 E& ?( D& U 2、service()方法名称、参数、异常类型1 {; E7 z& I( c3 ^ \8 ^
要写对!
* G: `. f2 q- M8 W" `! X9 q 3、web.xml配置文件中,类名不要写错!/ o" u( b) M( r- g
servlet-name不要写错。
1 m3 ]' `5 e2 o+ P" \ 4、在浏览器输入访问地址时,地址不要# [1 B2 V) M9 K8 Z' z( R n
写错。应该按照
9 {8 N0 ?6 \; J' |$ U http://ip:port/appname/servlet的url-pattern
- j) O% n6 N% v/ W$ H' E 去访问。
) K. S6 {6 U/ k5 a$ I) V7 T 5、记得先部署,记得服务器必须已经运行了,
7 U+ T/ }! V+ G8 P! q7 E 不然不能访问。
9 t5 k. m9 y- |6 m 6、如果报500错误,一般是你的程序写错了,+ A* q6 M* K% D8 }1 ]) Y
如果报404错误,访问地址有错。如果是405,' v- d/ m/ R) z# V
请检查你的service方法名,包括方法参数等。
( F, J& z/ u/ L8 R0 _
1 L( ~' F& I1 q Q: @# y/ S+ d 练习,写一个BMIServlet,计算一个人的1 ~1 o, G1 y6 w. ]$ o9 w1 M$ W
bmi指数。
" O; J6 N: h. ~ 体质指数(BMI)=体重(kg)/身高(m)/ 身高(m) ; q0 ^/ \4 Z: [7 F
例如:70kg/1.75/1.75=22.86
7 J/ r1 r. g2 x5 i/ |7 n 成人的BMI数值 + S, q `8 ^0 X7 G6 N |7 |
体重指数, 男性, 女性 结论
$ ]. x# f% r% b) B3 C: y 低于20, 低于19 过轻
: k6 Q: e8 ?1 g9 X8 c8 d$ o: q 20-25, 19-24 适中- I) p( s- ?7 @. a8 k8 i7 r" u
25-30, 24-29 过重
* `/ ~6 `3 N! ~& X/ p 30-35, 29-34 肥胖) c& m2 K# U; F( y, @
高于35, 高于34 非常肥胖6 w$ C& E. Y8 q p. k1 L% P# B
专家指出最理想的体重指数是22
2 {- T; Z% v% P# o ; a1 y" U% t9 x$ Q. W9 x6 Z
http://ip:port/web01_exec/bmi?height=1.7&( Y) o. @1 t( ~4 H/ K
weigth=70&gendar=m
- a1 L. q3 T# e' b0 A4 z/ ^$ L( j" T; s
|
|