TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
一、servlet基础
& Z# J8 s# ~* H! j8 F" z7 V9 j; P- r 1、什么是servlet?
# S# Y* }3 W3 A2 N. x* x sun公司制订的一种用于扩展web服务器功能的9 C0 @& c: @% G! N! t# }3 z
组件规范。
# }' w% c5 P% ]- y a8 L1 q 1)扩展web服务器功能:
+ `' g; B/ M h 早期的web服务器只能够处理静态资源的请
( } m: p. c1 t% H% H' b2 W# }* v 求,即事先要将html文件写好,存放在服务器
- d& G. @- O# s- e7 @ 上,不能够生成动态的html(也就是,通过
9 I- J) o" ]- v& s' H 计算,生成一个新的html)。! z- W5 a1 Z: R3 a: o0 z6 }3 a p2 G
所谓扩展,即让web服务器能够生成
9 X8 Y. H. X" E4 e 动态页面。
4 l& B% w' k, O( k5 A; Q 扩展的方式,早期是采用CGI(common
- j# ?' \8 i. M3 j, @' {9 C gateway interface)技术。8 P1 D4 X5 Y- ], t4 V+ G4 V
因为采用cgi程序编写的代码,可移植性# b7 c9 Z, t" r3 k
差、编程相当复杂、如果处理不当,会严重% s1 }6 v `) A Z+ Y
影响性能。所以,用得越来越少了。
# l' i6 }$ i$ }/ b8 j: u4 y/ a 现在,采用的是容器+组件的方式来扩展。& f8 C7 @& r. ^0 I" q
2)容器与组件$ H0 r$ [) b5 P1 d6 @8 L
组件是什么?
( ~% B5 W r- K1 e' I' ?, L5 J$ V 符合规范,实现特定功能,并且可以部署
! e' T4 _+ ~. \# d" y h# W 在容器上的软件模块。
1 e0 N& T8 y ~ 容器是什么?
! N4 X% q. ~, J 符合规范,为组件提供运行环境,并且3 w* l/ h2 H- e+ Y' T: M
管理组件的生命周期(将组件实例化,调用
: [1 ~4 U# U# b$ L4 f. U. R 其方法、销毁组件的过程)的软件程序。
0 k/ ]7 f, T4 w, _8 I 采用容器与组件这种编程模型的优势:% \0 ? y$ {! u8 S `
容器负责大量的基础服务(包括浏览器与
. |& W R0 @. D2 A 服务器之间的网络通讯、多线程、参数传递- C8 X- g* U. J; x- Z; P
等等)。而组件只需要处理业务逻辑。另外,6 s- c5 f' L" a8 }) O% }8 o7 _. t
组件的运行不依赖于特定的容器。+ d" V- J" q; y! ?, ]; h
2、如何写一个servlet?
% v. ?2 M4 @5 R. i$ O3 v4 \9 Q 1)写一个java类(servlet只能使用java语言
* q0 H h* v: R( {& |* g+ `0 b+ u) O 来编写) ,实现Servlet接口或者继承HttpServlet0 s% I: X8 o: G/ D+ e7 e" A! F9 Z
抽象类。
, O5 E/ E5 a; _0 w! { 2)编译% H2 Y* ]7 j1 Q2 Q8 Z( ^
3)打包
7 R, Q8 |+ O3 z+ `( a, j* d0 o2 [ 建立一个如下的目录结构1 v4 {9 ^3 v* x4 k. A
appname
6 P1 T8 [1 d/ g. ~& r6 ] WEB-INF- s$ Z# T& T9 H5 J: D( a7 j- o
classes(存放.class文件)
/ G* Y x2 \/ J- ]7 U" U lib(存放.jar文件,该文件夹可选)
' r$ J3 t1 ~1 g# Q5 W web.xml(部署描述文件). u8 F& M6 K) @/ n p0 }/ n2 X
该目录结构可以使用jar命令打成一个# Q+ T3 S8 }5 t% ?
.war为后缀的文件。7 L8 `& E- D/ d& h" B& X
4)部署
2 {5 i4 @2 ^* R/ H9 n 将第三步的整个目录结构或者是对应的 ^$ S+ J Z& ^1 V1 s1 I! w
.war文件拷贝到服务器特定的目录。
, P; ]7 k# P2 b9 s/ [# [( r2 ]6 f 5)启动服务器,访问servlet
2 E2 c% W( t' ]# t# k- c http://ip:port/appname/servlet的url-pattern配置
& \0 T; `4 ^! d9 c, i0 ] 4 N8 s6 ^6 o& D% C8 w
3、tomcat的安装与简单的使用
/ U3 l1 B4 ?7 Q) R3 M 安装:4 l5 f/ Z1 J, g1 P
step1 将tomcat解压到/home/soft01下。
: {) V6 H" o! {" w2 N step2 配置环境变量; c: w1 N8 \. g
cd /home/soft011 }- |# S# {0 _5 l. y
vi .bash_profile" M r9 a% z/ X$ L8 I S z
JAVA_HOME:jdk的主目录
; z9 Y/ o& u$ r0 D; Y; m CATALINA_HOME:tomcat的主目录
* p; N. H& E8 P* K1 l/ V4 _( Q1 B; I* A PATH:CATALINA_HOME/bin
6 X2 [' B4 g/ ~$ n0 V6 A: U step3 启动tomcat
, I: m5 B7 M0 _# K3 l! D! N cd /home/soft01' a8 R' K- m$ b4 E1 J4 O
cd /tomcat主目录/bin
% y& @2 D$ o9 i9 t sh startup.sh
. e* J; {+ Z- m$ \3 y3 ~ 接下来,在浏览器地址栏输入:) k7 p+ L, d V7 z2 U# s* T
http://localhost:8080( e5 C: Y0 y2 ]- M7 G
关闭tomcat
/ Q" Z8 P8 H. m' R' {: a sh shutdown.sh7 Y# }7 A! t; v) O8 i
目录结构(了解):6 Q. h& s n$ ]$ N6 t% r
bin:启动和关闭服务器的一些脚本。
) }( G9 v8 l1 a2 K0 L# R; t2 t common:共享(部署在该服务器上的' h5 w0 V2 n" I! ?6 k& w( r, E
所有程序都可以使用)的一些jar包。
/ s! J$ q5 V* |' @6 U conf:服务器的一些配置文件。4 l% R. L& Y$ `& T
webapps:部署目录
5 Q: ]) e9 ^3 G! ?/ s3 u6 s r2 o7 N work:服务器运行时,生成的一些临时文件。
; M, F0 z! g' q5 i- \. w
0 X1 e! O, k! W/ v 4、servlet是如何运行的
# Y, o! w6 Y7 I 比如,向浏览器地址栏输入
: N6 C2 Y2 \+ c http://ip:port/helloweb/sayHello?name=zs- C+ c' W, I! `% W5 D* k4 y
1)浏览器使用ip,port连接服务器。
9 Z& o7 E# Q% `# i+ J) y 2)浏览器将请求数据按照http协议打成一个
4 S3 u$ c& V; u( v. R6 x 数据包(请求数据包)发送给服务器。请求数据' C% N4 ^# [! d; x8 ^: P* B; ^
包的内容包含了请求资源路径
. D7 `. [% Q4 g8 Q2 K/ h (/helloweb/sayHello?name=zs),另外,在
. ~9 U! F- E6 B" R9 j9 a 请求数据包当中,还会包含浏览器自动生成" S. [# f: r* Q6 C) O( K1 x
的一些信息。
5 M- |& k" l, s( e/ ^0 r' ~1 w 3)服务器创建两个对象:请求对象和响应对象。4 B8 J4 b: \3 S1 c# m8 [
服务器解析请求数据包,将解析之后的数据
: V- C! @! T0 v# C 存放到请求对象里面,方便servlet读取请求0 H9 ?1 i9 K* `/ k% C
数据(因为servlet不用解析请求数据包,如果7 k! a: D; t( d" r/ v
要解析,需要理解http协议)。
1 C! Q9 x1 n% h. Q: ? 请求对象是HttpServletRequest接口的一个实现。9 Y8 w6 p3 D7 G6 G1 U
响应对象是HttpServletResponse接口的一个实现。4 d8 d! W+ F% ~" {
响应对象由于存放servlet处理的结果。/ A/ T8 U! g3 u
4)依据请求资源路径找到相应的servlet配置,
* w( R% ]# U- D& Q 通过反射创建servlet实例。然后调用其
1 |/ [' x; L! g% O S4 x service()方法。在调用service()方法时,7 f& |$ w$ ~& x; t/ Z9 n4 w
会将事先创建好的请求对象(request)和
1 ~5 N9 ^! B$ I 响应对象(response)作为参数进行传递。
+ \6 s0 b) a7 Q U7 l) z" {( B 在servlet内部,可以通过request获得请求
2 E4 w8 q5 X, K& k5 t& U" i 数据,或者通过response设置响应数据。
$ a; |, j3 h9 r! j( V+ S& a6 |% ? 5)服务器从response中获取数据,按照$ j: {) C, ]5 [/ y& H
http协议打成一个数据包(响应数据包),. Y0 N, r/ F% U0 @ R! \
发送给浏览器。$ a: u; |! z1 `9 C+ E
6)浏览器会解析响应数据包,取出相应的数据,- n" D6 b; [ k5 z$ g
生成相应的界面。. }6 `5 v& F; j4 H4 Z& y. ?& ^
; j) U# m! T6 A! P 5、使用ide(myeclipse)开发servlet
* q3 U5 t+ [& S" S: U8 c 1)配置myeclipse
3 f) x8 }# e+ }4 @3 C( t4 o7 f$ z myeclipse管理tomcat。0 f4 _/ J: I% K0 t" [
2)建一个web工程! d D2 c8 x8 u. b
2 H9 d1 c6 v4 C n k 练习:* J( j! J, P& T& Z3 T% `
新建一个web工程 "web01_exec"# c$ e0 V- e) |/ x0 \
在工程底下,创建一个DateServlet。2 x7 L; H& T- V5 K# x
可以访问该servlet,输出当前系统(8 t1 ~ X }; T/ B! K
tomcat服务器所在的机器)时间。* ?7 [* x5 [, Z' O r$ `6 {& H$ I
比如:
3 d1 r. }8 R$ ^- ~5 a5 L0 w http://localhost:8080/web01_exec/date1 C/ Z& l5 ^1 T5 g4 M
在浏览器端,显示) c9 H0 w H2 `4 o7 m* O7 s
now:2011-11-21
7 i7 v, R: {* V7 S& p3 R8 G; n$ Y要注意的问题:
, m4 _. k2 F. d) H5 p g 1、要实现Servlet接口或者继承HttpServlet.
# M/ H/ V, j6 E8 f1 L 2、service()方法名称、参数、异常类型
% L7 t# l. R l6 u2 T6 q M5 B 要写对!8 J$ ?( L# k( N# Q! O7 s
3、web.xml配置文件中,类名不要写错!& F( ?& C9 G1 Z6 R; ^
servlet-name不要写错。
) A! I; H* ?" e1 C& b 4、在浏览器输入访问地址时,地址不要
9 w/ B. U' V0 s2 B, ^ 写错。应该按照
8 N/ K, |6 {' u http://ip:port/appname/servlet的url-pattern
, _6 |! w' I2 f" x( J6 F 去访问。# N- |9 h% U; y
5、记得先部署,记得服务器必须已经运行了, D( Q6 Y/ ^1 R9 w
不然不能访问。. P1 j+ O s# Y6 v g
6、如果报500错误,一般是你的程序写错了,
# U: V( g4 T' E, _# C, g$ R* l# Y" \ 如果报404错误,访问地址有错。如果是405,7 I& e8 K5 E- o5 |* Z2 Y
请检查你的service方法名,包括方法参数等。0 `6 r) s% ]% v: U( ~( D; l- c n
( G, A8 q- {- D" O/ Z3 E V
p1 L# T! J k% O- j |
|