该用户从未签到
|
一、servlet基础
: h1 G! I6 F$ I8 s/ s- M! E; T. h 1、什么是servlet?
! s7 l- W6 ]- g1 {% H+ b/ Z sun公司制订的一种用于扩展web服务器功能的
" E0 F+ N) }" }: {3 Q1 Z 组件规范。4 C' H0 _( g" o8 ~$ d0 |
1)扩展web服务器功能:% t ~0 g# C& [+ T5 P. p0 N( m
早期的web服务器只能够处理静态资源的请: }% v, c2 g b: P' E
求,即事先要将html文件写好,存放在服务器1 X' ]+ y& K- X; z
上,不能够生成动态的html(也就是,通过
2 o. g! P2 }1 _! P 计算,生成一个新的html)。
3 v# K" e* D/ P* X 所谓扩展,即让web服务器能够生成
7 x% g/ P! M1 R2 ] 动态页面。( L {4 {+ b/ A& x
扩展的方式,早期是采用CGI(common$ y8 T2 P7 g* W7 y7 c5 g
gateway interface)技术。
* O3 S/ r: d4 r0 N: p 因为采用cgi程序编写的代码,可移植性: a& h# i+ `7 U& q! p
差、编程相当复杂、如果处理不当,会严重
% {* F7 X# i5 L# ] 影响性能。所以,用得越来越少了。, G- l9 @$ ]$ C. ^
现在,采用的是容器+组件的方式来扩展。" g; f) r1 v: g. Z, _
2)容器与组件5 @5 d/ O W5 H2 }3 y
组件是什么?1 E; }: D) j7 z: J$ C% f( p7 N
符合规范,实现特定功能,并且可以部署5 H4 M$ {1 O0 d( H4 p
在容器上的软件模块。
5 U0 v8 M9 \; c# b; ^, I8 h6 D. |% x2 t/ o 容器是什么?' k1 D4 V) Y0 }5 W% H+ ]
符合规范,为组件提供运行环境,并且# s1 k) H6 d" r6 t( g/ t3 T
管理组件的生命周期(将组件实例化,调用
8 M1 B! d; E/ e v+ x% y) l9 i, h 其方法、销毁组件的过程)的软件程序。" |+ P, ?- V7 M
采用容器与组件这种编程模型的优势:, o9 T* @, }/ n9 `
容器负责大量的基础服务(包括浏览器与
1 y N/ h5 K0 _7 Y8 t 服务器之间的网络通讯、多线程、参数传递
0 h) ~' @8 h1 X9 [* \5 r r 等等)。而组件只需要处理业务逻辑。另外,/ T2 U% m! U6 j4 o. L& A) \7 q- l
组件的运行不依赖于特定的容器。
7 h W" X0 D- m 2、如何写一个servlet?. [' _: k" F- N* m+ I
1)写一个java类(servlet只能使用java语言
: k3 d. K8 T/ v6 e4 E* z' d2 i B 来编写) ,实现Servlet接口或者继承HttpServlet
# g; r- `1 P' ~7 i/ v 抽象类。* w4 B" \2 r5 q# V* @$ O
2)编译" k( ^! R2 @' l9 f
3)打包$ l& S: G2 T1 X, A/ J8 g: f5 @2 l
建立一个如下的目录结构
4 V9 B, J9 m& m. Y! h4 D6 r2 @8 l appname
" X2 r6 |. t3 r WEB-INF
$ k3 D1 D# @7 C! W3 b0 ~ classes(存放.class文件)
. y7 A, `/ F, e' `- g( T lib(存放.jar文件,该文件夹可选)5 Q3 p' s4 e8 Q
web.xml(部署描述文件)
% A5 O: }, `! z8 T0 w 该目录结构可以使用jar命令打成一个
* V9 l6 b- h2 m, \ .war为后缀的文件。8 t% F- w& R, ]1 m# M- V; h
4)部署
. ^, l+ l5 N5 v 将第三步的整个目录结构或者是对应的. S( X5 E# @2 @+ }8 r* \
.war文件拷贝到服务器特定的目录。, v* V) O# s# y" k) @' n3 {1 R
5)启动服务器,访问servlet# ]' `7 r" s0 x; p
http://ip:port/appname/servlet的url-pattern配置
0 K' Q A* ~8 m
+ ]+ Q; N1 G4 U# d9 R) Y 3、tomcat的安装与简单的使用
: |! w* w. r) c* b3 E) | 安装:. |) j6 P! ]6 [) \" x2 K N
step1 将tomcat解压到/home/soft01下。5 a, f* ?9 m6 R" Q0 ]
step2 配置环境变量
% z, a6 m3 a5 {, [" E0 o% ` cd /home/soft01 H% m* c3 E* o+ _% D8 g, q
vi .bash_profile0 K" Q3 ~) ]+ p
JAVA_HOME:jdk的主目录
) p1 F8 @7 q$ M+ |4 u" H& a7 F CATALINA_HOME:tomcat的主目录6 |, _6 W6 E$ a& T
PATH:CATALINA_HOME/bin
' c& T& Y/ m- I% g7 d1 s. D step3 启动tomcat
/ V; o. \; x9 x- }( U cd /home/soft01% r: ^ x8 }" I9 e) [
cd /tomcat主目录/bin
0 K* J3 V/ T' Y sh startup.sh1 J( I+ G/ U G( `, @8 N9 ]4 i Q
接下来,在浏览器地址栏输入: b' l& @2 k! J) @+ i" p
http://localhost:8080
9 @# V+ l4 t& j1 ]6 S8 v# \3 S 关闭tomcat
6 Y! M9 i7 f* O" w; U. Y sh shutdown.sh
8 n, Z( t' M9 o7 o& _ 目录结构(了解):, r+ K3 d: F0 Y1 a7 i
bin:启动和关闭服务器的一些脚本。
0 w4 j$ F; W6 R0 f* D common:共享(部署在该服务器上的
% ]% Q+ @8 ]( {1 O 所有程序都可以使用)的一些jar包。5 O7 V8 V1 S0 r2 ]
conf:服务器的一些配置文件。/ ?8 q- Z f* O; m/ N% |
webapps:部署目录
; n( p$ u; C' X: U work:服务器运行时,生成的一些临时文件。
; u7 ^7 ]3 a7 q/ K
- R, Z( k9 ]9 H6 E9 P a6 q 4、servlet是如何运行的7 \. z3 Y3 t/ |; K, N. {2 r
比如,向浏览器地址栏输入
, p& n8 M. u, A/ [ http://ip:port/helloweb/sayHello?name=zs
+ @( Q/ A# S! u4 \# a: |! [ 1)浏览器使用ip,port连接服务器。
+ t* U T' L0 d' e9 Y2 i 2)浏览器将请求数据按照http协议打成一个! }& \* @) s1 `2 v% q7 i
数据包(请求数据包)发送给服务器。请求数据
) ^3 Z+ t' w9 l" d; v4 I 包的内容包含了请求资源路径. q5 ~- ~& B, y: y( q
(/helloweb/sayHello?name=zs),另外,在" ]9 N5 l* Z5 E7 ]8 `5 f& z4 M1 d
请求数据包当中,还会包含浏览器自动生成
) p1 C3 E; U/ n3 r* a& T 的一些信息。- s. b4 x+ J b! ^
3)服务器创建两个对象:请求对象和响应对象。
$ f- I/ {( |5 U 服务器解析请求数据包,将解析之后的数据
7 C% r; E# C, f/ i* T) I 存放到请求对象里面,方便servlet读取请求$ F/ v, X( g& X6 W+ w
数据(因为servlet不用解析请求数据包,如果- W3 P6 B; ?% B& K$ d, E i
要解析,需要理解http协议)。: Y4 w R: K. L7 u2 J' d# O
请求对象是HttpServletRequest接口的一个实现。9 e9 a& ?6 r; O; I& A5 ?
响应对象是HttpServletResponse接口的一个实现。1 y( s; y" ?3 C* x! a6 W$ V
响应对象由于存放servlet处理的结果。. t1 V: p" `3 }( |$ ~
4)依据请求资源路径找到相应的servlet配置,4 C9 V+ k9 T5 t4 [ t
通过反射创建servlet实例。然后调用其8 m) E: W1 H: y1 C0 q8 C4 h
service()方法。在调用service()方法时,( t" e2 N& E9 \4 |6 a4 t
会将事先创建好的请求对象(request)和0 Q+ f6 W& n# T2 o& w. Y
响应对象(response)作为参数进行传递。
9 C9 Y0 [2 h! l 在servlet内部,可以通过request获得请求
8 o, z0 h* l& w" `! a4 z- {) f 数据,或者通过response设置响应数据。% G; O7 Q* D7 N
5)服务器从response中获取数据,按照9 [1 u- L4 n) }0 U# P+ Z
http协议打成一个数据包(响应数据包),7 D% j% K2 a0 V4 p
发送给浏览器。
$ w6 ~$ \, P( t% R8 W3 U( J6 `, k0 _ 6)浏览器会解析响应数据包,取出相应的数据, `, M& W f$ x! ~) V( A. M; g! Y
生成相应的界面。8 m( J+ {# `3 T: D3 s
; E0 X0 S% t# }( ` 5、使用ide(myeclipse)开发servlet
" X$ R: [6 D8 d+ u 1)配置myeclipse1 c: G) E4 X5 ?" q; f. M) O T; F
myeclipse管理tomcat。4 b' P$ r }6 Q$ \% L, d e
2)建一个web工程
/ Z+ W1 G! {9 R/ J* E. r" F: C
3 u) n* F5 k8 m' k1 J6 ]8 U( H 练习:
; p7 L, v8 x# d, v" X 新建一个web工程 "web01_exec"
' `4 T+ B0 y& \$ N5 j 在工程底下,创建一个DateServlet。* b2 l/ {8 |4 o' J o+ q' l
可以访问该servlet,输出当前系统(# [. h& j- t* A
tomcat服务器所在的机器)时间。
; [, g m; O9 a9 B# o9 m 比如:3 W" k# n& u$ J, s4 ?4 I% V
http://localhost:8080/web01_exec/date
1 S: P; _1 ^9 M+ R+ {( D 在浏览器端,显示( j; P; U2 T7 w
now:2011-11-21
4 G8 A4 A0 f/ R6 H/ R: H# a要注意的问题:) `& [5 d% @8 j S/ z. D2 T! S- d
1、要实现Servlet接口或者继承HttpServlet.
0 s5 ^7 L! {& @3 E0 P+ {2 r1 ` 2、service()方法名称、参数、异常类型0 U P1 P- |; ~: J/ [6 Z- x
要写对!
8 W2 v$ ]% P/ L" h6 ^7 h5 @ 3、web.xml配置文件中,类名不要写错!+ X- W: _" g5 J1 j
servlet-name不要写错。
B' S5 c# W/ v2 _; I7 E 4、在浏览器输入访问地址时,地址不要9 D; G. ]% U& b- n3 j
写错。应该按照
" w; r) G' U5 R% l+ _ http://ip:port/appname/servlet的url-pattern# i. V* O0 N/ I+ C4 J$ p- i
去访问。
/ P0 a* \; j; r/ Z8 O4 C) ] 5、记得先部署,记得服务器必须已经运行了,' m6 x3 q4 m5 h5 l$ h( b5 l1 w
不然不能访问。
) ^( u/ M) U: X( J4 Q! r6 | 6、如果报500错误,一般是你的程序写错了,
0 L2 w# S. R+ B* C: |! a 如果报404错误,访问地址有错。如果是405,4 g0 R* V; A# |/ s) q" F3 O) X) V
请检查你的service方法名,包括方法参数等。/ l* w- [( U3 |' Q# ?# t* Q6 O
! q# D* r) |; L! T+ Q4 q 练习,写一个BMIServlet,计算一个人的6 j6 V! g: f+ N- F4 d5 E
bmi指数。
8 r5 n h" V1 b' n8 O& D 体质指数(BMI)=体重(kg)/身高(m)/ 身高(m) 3 r! b) U8 m( y0 M
例如:70kg/1.75/1.75=22.86
/ I5 J1 g7 R5 t L& V 成人的BMI数值
5 x/ y0 T) P" r6 ] 体重指数, 男性, 女性 结论 ' ~% t$ u4 m' x6 Y: F, W) [
低于20, 低于19 过轻 8 r4 |# N$ I! q
20-25, 19-24 适中6 W# b, ]* W. t* P- Q$ E
25-30, 24-29 过重" O/ h8 Q+ k4 b
30-35, 29-34 肥胖& Z: N2 r6 U- M& o
高于35, 高于34 非常肥胖
) F! [4 t3 i+ m* Y: Q+ T2 Q 专家指出最理想的体重指数是22
* ^( j' d1 G5 c4 h$ G0 C( \
: Y7 T; u0 I& J# K p http://ip:port/web01_exec/bmi?height=1.7&1 A& {+ P" {- i. O% }0 ^% T6 |
weigth=70&gendar=m& R$ [/ O1 `1 p9 K6 k! x' Z
q% d% F8 Q1 A8 x |
|