该用户从未签到
|
一、servlet基础. z8 w7 r) ]5 [
1、什么是servlet?3 c2 j4 W; f2 B @- \, `
sun公司制订的一种用于扩展web服务器功能的$ D! r& c1 U: s/ O1 @9 s
组件规范。
% p. z5 g" M; K) b7 E 1)扩展web服务器功能:
3 O8 z& O, F( B& f. \ 早期的web服务器只能够处理静态资源的请
5 _7 O+ A# t+ Z/ E$ r7 Z 求,即事先要将html文件写好,存放在服务器
. ?, m% i$ A! `: M9 U6 @ 上,不能够生成动态的html(也就是,通过
# Q! g6 z) j4 J* r) V* J 计算,生成一个新的html)。$ M7 n/ X, H3 z# n7 H. q
所谓扩展,即让web服务器能够生成
9 K4 L& ^, H" R7 y' V7 t* D 动态页面。1 v1 i" m" l5 u$ ?: G3 x
扩展的方式,早期是采用CGI(common. U/ c; F) o& x
gateway interface)技术。
$ R" G& ?2 G. N( D* g( w 因为采用cgi程序编写的代码,可移植性6 e! _3 s7 f. |" F& p* O3 {
差、编程相当复杂、如果处理不当,会严重4 }! K7 g: [; u0 [
影响性能。所以,用得越来越少了。
; C8 f8 J1 K4 s+ v7 k 现在,采用的是容器+组件的方式来扩展。+ K9 |7 ~+ O- D% {$ V- o$ A* F, p
2)容器与组件
# n# B& z2 ~1 W% U& W 组件是什么?4 K. E( N, S G/ q
符合规范,实现特定功能,并且可以部署5 s7 V, {8 h7 W; g D
在容器上的软件模块。8 p& G. h" m7 r9 D& f, h
容器是什么?, w6 |* X2 E7 G+ V+ _( g$ ?
符合规范,为组件提供运行环境,并且
9 w3 Z8 {5 v: P3 o* C7 B 管理组件的生命周期(将组件实例化,调用
/ ~5 v$ C& w9 W8 U 其方法、销毁组件的过程)的软件程序。
- Z$ z2 a3 p: a# g 采用容器与组件这种编程模型的优势:
3 M) ~1 P* N7 x4 v+ n5 W; F 容器负责大量的基础服务(包括浏览器与4 R* @. M0 q$ Q/ s, U$ K
服务器之间的网络通讯、多线程、参数传递* h( L) Y8 z+ I9 R0 t
等等)。而组件只需要处理业务逻辑。另外,. r# W0 P) U! _" K
组件的运行不依赖于特定的容器。$ T3 H- m4 x) h1 M+ q/ W9 N; I9 p
2、如何写一个servlet?7 ]2 p+ c9 Z; Y: C7 L* w) V
1)写一个java类(servlet只能使用java语言
2 j% @) y @* b F# r7 \5 ^: G 来编写) ,实现Servlet接口或者继承HttpServlet ?5 G* b, U* o% {9 v. \
抽象类。
# P0 z0 J0 M2 X 2)编译
6 E0 f6 r. i, X2 H, D$ Q. V 3)打包, {! Y8 R2 r; F6 f5 z! q( P
建立一个如下的目录结构6 i9 U) C1 _* N5 @% z- S) r1 r
appname
0 O6 n V4 O2 P$ ?% O WEB-INF" i7 Y) Z/ ~8 V7 b# a
classes(存放.class文件)
$ t5 A/ o ?6 w% q1 [, k9 k7 O lib(存放.jar文件,该文件夹可选)* T6 n% s7 w4 V
web.xml(部署描述文件)
! \/ Z9 L& t" s+ M- T- { 该目录结构可以使用jar命令打成一个8 s, o( Z+ K" H( B' p8 L4 r
.war为后缀的文件。
' t0 j& G0 V [- J 4)部署: a4 ?2 K) e) i* j, g, _! k/ p
将第三步的整个目录结构或者是对应的1 t* W5 j: B# @0 Z7 u: B! {
.war文件拷贝到服务器特定的目录。
% ]9 h' y$ M5 q% t4 b V* K 5)启动服务器,访问servlet) A+ A$ ~& ^+ b# M5 j M7 Y. K
http://ip:port/appname/servlet的url-pattern配置' ^# L g. E3 o" G; i
$ ]* i C) {, i5 P 3、tomcat的安装与简单的使用
. N5 b1 X% \1 l. C4 p 安装:9 V) C; t- G+ C: ] q! G3 y% N
step1 将tomcat解压到/home/soft01下。
5 `, m8 j- K$ E% W4 r- ?4 @ step2 配置环境变量
( Q. I8 ]" k* Y P7 @, v/ f cd /home/soft01
5 F+ r4 G) w4 ]8 ?+ W" f vi .bash_profile8 N0 [1 W3 O% c0 M# j" C
JAVA_HOME:jdk的主目录8 u9 \* j" O4 Y, s& M
CATALINA_HOME:tomcat的主目录
- O2 q4 ~0 I8 ~, l/ _6 m1 I PATH:CATALINA_HOME/bin
, d3 O! p" J/ {: R step3 启动tomcat
: {! N/ \8 n7 f* V0 d cd /home/soft01) G5 g+ e0 Q" l T6 Z
cd /tomcat主目录/bin) X5 ?$ k0 v& A% S+ V2 @
sh startup.sh
, U. i7 I7 S2 f' v* f5 R 接下来,在浏览器地址栏输入:
' D& q7 ?/ X; | http://localhost:8080
' c5 w, R/ w+ i" L! t 关闭tomcat3 q' ]; q; c, W* H
sh shutdown.sh
% _) O: ? b+ W6 N# ] 目录结构(了解):0 y# S) L. p& s. Q3 l! g
bin:启动和关闭服务器的一些脚本。
% \; ?$ r) q, F$ D! A1 j common:共享(部署在该服务器上的
: q+ @' r% w1 N! P9 w 所有程序都可以使用)的一些jar包。5 T% `3 t8 u X. S, M
conf:服务器的一些配置文件。
) i i& y, X& V! N, [1 s webapps:部署目录( S, q9 s* A( x5 \8 T; w* D
work:服务器运行时,生成的一些临时文件。
6 t# n3 F) d v8 ^: d1 G- _ / R5 {! U7 [& o1 U
4、servlet是如何运行的
( J( c; o: s" u8 P3 m. X 比如,向浏览器地址栏输入
; P: g5 V( e4 F, v, ~" w) m* g http://ip:port/helloweb/sayHello?name=zs" [2 U a3 b" F. f+ V
1)浏览器使用ip,port连接服务器。
3 F, G% t, W3 W 2)浏览器将请求数据按照http协议打成一个4 Z: D: C, G/ ?& D
数据包(请求数据包)发送给服务器。请求数据) g; v- f- g, a" V; c
包的内容包含了请求资源路径4 W7 B% g+ K2 |- {/ x* b7 B
(/helloweb/sayHello?name=zs),另外,在
1 h: l1 Z. j0 L, T# `$ d 请求数据包当中,还会包含浏览器自动生成7 |: M3 H$ i6 L: a$ ]# G/ N
的一些信息。* p7 t' M4 |" n& M+ U# h
3)服务器创建两个对象:请求对象和响应对象。2 S' Y' |2 U& L2 _
服务器解析请求数据包,将解析之后的数据6 m/ @& c% N2 k# d6 B6 t c
存放到请求对象里面,方便servlet读取请求
4 u* S8 z4 X$ | 数据(因为servlet不用解析请求数据包,如果
/ Z3 N% D- S: y. w6 X1 L& Y2 @! b# @ 要解析,需要理解http协议)。
' y2 D; v( s# T+ a4 [/ M 请求对象是HttpServletRequest接口的一个实现。
1 l" I8 y5 y" g+ x* ~ 响应对象是HttpServletResponse接口的一个实现。# i& |3 }- {- ~
响应对象由于存放servlet处理的结果。
% V7 A. q9 ~8 O' l" O: t* i" z 4)依据请求资源路径找到相应的servlet配置,7 Q% T" o) n U# e
通过反射创建servlet实例。然后调用其- T1 T6 d# F4 \, C$ U4 _
service()方法。在调用service()方法时,& [3 C+ ~: W( ]8 I5 \
会将事先创建好的请求对象(request)和
/ S4 R' @! t5 `. O- i8 Z 响应对象(response)作为参数进行传递。
4 C5 I- W' {% e, Q2 d( e 在servlet内部,可以通过request获得请求' L {9 K' O4 B! c/ p
数据,或者通过response设置响应数据。
* q w& |* m+ h; e 5)服务器从response中获取数据,按照5 k# @4 ?' l$ W' ~; C" \( |5 V0 X" _
http协议打成一个数据包(响应数据包),
- M# H& W4 t( O* A* U9 n 发送给浏览器。8 }9 N) k$ x% V/ y- N
6)浏览器会解析响应数据包,取出相应的数据,+ N" p/ ?3 U1 V0 `" U/ G: h1 Y! U
生成相应的界面。+ _; W. |4 \' I
, O' q# O5 v4 _- f0 t$ V
5、使用ide(myeclipse)开发servlet- s% q! N5 l9 A- Y# z
1)配置myeclipse
/ W# @1 ^7 P( h+ U4 d4 ]7 X# s myeclipse管理tomcat。' N# G3 H0 Y0 M' z7 m- o
2)建一个web工程) x1 m3 b6 [/ P0 e) V [5 }* P! ?$ U
! N7 ~! v$ Q4 w Y. q" G- }0 [
练习:
, u' ?3 G }3 d8 e, K 新建一个web工程 "web01_exec"
v: S7 C) H$ T6 Q1 e2 T 在工程底下,创建一个DateServlet。
9 s# f$ c. P0 v* } 可以访问该servlet,输出当前系统(
- A1 p G2 l3 i+ A7 v tomcat服务器所在的机器)时间。
$ O: O7 K2 w: g- y' H 比如:
5 W0 k1 ^" f6 s& B- J4 Z6 Q http://localhost:8080/web01_exec/date
% M6 i$ m# N: U$ W: X5 P0 R 在浏览器端,显示
$ I# b2 y4 `2 P4 W now:2011-11-212 ^1 C! }; i& R# k
要注意的问题:
( ]6 x2 U; q% X 1、要实现Servlet接口或者继承HttpServlet., I5 N# w" A1 {: y
2、service()方法名称、参数、异常类型0 Y7 |3 @6 f+ ?1 c( y5 `
要写对!' d1 x. ?. j1 h+ T% R: T
3、web.xml配置文件中,类名不要写错!
+ \; z/ v/ F/ e8 Q servlet-name不要写错。
2 L- k- {1 g1 X: k" J 4、在浏览器输入访问地址时,地址不要2 z/ u0 }6 E, M; H
写错。应该按照9 u" Q* Q3 ~- `# T- F
http://ip:port/appname/servlet的url-pattern0 K d% |; n' L7 _% A
去访问。
+ g) \. A( f# t' `4 A' T+ q3 q 5、记得先部署,记得服务器必须已经运行了,
/ J6 P: K- E( s 不然不能访问。
& O: ^4 {, ^9 U% v A+ C 6、如果报500错误,一般是你的程序写错了,
4 o; F) S% l% Z! \0 m 如果报404错误,访问地址有错。如果是405,
$ Y: V7 T! Y0 {% n 请检查你的service方法名,包括方法参数等。
; p5 S7 T s7 E) }9 b 0 h" B* z! e8 K4 G& \
练习,写一个BMIServlet,计算一个人的
' r) M2 }6 E8 W% Q bmi指数。+ @, Y; c3 t E- p* S( n
体质指数(BMI)=体重(kg)/身高(m)/ 身高(m)
: F% @7 q6 l) S$ J( ~" {' r+ t 例如:70kg/1.75/1.75=22.86
# x/ R+ D' M- P- v" ? 成人的BMI数值
9 y! E0 D8 W# K: m6 M+ O2 Z' Q 体重指数, 男性, 女性 结论 ' y% B5 R3 A* \* ]4 Q
低于20, 低于19 过轻
) Z5 L. l- W9 e/ L8 d6 ^! _8 t4 c 20-25, 19-24 适中0 ]' w2 F9 g/ q3 Y2 O* ~& X
25-30, 24-29 过重
$ W& i0 `& Z: S, Y 30-35, 29-34 肥胖4 ]! @6 I' S# ]! v+ _3 I
高于35, 高于34 非常肥胖
( C I# p! P' q 专家指出最理想的体重指数是22 9 \' _8 i/ F3 i: _) A @$ g
* I6 ]1 t R* S4 d4 q9 m, {
http://ip:port/web01_exec/bmi?height=1.7&
' J# }+ m( G% f. `" J9 e weigth=70&gendar=m: G- \) y" h4 R2 X# A2 B# @& G
& G$ y1 e5 z) ~. L2 v1 c1 @ |
|