该用户从未签到
|
java server page(java服务器端页面技术)。
^/ S6 j& ]0 `5 G8 T 是sun公司制订的一种服务器端动态页面生成技术的 W2 Y% E8 E3 r* ~2 s6 _" F
规范。: O& O7 }4 ^5 {" C/ N; J: U8 m
因为直接使用servlet生成页面,如果页面比较复杂,- i1 V' r' T! i( s
则代码过于繁琐,并且难以维护。所以,对于比较复杂
/ Q3 P" O5 j( |( `的页面,使用jsp来编写,更容易编写和维护。
) b I2 p' S8 o3 S3 X 2)如何写一个jsp文件。0 I8 e1 C$ O5 D/ m
写一个以.jsp为后缀的文件,然后,在该文件当中,
8 z0 q8 Q& q. z1 }/ Q6 a添加html和java代码。编写完成之后,不需要编译,当+ J( a) E# x% k( H7 O: m% m
客户端请求访问某个.jsp文件,则服务器会自动将5 p3 N5 B8 \/ l/ L! w3 A
.jsp文件转换成一个.java文件(该.java文件其实是一个; |* ^# M5 s$ a( E5 g2 T& _5 T
servlet)。. N- Z$ y! r& O e' C
3)jsp文件的组成 n0 J0 r+ H3 r
a,html(包括css,javascript):! o1 Z7 M! P4 [0 z- K4 c3 D
直接写在.jsp文件里即可。, Q3 i+ D; u2 X) q% u5 n1 \- S
b,java代码:
5 Z, M' }- }# R; }% I2 M7 q 第一种形式 java代码片断
3 `' D+ j: h5 }$ U( } 语法:7 d; d' w& J5 i7 I- s+ ~" J. \
<% java代码 %>
1 {0 ~5 \3 J& I" R3 F, Q3 Q 第二种形式 jsp表达式' ]2 P$ ^0 _1 K" j5 u3 t
语法:
/ `" B' b' b2 t <%= java表达式%>% ~. J' @- c! x J* Y
c,指令:
. K, F2 S& L# I- K/ ` 所谓指令,就是告诉jsp引擎(容器当中,负责
! S( o' j) ]7 }2 h 将.jsp文件转换成.java文件,并在运行时,
. v5 P. v* e" e6 j7 F. X: \4 j 为jsp提供一些 辅助支持的模块),在将.jsp
; h' f3 |) i* N9 W* p9 D 文件转换成.java文件时,做一些额外的处理。/ }8 v P) C7 I$ f( \' Q
语法:. L+ x+ t, S4 H5 N
<%@ 指令名 属性名=属性值%>& t- d5 Y7 F: i: A! b$ i; m/ U- O: [9 ]
page指令5 d8 c- G! V8 C+ y9 Y: B9 m4 |
import属性:用于导包。5 i: Q L* G" u
比如) v# A m/ G! c+ j5 t4 U
<%@page import="java.util.*,java.text.*"%># ?- i8 |9 O0 ?7 W: D' z
contentType属性:等价于' u) R: k" ~8 E$ h4 `- y( J8 @
response.setContentType();
3 J# [+ g+ o' j pageEncoding属性:告诉jsp引擎,.jsp文件
. ?+ \- ]$ M* D& \ t- { P' G8 ]; | 保存时的编码。
. t/ Z% M! [9 V3 ~ include指令: ^9 f' ~" p0 E$ H1 H5 r8 S
file属性) V: T- a2 v- A! h$ \. y* t2 i$ G: J# H
告诉jsp引擎,在将.jsp文件转换成
0 I( f. h b& `: C .java文件时,在指令所在的位置,插入- b2 f8 S+ r& q3 P+ }
file属性所指定的文件中的内容。" N. O& A6 |1 `: C& ]; s3 a* j
d,隐含对象2 u6 S; K* n8 Q! U( f( }1 [8 ^( R
所谓隐含对象,指的是在.jsp文件当中,不用
" _' Z8 T1 q9 ~" Q" [ [% F 声明和创建该对象,就可以直接使用的对象。原2 J0 E3 b- r- k9 ]! a7 o/ Q1 v
因是,.jsp文件对应的.java文件当中,已经自动
8 m: X: w4 c% Y# M 生成了该对象的代码。4 a$ X# C! h8 y4 t9 a
out
, s# w `# g+ a request
4 f) v" ~" k1 v response! c9 J7 i* r2 F( @
4).jsp文件如何转换成.java文件
c4 k4 `' P/ |7 J: p m a,html ----> 放到service()方法里,使用2 ]4 O$ j: _$ K/ S6 S% u; V
out.write()输出。
7 r D/ z$ T( k9 {2 r( S b,java代码片断 -> 放到service()方法里,照搬。
: H! r9 t% t+ o2 C; v& v3 n c,jsp表达式 ----> 放到service()方法里,使用; x7 a. ?! g' c1 Z+ T0 e" Y: t2 V
out.print()输出。
) T0 G: K, h4 B0 P & T" n V# T8 K! |4 a' S6 }
8 [+ k3 e! [. U3 |
1、转发
, s- h3 w* a; ?9 E0 P# ^: D 1)什么是转发?
$ y* F- N# ]" K' F 一个web组件(jsp/servlet)将未完成的处理
9 P0 O+ i: R7 k4 d3 F: F 转交给另一个web组件继续处理。转发的各个组6 J9 [% {" t1 ~/ ~3 W5 X3 |* _
件会共享request和response对象。6 N3 W9 G- Q6 o( _9 f$ N1 u
2)如何转发?! U0 {' e/ j. m7 A# B' r
step1 先绑订数据$ h1 v" t. ^; i, s( h3 ?* I
request.setAttribute(String name,
& ?/ w' s: u4 x6 e5 r$ G9 p& k Object obj);
# q @+ K; t! ?( H 跟绑订相关的另外两个方法+ j* l3 g/ c( L1 E. @# h7 l
//如果name对应的值不存在,返回null。
6 g6 J; m2 i1 N0 Z% m$ y/ P Object request.getAttribute(String name); F! @* X& K" D3 S9 |9 v a+ X
request.removeAttribute(String name);
- u* }, E, j* n9 [0 B9 D step2 获得转发器,转发。% P* k+ |8 Q( n$ m" w0 g
RequestDispatcher rd =
5 v) a6 d; G0 H' }5 k4 d; p request.getRequestDispatcher(String uri);; d; {9 s# C8 m8 ^
rd.forward(request,response);3 \3 m: m3 n3 s0 T6 F
3)编程中要注意的问题, e- G# S. P' q4 @3 f$ Z: l
转发之前,不能够执行out.close或者out.flush。8 e% p& @: L: N' B
转发之前,会将response中缓存的数据先清空。
Y4 D- ]2 N- w* p5 K6 }, J 4)转发的特点
" J# r3 \- D) b5 Q% v- t0 j0 ^ a,转发的目的地只能是同一个应用内部的某个组件。
O% r; R7 x4 h b,转发之后,浏览器地址栏的地址没有变化。
' ~. n" k5 m3 M8 E c,转发所涉及的各个组件可以共享同一个request,
& E: V" @3 _; V; ] s response对象。
& I o k! }- h$ Z0 m+ E/ t 思考:
$ X& z2 \7 Z) r" D2 _8 |4 U# G 转发与重定向的区别。
9 ^* H: m; {$ O2、表单中文问题
' r* X4 m- W: a8 ~+ k5 a. S) _" R" l step1 jsp文件,要添加- k8 h; f5 j" y, t0 j: K9 i
<%@page pageEncoding="utf-8"
- o0 ~4 k; z: S5 R l3 Q contentType="text/html;charset=utf-8"%>* E6 ~9 c7 P' {* M4 }/ O' @
表单设置method="post"。
' m I( M- t& G step2 在servlet类当中,添加
9 G7 J. |/ | y) e, L request.setCharacterEncoding("utf-8");% g1 y+ K9 D! l1 K. M1 O8 m# t
1 o0 H% ~ }; a% ^2 W! | step3 如果要访问数据库:% O# t0 g- K4 h7 ~
a,保证数据库能够正常地保存中文。
* m; `+ J6 ^: _ 对于mysql
: M t M, ~0 g4 h% |. m create database dbname
: k* d9 ~$ X$ A8 E4 }# z0 ~/ g/ C default character set utf8;
! L( K* K3 r% W3 C b,使用jdbc访问数据库时,必须要保证$ ~% T1 y3 r6 S9 U5 w7 J
jdbc驱动程序能够识别数据库中保存; X# u6 \- N! D( Q
数据的编码。* J, u* F2 }4 g
jdbc:mysql://localhost:3306/jd1109db2?% v8 X1 _/ g+ v% q! p7 F- q
useUnicode=true&characterEncoding=utf8
$ b$ {! S$ u" E/ B; R; ^9 L5 H7 g. Y9 ^ F+ V+ f) P. q
3、路径问题
2 s( v" K% q2 V" p2 S 链接地址、表单提交、重定向、转发的路径应该
7 p% Q m* T- V5 p如何写?
7 C' }, m) N U <a href=""></a>; g! M/ g5 F4 M3 L# p+ M( b, W+ x
<form action="">8 r B% G( r) K# s6 u
response.sendRedirect("");& ^7 h8 E" X7 v8 l/ r( |3 z! }
getRequestDispatcher("");1 m1 ^( f* T5 T) d1 r& E$ D
a,相对路径与绝对路径
2 a) y, f9 @7 a- y3 y 相对路径:不以"/"开头的路径,比如:
. R% |& M3 R0 K' _6 a <a href="del.do"></a>
+ n. [4 s7 R; W4 P 绝对路径: 以"/"开头的路径,比如:
# C) p, G) }" J( k. X <a href="/appname/del.do"></a>
' _- S$ e3 [- i# E6 E7 c2 z1 f b,怎样写绝对路径?
1 E1 E: d' v+ W% \/ U+ E4 P 链接、表单提交、重定向,绝对路径要从
. u/ }- i! J1 `$ q# \ 应用名开始写。
, p8 j# P- X7 a V! |, ? 转发要从应用名之后开始写。, }5 S; Y" k3 q
//返回应用名,比如返回"/web05";
, ~! K4 }$ }( D) D4 I2 ] String request.getContextPath();
& U7 `2 ?" G1 r3 I; u) F
! ]% y- I& p, c& G* C, t6 L |
|