|
该用户从未签到
|
一、servlet基础
3 W, q) m& E }$ g/ R 1、什么是servlet?9 C$ V8 i& M2 ~+ A: `/ c+ u
sun公司制订的一种用于扩展web服务器功能的3 p: F! Z9 o8 S0 B
组件规范。
2 c0 G& K+ Q% v- @* z0 c 1)扩展web服务器功能:
% n7 ]- k F' P 早期的web服务器只能够处理静态资源的请% M/ {9 I: d4 e4 A
求,即事先要将html文件写好,存放在服务器
' Q# D) S" J9 H8 m( o+ \$ c 上,不能够生成动态的html(也就是,通过
% D1 L: c$ _9 x$ u 计算,生成一个新的html)。
# [3 G( {. k8 P) y 所谓扩展,即让web服务器能够生成# p8 _# G2 a1 A
动态页面。
- A& D3 }6 s: A, D+ L# O 扩展的方式,早期是采用CGI(common
' x8 I1 B, v! U8 l9 I8 A gateway interface)技术。
+ v" s" u' v4 L" [9 M 因为采用cgi程序编写的代码,可移植性
( q% E" i7 |; Q# E. X 差、编程相当复杂、如果处理不当,会严重1 O2 ?8 R, ]" W2 d
影响性能。所以,用得越来越少了。
, L% o; H# x7 K/ Z1 _ 现在,采用的是容器+组件的方式来扩展。
1 v. w! l; ^9 R. G& n) h 2)容器与组件2 y: f3 T5 V! x' P$ g" _# x8 P
组件是什么?
' m8 S; R1 V8 G6 E 符合规范,实现特定功能,并且可以部署
3 l/ g7 A/ f/ \ y2 }: B# d 在容器上的软件模块。
$ y* e2 K$ B3 e% x ?4 J/ |1 K 容器是什么?
3 n) Q/ @ ]# m" H3 Q 符合规范,为组件提供运行环境,并且2 D) [% o: T" z! R; f
管理组件的生命周期(将组件实例化,调用
4 h8 w. R6 k. J 其方法、销毁组件的过程)的软件程序。9 i4 J w6 t, h N, @
采用容器与组件这种编程模型的优势:1 }% ^! N9 l: D& l" i5 m. ^
容器负责大量的基础服务(包括浏览器与
, s1 }( k ]) i# B( N6 M 服务器之间的网络通讯、多线程、参数传递
8 G6 O8 U; Z3 R% B! d 等等)。而组件只需要处理业务逻辑。另外,7 U( D% v" _7 I, r' P
组件的运行不依赖于特定的容器。
# k3 {* j! u0 `7 [0 z2 i9 e 2、如何写一个servlet?
+ B1 `0 J+ k% N+ y. [% t 1)写一个java类(servlet只能使用java语言4 a6 V& W/ d: n
来编写) ,实现Servlet接口或者继承HttpServlet
* S1 i' S) b `4 ?" S% x) n 抽象类。+ Z2 g5 N2 T1 H0 A- Z9 t$ E9 U( C
2)编译
. ?4 D! r0 I, I+ c7 w$ U9 ^ 3)打包2 e0 D2 K! y5 i
建立一个如下的目录结构% l% @9 S. \# T7 E
appname
9 L) ]7 |9 s4 X5 V+ L! f WEB-INF% y& g! D# D: k& Y* J# z
classes(存放.class文件)9 \+ E1 I, m2 A- K' Y9 B
lib(存放.jar文件,该文件夹可选)
2 U( q/ w1 ?" ^: z- t3 o web.xml(部署描述文件)
+ Q$ k0 a( y- ? 该目录结构可以使用jar命令打成一个
* p' l0 ~0 \3 x .war为后缀的文件。" Y- Y4 M) f' F. U$ J
4)部署
) |) n2 Z, z/ i0 [" e 将第三步的整个目录结构或者是对应的* `. ^( m5 I* f" L6 h" r
.war文件拷贝到服务器特定的目录。
6 m1 ^2 x0 J1 k% T K! U+ M 5)启动服务器,访问servlet, T3 y+ K; r5 w: j# F/ `+ \
http://ip:port/appname/servlet的url-pattern配置# H; u s/ n: V5 f5 ]
# v( q5 e/ {$ ]- C- M5 [ 3、tomcat的安装与简单的使用, a) F8 V/ ~$ m- M$ G
安装:' B. u( g' G6 E% i
step1 将tomcat解压到/home/soft01下。. n- S5 \. D g, Y* a* p
step2 配置环境变量
. \& t, \& D& Z5 d0 w* |# M cd /home/soft01
- P- F$ M" D$ H4 m' F# q; V vi .bash_profile
# X" O- l, Q3 {- I) H' D, f JAVA_HOME:jdk的主目录
$ x# Q9 @" G. ` {8 H. G CATALINA_HOME:tomcat的主目录
, y" n0 _: ?6 @7 R9 { PATH:CATALINA_HOME/bin+ j1 _( _5 {, O- ?# R( n5 [* U
step3 启动tomcat9 m2 k! b# B& l. p% X) ?; T
cd /home/soft01
* C3 c) Q- m' u! m b cd /tomcat主目录/bin
# U+ G; l( n) Z; L sh startup.sh
+ g% O( W" l) T9 V# i 接下来,在浏览器地址栏输入:
8 a* ?, F9 F7 c5 f1 ] http://localhost:80803 Y `( Q3 ^1 K) [7 ]4 |) [. M" ~5 A
关闭tomcat- z* X+ j& X7 c' S0 E, R; Z$ w
sh shutdown.sh
& ]9 R- c d/ F' t( f 目录结构(了解):5 D, O6 d4 `$ e- s0 h2 a
bin:启动和关闭服务器的一些脚本。
4 h: r& u( Q9 ^/ D& T# M/ C# g$ v7 I common:共享(部署在该服务器上的) X9 r0 ?% P: u& Y! e7 _- h
所有程序都可以使用)的一些jar包。
1 i5 f' D* b7 Y5 Y$ P1 s conf:服务器的一些配置文件。
% |( L+ a5 H, Y9 ~& Q webapps:部署目录
$ N" W/ L: {* f* n ]+ _8 m work:服务器运行时,生成的一些临时文件。
5 {5 L; E+ K0 ^' x2 t) |& c0 D
/ F& Q. D2 R# p 4、servlet是如何运行的/ X, S. B U4 n% W1 z
比如,向浏览器地址栏输入3 o, J0 y- y9 S- d
http://ip:port/helloweb/sayHello?name=zs
0 {0 Z0 i/ `5 r- H, t 1)浏览器使用ip,port连接服务器。
# n6 b/ w% j6 Y. x) c 2)浏览器将请求数据按照http协议打成一个- n- b4 b: g6 O5 b z
数据包(请求数据包)发送给服务器。请求数据9 ~+ M; ~2 ~" n* | T
包的内容包含了请求资源路径
7 X4 G' T7 O+ r, Q (/helloweb/sayHello?name=zs),另外,在* A( v: [9 t( W2 i
请求数据包当中,还会包含浏览器自动生成" `( ^) x1 W( \$ E" b
的一些信息。
# m# `. H7 A1 _3 \; A1 l) ~ 3)服务器创建两个对象:请求对象和响应对象。0 @7 G. v" M% y6 [/ z7 B
服务器解析请求数据包,将解析之后的数据
* S* M* _" x: R- c4 |9 C4 ~1 l" m6 t 存放到请求对象里面,方便servlet读取请求$ D- t2 Z* W5 e+ N7 g& ~" U
数据(因为servlet不用解析请求数据包,如果! K$ p( P. L2 A
要解析,需要理解http协议)。
|6 T- Z* s# T# y" T 请求对象是HttpServletRequest接口的一个实现。$ n8 W5 ]4 G) P! n
响应对象是HttpServletResponse接口的一个实现。
8 `2 D1 I/ N' r 响应对象由于存放servlet处理的结果。0 e: y, |) k7 A
4)依据请求资源路径找到相应的servlet配置,
: p# d6 U: D4 M g U6 s @# N: P9 q 通过反射创建servlet实例。然后调用其$ \# g: H/ d4 d: M: L. @2 {
service()方法。在调用service()方法时,
- `) s. N' E" I" n& U7 l- L# P$ z 会将事先创建好的请求对象(request)和( D7 I! U; ?" e
响应对象(response)作为参数进行传递。3 m" S+ P+ L: c& } b8 v
在servlet内部,可以通过request获得请求. J* j3 U* _, _2 T
数据,或者通过response设置响应数据。7 }9 P9 _7 Y) L+ u* }- |
5)服务器从response中获取数据,按照
- d5 y' N% D- s# j7 L9 M; j( \ http协议打成一个数据包(响应数据包),' a# I4 a, S4 M q$ U
发送给浏览器。
9 E. W& R) [# }5 U- e+ `# U$ I 6)浏览器会解析响应数据包,取出相应的数据,
: @3 L- V7 G( s' A5 e8 E# n 生成相应的界面。
- z( ^0 k9 ~6 n7 m# t
Z! o. K) x0 ~1 B9 [ u 5、使用ide(myeclipse)开发servlet) S! o% f% \+ [
1)配置myeclipse
* O7 s6 R, E5 R+ y, Z# t myeclipse管理tomcat。+ t! l* x3 H$ d
2)建一个web工程
* o" f4 I4 k ]- l# n
L5 r' ^. p8 G) a 练习:
8 C% }8 ~6 w4 W7 s 新建一个web工程 "web01_exec"6 L! }6 i7 t( _
在工程底下,创建一个DateServlet。
1 n* M& ?( ^' t! X, g! E 可以访问该servlet,输出当前系统(
7 f8 h$ u! p, H tomcat服务器所在的机器)时间。& l# |" T3 e3 s$ ?% A
比如:
! T [2 U1 Y, S. |! x: e http://localhost:8080/web01_exec/date
+ x1 C) K6 r$ p! l0 S% q. D 在浏览器端,显示
& u }7 V# C" ]5 W4 J6 z& f now:2011-11-21& G) y3 M( I! `6 v* d$ O1 n
要注意的问题:
) I4 i. D& m+ z 1、要实现Servlet接口或者继承HttpServlet.
& v2 Z e u5 C9 _2 o( r 2、service()方法名称、参数、异常类型+ S, } D) I/ N4 U: n
要写对!2 Z" w, v6 ]2 T7 p9 \+ O+ k
3、web.xml配置文件中,类名不要写错!+ \ o+ D, t& c: |; L
servlet-name不要写错。
% |6 G, [# G* m9 W1 v 4、在浏览器输入访问地址时,地址不要
$ P" s2 m; H% \/ F4 l 写错。应该按照
& @* u/ J6 Z; s) K6 G- G http://ip:port/appname/servlet的url-pattern
/ D' |4 q1 {- e$ v9 V$ z# _ 去访问。. z" ?. S8 Z" N& r# O' [ h
5、记得先部署,记得服务器必须已经运行了,
* F9 r) i+ i; |3 s; b2 j$ R; n! a# T 不然不能访问。/ T& e- ?: F4 ?& y3 A& m; d2 j/ p
6、如果报500错误,一般是你的程序写错了,/ |; p1 A4 Y# u% V" ?
如果报404错误,访问地址有错。如果是405,: s! f, c: w6 ~) C: u
请检查你的service方法名,包括方法参数等。
" _* D* O$ S0 Q( u" R1 A% W/ G ; A' B% T" v- ]8 {0 n& i+ [2 `
练习,写一个BMIServlet,计算一个人的
8 O" p8 X+ w4 ]. g+ ~9 c0 e bmi指数。% f6 f. ]% k" s# y
体质指数(BMI)=体重(kg)/身高(m)/ 身高(m) ; j& L, [0 S9 P6 \
例如:70kg/1.75/1.75=22.869 @9 k: X0 I0 c6 ]* @4 _
成人的BMI数值
6 N4 ~$ X7 C. n" n: e 体重指数, 男性, 女性 结论 3 R# z7 t% F8 o8 {8 ~
低于20, 低于19 过轻 8 V- c7 O3 L, m% t. h+ W- \
20-25, 19-24 适中8 l" K! G. z6 {2 M4 g8 q6 i
25-30, 24-29 过重) _0 F% l; R, r5 H. h. S" P
30-35, 29-34 肥胖
$ c4 f/ v) J3 f3 S2 \2 k 高于35, 高于34 非常肥胖
* o0 Y' b3 _- X9 d; O 专家指出最理想的体重指数是22
% k. h) X# _, ~3 l' D/ w8 @5 t ) A" i" b7 d% h
http://ip:port/web01_exec/bmi?height=1.7&1 L" P, } w9 s. {1 o8 p
weigth=70&gendar=m
! t: G# k9 ]+ y: N
L9 ^: k$ y# P. W/ y |
|