该用户从未签到
|
一、servlet基础4 b6 \9 M7 |4 } t, o
1、什么是servlet?3 x/ H" G! {9 L( f, c
sun公司制订的一种用于扩展web服务器功能的
! X1 j. I3 q! e& R2 z 组件规范。
0 D/ b) F9 n6 Z; I* i, b 1)扩展web服务器功能:
# K6 _# c1 F1 N1 X# u0 y 早期的web服务器只能够处理静态资源的请( V4 k- w2 G6 S7 H* X V7 ?( t1 D
求,即事先要将html文件写好,存放在服务器5 e/ }- ?9 j" J* o) k/ b3 d# L* A
上,不能够生成动态的html(也就是,通过
8 u, ~: D1 v X' {6 j* G* {- b7 m 计算,生成一个新的html)。+ o0 ~/ K) P, }1 K& ?4 }0 X
所谓扩展,即让web服务器能够生成
% R7 o% c& |# X- L" w) O 动态页面。
6 E' p6 Y) t$ w) V' L 扩展的方式,早期是采用CGI(common
X1 b5 [' i5 Y9 ~1 V+ [0 ]6 l gateway interface)技术。
5 z) C) r! u0 D- b2 e0 ?5 u$ B 因为采用cgi程序编写的代码,可移植性3 C( T) ]9 o& R Y5 j; u
差、编程相当复杂、如果处理不当,会严重
. Y/ j7 Q# h, k# L( v 影响性能。所以,用得越来越少了。9 o& ^8 ^: V5 I' d
现在,采用的是容器+组件的方式来扩展。6 j! v1 q6 g/ |0 p+ g; N7 m
2)容器与组件
0 g* s9 a* h) X9 ~1 f6 S* W V 组件是什么?( L) U" Y' `) L* s# D( d
符合规范,实现特定功能,并且可以部署4 k8 y2 u$ }* z' L! b
在容器上的软件模块。
: a1 c- c4 a2 a+ K' h 容器是什么?2 n" ~7 w: z9 h7 T( }* j5 _; o
符合规范,为组件提供运行环境,并且
9 }6 r$ p/ V6 }: ^- P6 c8 a5 a 管理组件的生命周期(将组件实例化,调用
% `2 `3 ?4 i; \2 [- r 其方法、销毁组件的过程)的软件程序。- V3 J: ]! s2 i) p7 X
采用容器与组件这种编程模型的优势:
3 Y3 B6 v% T* J2 A/ S. n 容器负责大量的基础服务(包括浏览器与* }3 W4 r4 _. X
服务器之间的网络通讯、多线程、参数传递" o( W* E" ?" c
等等)。而组件只需要处理业务逻辑。另外,
7 Z, E( v C) X) U: K/ Q f" Z" W8 D 组件的运行不依赖于特定的容器。 v- f$ y9 s' B O" }5 v% H
2、如何写一个servlet?
. o2 |" e$ ~0 }7 g0 I# c6 \5 A( D# e 1)写一个java类(servlet只能使用java语言
! K" a: N8 `2 l, v; ` 来编写) ,实现Servlet接口或者继承HttpServlet
5 V: W' B7 o& ?& ]1 X 抽象类。
, @( n8 X \' y% G( A6 k 2)编译
: x2 W8 b' X1 {! i4 q 3)打包5 ~3 b! w4 A4 Y+ o/ z
建立一个如下的目录结构1 x f6 A7 p. p$ l% \+ O/ k
appname* x8 l! X9 K. t4 b3 b2 {2 V
WEB-INF- \! G' [+ A9 T1 x5 N' H
classes(存放.class文件)6 I3 H+ ^& _6 ?8 g! M
lib(存放.jar文件,该文件夹可选); i4 S" N3 j6 o1 u& u- |0 V% I( y
web.xml(部署描述文件)+ l$ `2 o( n: G7 d; S$ S3 ~
该目录结构可以使用jar命令打成一个* C% E" ?8 n& R7 s; s
.war为后缀的文件。( S) r3 H/ H4 t+ V
4)部署3 ?. c# I% o. q5 v
将第三步的整个目录结构或者是对应的
# L3 N. e+ S( s$ Y& M, H .war文件拷贝到服务器特定的目录。7 t/ w* A9 T& J
5)启动服务器,访问servlet
# }7 T6 l4 h4 `0 h/ L http://ip:port/appname/servlet的url-pattern配置
! L. h/ W& Y5 \/ H' Y ' y! d8 Q- U ^6 V0 g
3、tomcat的安装与简单的使用) R7 y; m6 [5 ]: _+ L6 Y7 A
安装:
* o1 t, J# `0 w. C+ z) o+ n1 N R step1 将tomcat解压到/home/soft01下。7 j* r& S+ |. B9 t o! c$ O5 `! ^
step2 配置环境变量- S" n! y% P& V" g1 m. A
cd /home/soft01- ?/ E; E" l/ {/ a% }
vi .bash_profile
- K }+ x+ y, J7 J; ?- R) h6 t0 M JAVA_HOME:jdk的主目录1 i" U5 ^' P+ e) [5 {
CATALINA_HOME:tomcat的主目录' S+ E8 \ B* P7 R" D
PATH:CATALINA_HOME/bin0 X; ?- h/ O- ?
step3 启动tomcat
: J. F3 e ~2 l$ y9 Q) ~0 V# M! ^) H cd /home/soft011 Q9 [# o7 S. W; Y" l3 ]0 C7 G6 M
cd /tomcat主目录/bin
: |$ q2 W* b8 D: D sh startup.sh
- L) {1 D3 A1 U3 f2 z7 t% Q 接下来,在浏览器地址栏输入:2 Z3 R2 O8 f( O
http://localhost:8080" U$ w; g8 p4 ]4 }8 d
关闭tomcat
" C1 P) b, u) f+ _7 `% q sh shutdown.sh# P8 }& g! _* V. X% G7 ]
目录结构(了解):, Q: n3 i9 r2 ~' g( E
bin:启动和关闭服务器的一些脚本。0 b5 \: Z. r; Z Y: ]
common:共享(部署在该服务器上的) F" I! \" d6 ?8 C, E0 _
所有程序都可以使用)的一些jar包。
2 Y( M! H9 }' w4 n& _ conf:服务器的一些配置文件。
+ k0 g+ |$ b' d& W webapps:部署目录
5 d, s7 U, r0 y# _& ^# @& F6 z work:服务器运行时,生成的一些临时文件。
' E- j1 H2 W4 H5 h* Q/ F: o $ K2 N* y: x5 v" a3 I2 N
4、servlet是如何运行的$ E3 \: J# a; t' a" S" X
比如,向浏览器地址栏输入. Q- | d+ U M/ r$ w
http://ip:port/helloweb/sayHello?name=zs
. V9 j; }& O% w5 g- \5 I 1)浏览器使用ip,port连接服务器。
5 d$ V3 j* M% w4 x( G 2)浏览器将请求数据按照http协议打成一个: W: K4 q( p1 R+ e
数据包(请求数据包)发送给服务器。请求数据$ S0 g9 I, J0 D. {
包的内容包含了请求资源路径) K/ y" m. u8 T- q
(/helloweb/sayHello?name=zs),另外,在8 o2 L! Q1 Q( V/ \, z
请求数据包当中,还会包含浏览器自动生成1 ]4 ?% c, b0 P: m# o
的一些信息。
3 _1 ?: R$ g3 Z) t$ L1 Y0 W 3)服务器创建两个对象:请求对象和响应对象。# V2 x1 Q6 N* i$ C
服务器解析请求数据包,将解析之后的数据
! b0 |+ P% P( E 存放到请求对象里面,方便servlet读取请求* { U4 b* G+ W$ n' H7 W
数据(因为servlet不用解析请求数据包,如果
/ E+ z9 D0 V- x; W 要解析,需要理解http协议)。/ d' L$ c7 Q( b2 I; D* C3 w" [
请求对象是HttpServletRequest接口的一个实现。
5 K9 C7 P* \# @ 响应对象是HttpServletResponse接口的一个实现。
+ I. P- F- B; C3 m+ f4 L 响应对象由于存放servlet处理的结果。
' T3 @% V# }1 N7 t g 4)依据请求资源路径找到相应的servlet配置,
( ^; a2 z, g/ {, z3 E/ M, v9 E- ?, _ 通过反射创建servlet实例。然后调用其; b8 u2 H% x$ w2 E4 e
service()方法。在调用service()方法时,
5 G: K* L' h/ }, J 会将事先创建好的请求对象(request)和, A& Z+ g" w6 h: B. c
响应对象(response)作为参数进行传递。5 E/ z; T+ U* p, b
在servlet内部,可以通过request获得请求5 E# J7 x1 F2 V+ O5 o/ A
数据,或者通过response设置响应数据。1 H) e: g9 {- c. C. Z/ v
5)服务器从response中获取数据,按照
6 \" O1 l" } c* J0 {. d2 x) w% e/ ? h http协议打成一个数据包(响应数据包),
# o/ J0 f- Z2 G1 ?/ d9 h5 r 发送给浏览器。
" T) S! P5 b; S/ v* g 6)浏览器会解析响应数据包,取出相应的数据,4 j. S/ i# ?5 q0 Z5 i
生成相应的界面。
4 B! A8 H3 ]! Z. o+ [
# v7 s$ l: S* M 5、使用ide(myeclipse)开发servlet1 c' H) W) J u! l" p w
1)配置myeclipse5 L/ x6 l* o7 ~# ]6 ?
myeclipse管理tomcat。' {% i z6 r6 Y9 n1 i2 B3 b# |
2)建一个web工程: a5 r4 {4 W0 I7 p. X% a
0 h5 k6 J& j# s 练习:" C6 _) T& Q5 z$ c* T& i" I2 n/ _
新建一个web工程 "web01_exec"8 f' O3 H! M$ U: t7 f9 @4 R' ` E
在工程底下,创建一个DateServlet。. K0 h" p4 @2 B8 p! R
可以访问该servlet,输出当前系统(
3 ?: Y r0 }* V# X6 q tomcat服务器所在的机器)时间。7 Z! O$ v& f& D
比如:
* ~+ s& T# L3 ?- V5 b http://localhost:8080/web01_exec/date0 I% X/ O0 T' {; C
在浏览器端,显示+ v8 w% W1 t0 k8 w- Y$ d+ x
now:2011-11-21
( H6 k; _5 g! ?: c1 l7 R要注意的问题:
( U% N, n0 d( R6 I+ R 1、要实现Servlet接口或者继承HttpServlet.3 t6 c* {9 W; [7 t2 I' i# m
2、service()方法名称、参数、异常类型# l4 B, X5 M, b! t
要写对!
- R' T4 y$ Y0 k. v. X4 { 3、web.xml配置文件中,类名不要写错!
) a$ w1 _, Q5 `6 j8 g servlet-name不要写错。
3 h/ U* { h2 [; c7 l- s- ~3 \/ ^ 4、在浏览器输入访问地址时,地址不要, P0 y/ b/ A) N, Y6 M7 k& r6 l
写错。应该按照
2 z" o3 F! n1 B) d3 F5 _9 c http://ip:port/appname/servlet的url-pattern
* a/ m5 A, x2 t" W9 G7 p' } 去访问。
' Y6 z4 o8 U/ d 5、记得先部署,记得服务器必须已经运行了,3 g1 Y. {* ?3 d. @( ?, U* b0 Q
不然不能访问。" Y: G, [3 @ _5 }+ R
6、如果报500错误,一般是你的程序写错了,
: ?) K2 j: D1 F0 d' l/ T4 f 如果报404错误,访问地址有错。如果是405,
3 b7 U3 R- Y# ~) w 请检查你的service方法名,包括方法参数等。! }$ Z$ O; v1 p6 i
_. ^5 e/ k$ A& h1 I6 m 练习,写一个BMIServlet,计算一个人的+ w( g1 O& b) R4 x8 a: d: m
bmi指数。; B: q# }' c2 O' E
体质指数(BMI)=体重(kg)/身高(m)/ 身高(m)
: C$ P' O' i0 O/ e$ y {& | 例如:70kg/1.75/1.75=22.86
% L! ^$ f$ ]9 N! T 成人的BMI数值
1 q/ v7 m; g* _: M6 X9 | 体重指数, 男性, 女性 结论
" Z I2 G( [3 V" F7 F) H5 Y 低于20, 低于19 过轻 ! e; ~, M$ g8 U; b& J$ Z' C }3 H
20-25, 19-24 适中* _/ ?( `$ T& v6 Q9 l: X
25-30, 24-29 过重/ ^1 U% S6 N" ?
30-35, 29-34 肥胖
5 [0 A. p* a$ i1 k% z 高于35, 高于34 非常肥胖; T6 D6 z2 z- K& ~! {
专家指出最理想的体重指数是22 " }; A' }% o# n7 {+ A
3 |% f% N j0 N0 H# D8 m5 B) O http://ip:port/web01_exec/bmi?height=1.7&
5 j- f S/ M: m( ] weigth=70&gendar=m$ x: I' Z. V3 \5 j) Z) ?' U
. e2 d2 z A( G' a; N |
|