|
该用户从未签到
|
一、servlet基础/ } S9 {; I# u! |# U' ]
1、什么是servlet?5 x- q+ t1 g n5 c4 ~' `) M
sun公司制订的一种用于扩展web服务器功能的
8 o% S+ G" Y1 E! U$ \4 ~ 组件规范。) u$ ^# T" G) B1 Z2 u* [. ?) ^
1)扩展web服务器功能:& r, ?* ?% Y8 z% ?5 Y9 X
早期的web服务器只能够处理静态资源的请
0 g! v: |: c; z 求,即事先要将html文件写好,存放在服务器
, i: v# e" f! Q7 x' L& R 上,不能够生成动态的html(也就是,通过7 `# R/ T/ j& ^4 \5 B
计算,生成一个新的html)。
+ ]1 f" F$ J- _0 D2 b7 a' B* a" H3 | 所谓扩展,即让web服务器能够生成* A; ]8 Q. Z8 L+ N7 t6 C( x
动态页面。
( ^) N8 S& H1 n# b 扩展的方式,早期是采用CGI(common4 m+ l) ^- f5 L3 s. Z
gateway interface)技术。$ H: U7 U$ H5 ]9 Z1 w* i0 U0 J
因为采用cgi程序编写的代码,可移植性. @% p; R2 C! i8 Y$ @
差、编程相当复杂、如果处理不当,会严重
1 n T+ C1 X% T3 { 影响性能。所以,用得越来越少了。& }7 X9 b+ W. e. p% u% L+ P
现在,采用的是容器+组件的方式来扩展。
' A( u* L7 Y( j ^, D8 R 2)容器与组件. n1 {' n8 Q8 H$ |% [/ D
组件是什么?; O& o" X/ A1 n1 Z
符合规范,实现特定功能,并且可以部署
; Q# N" o( E8 A' J 在容器上的软件模块。
, a1 o1 n3 v$ _8 ~& ^5 `$ T2 | 容器是什么?
' I: q4 N- E! _. |8 e 符合规范,为组件提供运行环境,并且. F3 S4 H4 ~0 N6 w
管理组件的生命周期(将组件实例化,调用 z+ ?4 q! A1 f
其方法、销毁组件的过程)的软件程序。 L- U1 @: J; t' k1 ?5 Q5 ^
采用容器与组件这种编程模型的优势:: ]5 {( D+ `2 V1 [
容器负责大量的基础服务(包括浏览器与: A6 X4 \2 P& R. i4 S, @
服务器之间的网络通讯、多线程、参数传递
* b& c% |/ c& i& J; V 等等)。而组件只需要处理业务逻辑。另外,
# @& _! V4 f% \/ w6 z+ j: W 组件的运行不依赖于特定的容器。8 u' J- ^4 R* ?! L
2、如何写一个servlet?
6 t6 P, S5 R: R1 M4 ]& N 1)写一个java类(servlet只能使用java语言
9 m5 o2 D9 X* \, M/ p: W 来编写) ,实现Servlet接口或者继承HttpServlet
) M9 k! l: ~; t. F) ` 抽象类。
+ }4 P' [+ f" [5 P5 [7 D( N4 } 2)编译* d; S. [, ]8 V$ h* v
3)打包
% B7 v% J' f0 w: U- X" E ^ 建立一个如下的目录结构
" ]( M' H7 S+ r6 ]3 W7 | appname. g% t' i: h9 { S# G7 T
WEB-INF
. a. @/ c8 o" k3 o, _/ }, _, m. A classes(存放.class文件)
! b4 m- l; b! c lib(存放.jar文件,该文件夹可选)
, d. f2 n+ O9 w. f# g. ] web.xml(部署描述文件)
: T8 h5 t$ U# v4 G+ f' [3 G 该目录结构可以使用jar命令打成一个3 e* `) I' e( t9 O
.war为后缀的文件。3 o2 P% o0 }& M3 h1 a( q/ V
4)部署
7 k! ^4 P& k1 x5 z/ B7 ^ 将第三步的整个目录结构或者是对应的
! s6 L) q% G8 l; c8 H& M& d; x* X .war文件拷贝到服务器特定的目录。& s& P3 c' X- C4 F# Z: f
5)启动服务器,访问servlet
. f/ a0 e3 @$ s1 H3 g+ B$ ~ http://ip:port/appname/servlet的url-pattern配置/ P- j& G) e0 w# ~0 M! l" U
8 Y' D% x9 C' P/ F: W
3、tomcat的安装与简单的使用
' j& }. q+ ~6 `! C5 @9 I5 |' }0 X* U 安装:+ d# G6 L1 k' N
step1 将tomcat解压到/home/soft01下。
* L/ y1 l F: p. r/ s2 _0 K2 Y step2 配置环境变量
* t" q& x! M9 K& u O2 \( K cd /home/soft01' ~6 \) s; o. I
vi .bash_profile$ l/ u- S) x+ @ I) o$ |
JAVA_HOME:jdk的主目录: z6 G+ S" I+ w6 p) {+ j. V$ r
CATALINA_HOME:tomcat的主目录
; ~4 a1 a6 B4 Q1 z- k+ U" P PATH:CATALINA_HOME/bin/ L. j+ K, Q- Y: ~8 U4 s& A; S
step3 启动tomcat9 ^2 I5 q4 {9 Z4 }9 P3 n- `4 |
cd /home/soft01# z7 C5 {4 r1 u6 `/ X; W
cd /tomcat主目录/bin/ O! z9 G. f+ k2 ?, c+ f! X
sh startup.sh$ P& |& \! ?! L, w
接下来,在浏览器地址栏输入:
9 G S. \7 O+ f" b8 P$ a0 X http://localhost:8080
# E2 S v* R' \1 s* X6 p- g! N 关闭tomcat' k# E* }7 @! `+ f3 t& m9 A
sh shutdown.sh) y0 u1 y2 V& u
目录结构(了解):. l1 B$ p8 P( [
bin:启动和关闭服务器的一些脚本。
% W( F2 O" `7 O; c common:共享(部署在该服务器上的
5 ^& p) m9 Z% F1 d" t8 r 所有程序都可以使用)的一些jar包。
: O. z6 f7 Q7 t$ R7 \9 D4 y conf:服务器的一些配置文件。
; U: P v8 j6 z4 b% M$ K* d# N webapps:部署目录0 c; u9 Y, q& f, N/ e! v9 v
work:服务器运行时,生成的一些临时文件。: y& ^* k) n7 J- b4 Z& G
* h8 K' C% t) h
4、servlet是如何运行的
3 r) p7 Z( @+ |% X8 V6 v, V 比如,向浏览器地址栏输入
# C9 Y9 s. h* V7 g6 } http://ip:port/helloweb/sayHello?name=zs
/ q# u" @! ?1 x" M5 y& W 1)浏览器使用ip,port连接服务器。
% E$ m# X' U9 G' V8 R, |! \) Q 2)浏览器将请求数据按照http协议打成一个' U4 I9 C7 C" a) U |* F3 R
数据包(请求数据包)发送给服务器。请求数据3 h- ^* X. Y8 l
包的内容包含了请求资源路径9 s2 C7 }, s- A. @. _
(/helloweb/sayHello?name=zs),另外,在
4 g$ ^! R2 w! p2 |" |, C+ j. y7 u2 j- a 请求数据包当中,还会包含浏览器自动生成
- f& w' c9 P# ]$ u1 z 的一些信息。) X4 e# }- a7 O# O! B% K
3)服务器创建两个对象:请求对象和响应对象。
: j) M6 s. X. b! _ T2 T 服务器解析请求数据包,将解析之后的数据
) @, b U7 a: K/ B/ K 存放到请求对象里面,方便servlet读取请求
9 _0 t; C. g, D# Q1 W$ d( _ 数据(因为servlet不用解析请求数据包,如果. S, {6 R% E! {: Y# ^# {
要解析,需要理解http协议)。 j4 t4 _$ x$ E
请求对象是HttpServletRequest接口的一个实现。! {+ H, f! }4 F3 J, }- B2 F5 T! E) q
响应对象是HttpServletResponse接口的一个实现。
6 E" H1 f4 F5 L6 [, | 响应对象由于存放servlet处理的结果。0 h: O6 m# b' x# t! i' F$ w
4)依据请求资源路径找到相应的servlet配置,
1 w- r, l$ }! m 通过反射创建servlet实例。然后调用其
( O6 j6 k5 h/ q/ ?8 W" _ r5 l service()方法。在调用service()方法时,
7 \2 m) U s2 A6 ?6 _# ?! e0 c 会将事先创建好的请求对象(request)和* g8 P8 H! N+ d4 N( a3 Z
响应对象(response)作为参数进行传递。0 |7 b- `& t1 q: X- F( X
在servlet内部,可以通过request获得请求3 z! m0 P6 o, ?" U5 J R8 r
数据,或者通过response设置响应数据。
! I$ F0 J8 D, {1 k! u7 k% Z8 x 5)服务器从response中获取数据,按照: z) Z' B* H' u; M! B
http协议打成一个数据包(响应数据包),& o) u( T6 i7 i4 Z( O
发送给浏览器。! o; r4 W- ?! V& S" {% _& A% o7 u" F* k/ F
6)浏览器会解析响应数据包,取出相应的数据,) w6 K; s8 e) T; j3 x
生成相应的界面。
* N' { o4 P3 N/ m8 h
2 A! V3 x; H4 Y/ R. ]6 n 5、使用ide(myeclipse)开发servlet& U( ~' z% W, z+ A/ Z$ ]4 V
1)配置myeclipse
. K: [9 X$ O& M$ `7 i$ p( q myeclipse管理tomcat。
3 @' x, w" `" A: E3 Y 2)建一个web工程
, R) W; ], G8 {7 n3 D
3 \3 @7 v4 D: B6 |3 {% v$ D7 ~ 练习:* o! u3 E! K/ t2 M- s3 B
新建一个web工程 "web01_exec"9 D( A' ]0 {3 c
在工程底下,创建一个DateServlet。: _3 W/ ?9 s1 _0 P8 o1 X0 h* G3 [
可以访问该servlet,输出当前系统(9 D8 _$ c, U" D: s5 d
tomcat服务器所在的机器)时间。2 N" d- \: h, I
比如:
7 ` [/ i8 g8 r: m0 _ http://localhost:8080/web01_exec/date
: _( `# F0 D+ Z! k 在浏览器端,显示
% p% z' o& _4 ` now:2011-11-215 X, m! c, a! a+ {4 |
要注意的问题:
: f1 D! ^! @+ Z6 n! d9 I: _ 1、要实现Servlet接口或者继承HttpServlet.
& r a, v/ b& L5 q+ i; ], h) S# N 2、service()方法名称、参数、异常类型9 t3 w, |1 W6 }1 O; f$ ?8 T
要写对!
l; j# t" B$ o4 ^7 \' c 3、web.xml配置文件中,类名不要写错!
1 ~' h8 @6 c# `8 C8 m servlet-name不要写错。
% T$ l+ S i. u4 N 4、在浏览器输入访问地址时,地址不要7 t! e5 h9 x+ E0 w9 U+ n8 b
写错。应该按照
: x$ c$ O% C. o8 N8 C: ]4 V http://ip:port/appname/servlet的url-pattern
# d3 _8 N' M, [( X7 n4 f0 q 去访问。
: ]) {% g G$ D( l6 S( F6 a- _ 5、记得先部署,记得服务器必须已经运行了,
0 r& b, |! A2 a" J1 N9 d 不然不能访问。( T# S8 I$ t6 @
6、如果报500错误,一般是你的程序写错了,% {5 u3 ], A/ }' S
如果报404错误,访问地址有错。如果是405,
. a' y# `# y r3 | 请检查你的service方法名,包括方法参数等。
' ]1 h5 r- q6 W 5 C; w! |; d( L( C( J
练习,写一个BMIServlet,计算一个人的
: C* L0 A" o- K+ f bmi指数。
8 w0 u0 y2 O+ Z3 _/ `& l s 体质指数(BMI)=体重(kg)/身高(m)/ 身高(m)
6 Q& T# i& Q5 } p6 u) { 例如:70kg/1.75/1.75=22.86
6 B" `9 A/ U# n; W 成人的BMI数值
! w- k6 Q% K0 l2 j0 H1 i/ _ 体重指数, 男性, 女性 结论 ; w7 r# ]5 `7 c8 T( P
低于20, 低于19 过轻
" F( l* b5 w- d9 ?& n& W 20-25, 19-24 适中/ L5 m) s( V* X9 L1 i' M+ w
25-30, 24-29 过重
4 `5 S7 F) a [7 H& p- m. | 30-35, 29-34 肥胖
: i# p* p4 j5 n0 S 高于35, 高于34 非常肥胖
# @& a9 y7 b7 I8 x2 R+ f 专家指出最理想的体重指数是22 - x4 F& r$ [4 ~' s/ z: ^* X1 v- q
+ H t/ d$ }- D5 W' E
http://ip:port/web01_exec/bmi?height=1.7&
5 ~3 b! D5 s1 C weigth=70&gendar=m
4 X+ V9 P7 e/ _/ x
$ Y! m# |0 o$ e$ g3 A9 K! ~1 U: Z |
|