该用户从未签到
|
java server page(java服务器端页面技术)。
+ N; ^; [+ E: C 是sun公司制订的一种服务器端动态页面生成技术的
: A1 K3 X6 k- A5 [5 b, z规范。- r {5 `$ `5 E* w* t! `3 y2 ^4 f
因为直接使用servlet生成页面,如果页面比较复杂,
) V7 _4 X5 R4 F* q% v$ i则代码过于繁琐,并且难以维护。所以,对于比较复杂
# @2 k, p* U% ~2 W+ z! D9 t9 o的页面,使用jsp来编写,更容易编写和维护。! i S, n) c9 t- R1 k2 Z1 j6 b) t
2)如何写一个jsp文件。/ j8 W4 H2 R2 l: s) k2 Q; @8 Q* }
写一个以.jsp为后缀的文件,然后,在该文件当中,
* g. E1 E- g' e" J: i. D添加html和java代码。编写完成之后,不需要编译,当
9 Q7 v' @( f& [6 G. M客户端请求访问某个.jsp文件,则服务器会自动将
, G# P; {( K$ D2 h; R9 a.jsp文件转换成一个.java文件(该.java文件其实是一个
2 i5 t5 C" j$ l# i( U* J9 Y7 Rservlet)。
0 w& b: l6 o( T0 \7 _ 3)jsp文件的组成. S$ `- W3 n4 z: ~9 z9 a
a,html(包括css,javascript):
' p' q6 w/ a8 T w# O, t; i$ o( H! g8 P 直接写在.jsp文件里即可。
: e0 r5 j) \* R; G3 o P b,java代码:
% T% i' U2 Y5 g4 L9 P" d 第一种形式 java代码片断% @& o' |$ O5 l
语法:
% v6 o% V8 ~/ a6 l <% java代码 %>
! k y- v" x* ~6 \1 x- [ 第二种形式 jsp表达式
0 b2 M9 G+ e4 z1 v0 u 语法:) I5 [" C8 [ j. F! g
<%= java表达式%>
: c: l9 v# q1 P h7 d% V( k0 t c,指令:
. ] O& Y* q8 m" W: Q; z 所谓指令,就是告诉jsp引擎(容器当中,负责
* @% M2 _3 C* w: s& @/ E2 p 将.jsp文件转换成.java文件,并在运行时,3 B0 n+ ]6 i' a5 U+ }7 V
为jsp提供一些 辅助支持的模块),在将.jsp
4 J; v) V+ e, ^' u0 ^ 文件转换成.java文件时,做一些额外的处理。- q+ X0 B6 _9 x9 A' S1 ~
语法:
* Y8 L' U9 i0 S8 F: x! w* p <%@ 指令名 属性名=属性值%>: V! p9 Z9 B5 s* @
page指令
7 C! L8 {0 K1 ?& R, x import属性:用于导包。, r& T! j2 `. e7 t5 b# X; K
比如
8 |0 d& a" Q" { h' }# g <%@page import="java.util.*,java.text.*"%>& f8 C8 d$ b1 I
contentType属性:等价于$ P3 [1 L, Y3 G1 |
response.setContentType();) C: w, W$ }( g4 W6 k f
pageEncoding属性:告诉jsp引擎,.jsp文件
* [! C5 g, a' ~- ^5 O2 Z: l 保存时的编码。9 c' V% o7 U8 L( G, c: d
include指令+ D* J; ~5 x' p/ F$ @' \/ t/ x: t
file属性! s: R m: y6 X$ t1 b1 d
告诉jsp引擎,在将.jsp文件转换成
3 Y4 Q' \/ u1 ]/ e' G3 l/ t .java文件时,在指令所在的位置,插入) ~' m) `# W, X$ ?; g( ^
file属性所指定的文件中的内容。
5 E x% v0 e" P7 T d,隐含对象( h% z1 Z* x' k
所谓隐含对象,指的是在.jsp文件当中,不用
8 t6 x, ]9 p; {$ k& h" D" y 声明和创建该对象,就可以直接使用的对象。原
' @" u! D+ s0 A. w1 m 因是,.jsp文件对应的.java文件当中,已经自动
( u! P2 Z# q1 P; x 生成了该对象的代码。
" `- \1 m! C3 L. I out
$ H# ]3 M1 x; j request# U) y4 y# z* \7 q% [" X) t- o
response. I* w7 ?- [8 }# T1 @2 h
4).jsp文件如何转换成.java文件
5 _6 M/ C% [4 l5 O! y; v: D7 G a,html ----> 放到service()方法里,使用9 t) R" ^) U& t9 v3 U* J: Q
out.write()输出。" A! Q- |9 G& R5 r
b,java代码片断 -> 放到service()方法里,照搬。7 y5 O0 k r0 c) d8 { `: k2 ^
c,jsp表达式 ----> 放到service()方法里,使用! ] ^' ~8 y" z6 X6 o, e: }
out.print()输出。3 Y4 M; T" a* K+ i* c
2 @$ O- \6 ]: I- R
: ]9 V, Z3 C! F6 X
1、转发
3 F; b; U/ L) h7 L 1)什么是转发?
1 O& _# ^/ N6 e Q4 @. A$ U 一个web组件(jsp/servlet)将未完成的处理0 o3 S: p6 w @6 a* v/ P
转交给另一个web组件继续处理。转发的各个组
! V# m2 p3 ?8 S8 T* ~5 K' N y: F 件会共享request和response对象。5 k# U O$ {2 k q' S
2)如何转发?
" D& E4 {; U& F# D' b- R step1 先绑订数据, m1 O( ~" |) `$ l4 k
request.setAttribute(String name,- j" V3 Y2 n1 {% M- r
Object obj);
* X" p4 _3 h7 i- z& L 跟绑订相关的另外两个方法. a& v0 L% o+ A. t. [6 f. m
//如果name对应的值不存在,返回null。. _( R$ P4 d c, S( C6 }6 m9 v
Object request.getAttribute(String name);
. B; U J8 m1 L" A2 e$ k request.removeAttribute(String name);/ c# w! f" d8 s' l
step2 获得转发器,转发。
, L; `9 W$ v3 f" |, T7 C RequestDispatcher rd = ; i7 s5 M4 K1 }
request.getRequestDispatcher(String uri);+ T7 z% u4 y# Y( `
rd.forward(request,response);( ]6 e7 t ~( |. f' X7 u
3)编程中要注意的问题9 a( W$ x" d( ~! b
转发之前,不能够执行out.close或者out.flush。8 y# Q8 `! Q4 f# h+ B' _! p+ |
转发之前,会将response中缓存的数据先清空。 , b9 D) c+ E2 k$ [
4)转发的特点" @! X4 F0 n( u) U
a,转发的目的地只能是同一个应用内部的某个组件。% r/ t: t& l& e/ l
b,转发之后,浏览器地址栏的地址没有变化。
; l! S5 ] N% F# h9 N$ [$ j c,转发所涉及的各个组件可以共享同一个request,
0 Q, {* `( `9 L. c response对象。$ S M$ \! `7 \1 w* o
思考:
. Q/ b' v4 @- h! \ 转发与重定向的区别。
5 a0 y7 x; [. j Q! _+ ~2、表单中文问题
, j6 e% e: I* w' D# L step1 jsp文件,要添加
( z& ]# W1 k* G2 j9 Y6 O7 A8 s; W <%@page pageEncoding="utf-8"
4 T, J4 S7 X1 ]9 n$ z contentType="text/html;charset=utf-8"%>, q( K! u& v/ g6 }8 i
表单设置method="post"。2 T( E# l* c* H6 w9 Q
step2 在servlet类当中,添加2 b5 h2 v- Q7 y
request.setCharacterEncoding("utf-8");5 }2 L& ?# _# K0 W
3 C4 e) f1 `% c step3 如果要访问数据库:6 X3 n2 E, q8 i2 Q8 d/ R
a,保证数据库能够正常地保存中文。
; |( A S7 @" s( f: z" ]$ } 对于mysql
3 O( \6 @, x& n% w# Z0 R4 B create database dbname
7 e. x/ r1 x( } default character set utf8;# q9 t( r5 L; Y- Q
b,使用jdbc访问数据库时,必须要保证
) N& T9 W+ k# i& N" a jdbc驱动程序能够识别数据库中保存
% Z: m4 C8 o9 u2 g- c3 o. u$ T6 @7 r 数据的编码。0 e& K* k4 T& w5 G P
jdbc:mysql://localhost:3306/jd1109db2?" E! M8 k; m% ^: e7 t
useUnicode=true&characterEncoding=utf84 ~/ Q3 q) W5 @2 r6 R
+ I( r' W2 m# g" ~3 n8 x0 H: S
3、路径问题
% x. x$ @* M9 Z' Y4 V% a. m# ? 链接地址、表单提交、重定向、转发的路径应该8 d8 L* y# s/ l9 W1 b
如何写?! L5 q6 X1 o" q1 S* {3 T6 M
<a href=""></a>
" B7 h: n; ^: V8 ? <form action="">$ W1 Q+ D" x8 s$ U# K$ B: G$ R7 x2 e# e- X
response.sendRedirect("");
2 i1 B6 J' g6 ?1 m# e getRequestDispatcher("");. r x6 E2 a5 f1 B& V8 E
a,相对路径与绝对路径
) v9 I8 H$ J3 d* i 相对路径:不以"/"开头的路径,比如:! p" p4 _$ F }- D" g: N' w8 D
<a href="del.do"></a>9 f0 }' ]3 _2 [: \( l
绝对路径: 以"/"开头的路径,比如:
1 K/ W6 N1 f& [ <a href="/appname/del.do"></a>) l' ]' V" W9 ]/ w; g
b,怎样写绝对路径?
7 ?. M0 h+ X: r9 a( w 链接、表单提交、重定向,绝对路径要从
4 o% F) I$ ^. j, b$ S& A 应用名开始写。2 [6 K7 F: ?+ o" _. A" n) B
转发要从应用名之后开始写。3 |' C# }6 G4 B3 q
//返回应用名,比如返回"/web05";* S# u% h' R% i! a
String request.getContextPath();
4 b. a/ Y. B+ \4 D4 b) O2 I8 e% @5 C/ U# X6 o/ j h' d
|
|