该用户从未签到
|
一、servlet基础
9 i% m# L/ C, q8 d# | 1、什么是servlet?1 `8 g8 q4 s1 d* b: I) _) }1 e# p
sun公司制订的一种用于扩展web服务器功能的9 z- w: K" I2 |- @
组件规范。) L) X3 O# r1 v& A* v
1)扩展web服务器功能:9 w9 m3 ^! H# e! O$ X! m2 J
早期的web服务器只能够处理静态资源的请
- i% p, W6 Q% }# A4 D- S 求,即事先要将html文件写好,存放在服务器
0 q6 A6 p* F& v/ H4 q1 ] 上,不能够生成动态的html(也就是,通过
$ ]; K. F' i" S$ q1 b+ [ 计算,生成一个新的html)。* e1 m! e$ _5 m% u d$ i; t1 V$ d
所谓扩展,即让web服务器能够生成
+ m, ?/ {; K' n% T+ y 动态页面。6 r! j. s* X4 W2 H. ~
扩展的方式,早期是采用CGI(common* Z6 I9 w+ v5 i6 g# _
gateway interface)技术。7 f9 K( |, Z( V0 X& ~- A
因为采用cgi程序编写的代码,可移植性. G6 s0 T1 }, L* @$ K" l; [% k
差、编程相当复杂、如果处理不当,会严重$ X; e1 k. B2 Y0 L H) }$ I, D* A
影响性能。所以,用得越来越少了。/ `& w2 x& O; q7 g) G
现在,采用的是容器+组件的方式来扩展。/ D8 x2 @/ Q6 f2 t3 o7 ?
2)容器与组件
! j( f, o2 V6 @. Q5 Q, d 组件是什么?1 w* n6 ~6 B6 K
符合规范,实现特定功能,并且可以部署
0 M, R4 d+ B. v! {* n4 L 在容器上的软件模块。
% @3 d8 U3 @( r* D$ I 容器是什么?: Z1 r% ?* \8 _" m `
符合规范,为组件提供运行环境,并且: P J* n& b' k: c5 V# h) }2 B
管理组件的生命周期(将组件实例化,调用
3 ?$ q/ a, D. L+ ]6 Y7 {( }1 R 其方法、销毁组件的过程)的软件程序。 X( a+ z8 U0 f
采用容器与组件这种编程模型的优势:
7 k& h+ C) P* S" u5 [! y 容器负责大量的基础服务(包括浏览器与$ B5 b; P) I5 y6 p- e4 q
服务器之间的网络通讯、多线程、参数传递
/ h& T( n0 C4 @9 a6 @* H6 { 等等)。而组件只需要处理业务逻辑。另外,& @. y! T6 m! X, y/ }7 R; J2 q& C: O
组件的运行不依赖于特定的容器。
. j* R# ?! x2 b o+ _ 2、如何写一个servlet? S- F" j) s W( K" T, h0 y
1)写一个java类(servlet只能使用java语言
- w$ a& q) K- y4 q- Y- i 来编写) ,实现Servlet接口或者继承HttpServlet! [+ n+ M+ [! o7 J& F. v2 M% B$ X1 U9 E
抽象类。/ k- w( M8 y$ ?
2)编译
! F |# S1 q$ H q: g; M4 ?8 ?5 [ 3)打包
! d. P: x3 O; p0 {+ d' G ^ 建立一个如下的目录结构* X) a& w2 z/ ?' g! z/ Y1 `
appname3 V& q+ }7 h) V& k, H
WEB-INF! O. C$ l) U6 U1 P0 S% R. l1 L
classes(存放.class文件)
. k: C- G7 ~+ C$ v lib(存放.jar文件,该文件夹可选)' E! m6 C: z. l: a+ r7 J
web.xml(部署描述文件)) D1 s1 c9 z$ r; K
该目录结构可以使用jar命令打成一个, ^/ l5 u- m) J
.war为后缀的文件。
7 J4 F* k) K% G5 a% P' g 4)部署
/ Z" x5 o. ~& F5 Q' c0 ^/ p( p5 I 将第三步的整个目录结构或者是对应的" d0 E& V' W& V( o7 C. y& e! P
.war文件拷贝到服务器特定的目录。7 P- c2 t. q2 u* z. S
5)启动服务器,访问servlet- }$ a5 v H0 `! j' g
http://ip:port/appname/servlet的url-pattern配置
# D, \+ z' d" U: o
; w& q4 {" E& u* @( s5 a 3、tomcat的安装与简单的使用
& b% k1 I& W6 q+ z3 q1 H' T3 p8 q. m- S, y 安装:
: T$ @" c. [8 L/ p6 c* l: z step1 将tomcat解压到/home/soft01下。: W& H2 v. t1 c& P0 x6 ]4 o
step2 配置环境变量) Y& p: z% e0 B5 l- t/ w( R6 |+ i
cd /home/soft011 R7 d6 u# v* Q3 K; ?4 p
vi .bash_profile1 f. Z7 T* q, f& Q8 b4 T' r
JAVA_HOME:jdk的主目录
* |7 ]) V4 n- m1 K CATALINA_HOME:tomcat的主目录
8 P* N7 j. `7 G6 o: N PATH:CATALINA_HOME/bin; p2 t$ c4 B4 @! Y, T
step3 启动tomcat
7 p& i( z- J0 f) F9 N cd /home/soft01
0 d& Q" A7 e% T) Z6 \( A) I cd /tomcat主目录/bin( R: b4 _" m3 o5 `) b0 r
sh startup.sh
0 s) f8 g# I3 ~# U 接下来,在浏览器地址栏输入:
# Q6 t G& v7 L2 |5 L1 C& }" K http://localhost:80806 l/ R! r" F, U
关闭tomcat0 |7 q' i& A' r9 k) _9 \2 \3 C/ [
sh shutdown.sh0 J2 [' f, s. W7 S% o
目录结构(了解):6 w7 B; i2 T& c5 ?& U" S4 h. d" l
bin:启动和关闭服务器的一些脚本。3 [; s6 e8 z$ w) ?# I" l
common:共享(部署在该服务器上的; Z; y- l% u6 |$ j) `
所有程序都可以使用)的一些jar包。
5 F4 [7 e+ z3 w& B+ e conf:服务器的一些配置文件。
+ U4 T- q/ F9 Q- X3 ?' U webapps:部署目录9 s9 M, j# g% r
work:服务器运行时,生成的一些临时文件。8 I3 M1 M3 e; Y2 S7 t5 m
* \9 }# F4 T7 r 4、servlet是如何运行的; X% C) d+ V9 S4 ^, T6 a
比如,向浏览器地址栏输入
9 {1 A# O6 g9 a' p. Y& q' g. p: y http://ip:port/helloweb/sayHello?name=zs
3 Z a8 V0 M$ f3 H 1)浏览器使用ip,port连接服务器。8 Z. z; u: a4 _: d: O
2)浏览器将请求数据按照http协议打成一个
8 a; X* B3 L) K; E+ V2 | 数据包(请求数据包)发送给服务器。请求数据
4 j% i% P* }) l" s4 Z 包的内容包含了请求资源路径
: H6 J' Q* a! M) @ (/helloweb/sayHello?name=zs),另外,在# e9 Q. y- z) s& y1 k2 V& a. |
请求数据包当中,还会包含浏览器自动生成
- [6 j- T' Y) @) ] 的一些信息。! X! w, P8 F3 I- h& t* [
3)服务器创建两个对象:请求对象和响应对象。
: Y! D0 p9 i9 I, n 服务器解析请求数据包,将解析之后的数据
8 F, M& U( z, U B. b% } 存放到请求对象里面,方便servlet读取请求( Z$ }8 R2 q0 t1 U- t$ b2 x4 d2 @$ q
数据(因为servlet不用解析请求数据包,如果
9 P( ^8 _ u) }6 { 要解析,需要理解http协议)。
/ C8 N, o3 g: \7 h3 N 请求对象是HttpServletRequest接口的一个实现。( l) b# ?- _% k* G
响应对象是HttpServletResponse接口的一个实现。0 W0 w' [6 T9 m) U; `* J
响应对象由于存放servlet处理的结果。: t O; K6 v# |: O( o
4)依据请求资源路径找到相应的servlet配置,! C0 M) T' y5 V5 z. d( J5 n7 q
通过反射创建servlet实例。然后调用其
( q& s2 [, p, l7 S0 P' Y* }& f* r% g3 w/ ] service()方法。在调用service()方法时,9 @3 A0 v& P k: h6 G, t
会将事先创建好的请求对象(request)和
6 O" n: Y8 }( L% X( y 响应对象(response)作为参数进行传递。
& K7 C- }$ \: X, h; h0 M 在servlet内部,可以通过request获得请求
1 l+ T: ^9 \! [) ~8 b 数据,或者通过response设置响应数据。
1 p& i# Q/ b {$ t4 t* [9 Y1 n 5)服务器从response中获取数据,按照
) p N: K! h2 Z# m5 f6 R+ y: e http协议打成一个数据包(响应数据包),
1 E) {7 ` |( A: s5 G. v+ Z 发送给浏览器。1 L1 w1 X* l6 r3 P' M
6)浏览器会解析响应数据包,取出相应的数据,- C5 h( E; l* R7 M
生成相应的界面。
: J! `3 A) l- e3 R( {9 v
; I" F ^- j3 R; I. o 5、使用ide(myeclipse)开发servlet
& X+ g; V: ]; t- e" ^8 W 1)配置myeclipse! O& {) P9 H% A* A4 W. A, h
myeclipse管理tomcat。 G$ K' F) i7 o) f6 O+ v+ ~
2)建一个web工程
- Y1 @. F+ R# l5 s" w6 Y, F 8 P2 G" D% S' {' Q2 P; I0 v. w
练习:
Q$ Q4 C" ~( u) [" } 新建一个web工程 "web01_exec"1 W3 l j1 G; a7 G
在工程底下,创建一个DateServlet。
; X" b/ R: J# ]2 X 可以访问该servlet,输出当前系统(
. K5 i8 l. @8 {6 C tomcat服务器所在的机器)时间。
7 x9 u; s9 z- c, S$ w7 d- _ 比如:
- v9 d0 W. v3 W* V# S! d http://localhost:8080/web01_exec/date
1 E9 R$ ?! I" M+ A j 在浏览器端,显示
7 _; K& C, ?1 O1 f3 k& ?" e# y. F now:2011-11-215 k7 x0 G$ Y: V1 b& }
要注意的问题:
, Z7 u$ Z4 j4 d# r 1、要实现Servlet接口或者继承HttpServlet.
. `: Q0 K( K' q; D 2、service()方法名称、参数、异常类型
( {) p. I& m( n# O. j2 P* S. r5 c! h 要写对!1 D; N2 N+ w U7 m3 b" S$ c1 H
3、web.xml配置文件中,类名不要写错!
9 B% ^8 S) [4 D$ A+ k servlet-name不要写错。4 v5 }# J2 x! S& `* [7 f6 L: y
4、在浏览器输入访问地址时,地址不要3 x' N" X' Z, y8 [! ]* k
写错。应该按照
g- C6 `# @$ ^& f http://ip:port/appname/servlet的url-pattern! W# E- [5 h) r6 r
去访问。6 o$ _4 }: x7 ]; p- |$ M- F
5、记得先部署,记得服务器必须已经运行了,
' s$ |. y$ F; w4 K% U* i 不然不能访问。 G- g# m; m+ \- x5 G. n) j
6、如果报500错误,一般是你的程序写错了,
: ]7 x% A+ V% F 如果报404错误,访问地址有错。如果是405,
- K: E) e- E3 d7 R% C# _- I! v 请检查你的service方法名,包括方法参数等。- t7 M7 b& N9 R! D' T) h
, J: J B1 h7 {5 {8 f
练习,写一个BMIServlet,计算一个人的; { }3 j# b& i$ J2 R
bmi指数。
. i4 }: s1 X' m 体质指数(BMI)=体重(kg)/身高(m)/ 身高(m) " l5 ?! @: Y6 ~. a3 ?6 ^- M* G4 w
例如:70kg/1.75/1.75=22.86
3 z4 q, L" L1 }: U 成人的BMI数值
' o* e! u7 J8 j h' _* ] 体重指数, 男性, 女性 结论
0 C5 h+ N3 n# G* y 低于20, 低于19 过轻
' }2 F& r m" L 20-25, 19-24 适中
8 H( z% b5 G' B& h 25-30, 24-29 过重
( z/ x/ [6 A6 t7 u( j 30-35, 29-34 肥胖* m/ v$ E y: Z
高于35, 高于34 非常肥胖) B. a( G, M% @' m* c X
专家指出最理想的体重指数是22
7 F& q) u7 H7 [- z# t
7 N5 ?& Q R& p/ j3 [( z: S http://ip:port/web01_exec/bmi?height=1.7&8 h4 Q7 g8 l$ P+ O1 Q# k2 F1 @1 f; Y
weigth=70&gendar=m
) |9 i U# H3 |3 G7 Y0 S% q# Y. y" \% {
|
|