该用户从未签到
|
java server page(java服务器端页面技术)。& {. [+ T4 y4 t
是sun公司制订的一种服务器端动态页面生成技术的
7 P# h, |( `0 k* b/ L6 R规范。
. l y9 ^& V- _8 p& [, b8 b 因为直接使用servlet生成页面,如果页面比较复杂,
( V7 c8 U) ]9 U则代码过于繁琐,并且难以维护。所以,对于比较复杂. ~6 S1 p* N* \6 |# J# B. Q1 {) a) x
的页面,使用jsp来编写,更容易编写和维护。7 v1 j( K; I* n, P3 r$ n. R( b7 G- V
2)如何写一个jsp文件。
! B# M( r! }6 P( A- |7 m 写一个以.jsp为后缀的文件,然后,在该文件当中, p2 x) g1 U7 u3 r5 q0 |
添加html和java代码。编写完成之后,不需要编译,当
8 T6 |8 b2 m$ S9 q, }+ p4 y% h0 h客户端请求访问某个.jsp文件,则服务器会自动将0 U( M, O( h3 x- {- S/ T6 i
.jsp文件转换成一个.java文件(该.java文件其实是一个
( z O7 I; F7 h& v; v: vservlet)。
8 J. m; d7 M9 \ 3)jsp文件的组成
! B- s% S5 q" e: l a,html(包括css,javascript):+ [: r' S* e9 v a" W! x
直接写在.jsp文件里即可。2 d" r1 Z; `4 Z0 ^# c% }2 q
b,java代码:
3 Q% I9 d Q: t% d# l: O 第一种形式 java代码片断* e) l+ w- w0 v% Z
语法:& O7 A9 J1 |9 ^9 i- b0 O. ]
<% java代码 %>* c' _/ I$ U# t8 Y# Z
第二种形式 jsp表达式
7 G* ]7 O. i4 p, j$ L: w 语法:9 N5 K) f: Y' r! D
<%= java表达式%>, N; F# a; W3 Q3 x6 n9 i1 \
c,指令:. v X( P t" W3 L+ ?
所谓指令,就是告诉jsp引擎(容器当中,负责
6 R5 z+ Z5 o. L; W5 l 将.jsp文件转换成.java文件,并在运行时, @; s0 R R/ D5 X- e* c+ ?
为jsp提供一些 辅助支持的模块),在将.jsp% ?* @5 ?" X% T; H
文件转换成.java文件时,做一些额外的处理。
$ C' T8 z4 L4 F5 W& | 语法:$ F* q8 T: [1 p( | H& p7 `/ S9 }
<%@ 指令名 属性名=属性值%>" M$ y) {; x0 G
page指令
8 `: B8 m) @/ b8 j1 h import属性:用于导包。
F; y" j e7 j' c% t" } 比如
' j* S1 k" N9 f7 l) D <%@page import="java.util.*,java.text.*"%>
h0 D9 `! `3 @3 L) ]# {' ~ contentType属性:等价于
3 V' Q( f3 _7 F$ t7 {9 W response.setContentType();
6 }: D" ?! J3 j& Z0 C6 }5 x pageEncoding属性:告诉jsp引擎,.jsp文件
) A/ m6 _4 o( K0 m( S C, w 保存时的编码。
" e( m, m1 x6 n% \+ y) C' Y; g include指令2 h: _, P3 e: J
file属性8 [/ a4 z3 e4 C9 K+ J
告诉jsp引擎,在将.jsp文件转换成
; ^2 D% H# x/ X& w! s- W0 c4 B6 K .java文件时,在指令所在的位置,插入
/ Q9 K: r6 |! Z" p0 K% G6 k file属性所指定的文件中的内容。% H; k3 V; o2 ~
d,隐含对象
7 v" J' m0 v$ K' O! b 所谓隐含对象,指的是在.jsp文件当中,不用
! E% w% P& D7 {7 i: ], _ 声明和创建该对象,就可以直接使用的对象。原
1 {0 [7 M/ d& I4 d' d 因是,.jsp文件对应的.java文件当中,已经自动
0 |( f% d1 D) ` m 生成了该对象的代码。/ I" C) }* h- r
out - i3 X; \1 {2 C7 P" B: V
request1 ]5 q6 y5 x0 ? y2 z
response
/ F& A- K, |5 \ C2 X( B7 t 4).jsp文件如何转换成.java文件
: P/ l2 k+ ^" s& c5 g$ B" h a,html ----> 放到service()方法里,使用
d6 _' T+ Q0 }# s' i; B" [ out.write()输出。
- Z, D5 Y' U/ O ?* r4 I" K2 q2 l b,java代码片断 -> 放到service()方法里,照搬。
) ?+ o1 `& o! g: U6 u0 m; B" H" Y c,jsp表达式 ----> 放到service()方法里,使用
2 i% u9 ]3 W! \; D out.print()输出。5 s7 @) @9 Z7 [; c: Q8 y8 C0 I& d
: L# J" w. l2 W y) e
0 N0 m3 {5 P/ y4 ? U1、转发' j+ z3 n5 j. @( w( B' h9 q0 x! R- t/ ^
1)什么是转发?% W- T6 v; n4 E# z' W8 o' R
一个web组件(jsp/servlet)将未完成的处理
# Q( H' _) w# x: q$ D& J, h* W( Q 转交给另一个web组件继续处理。转发的各个组
) L# p* v/ j2 D; v0 ^8 d 件会共享request和response对象。
1 s3 s- [, t0 M, \& t/ u 2)如何转发?: \$ H/ f( Y3 W; ^! K0 Z1 `
step1 先绑订数据6 @5 E( I- P$ _1 Z4 A1 i
request.setAttribute(String name,+ J8 |1 o8 q- j0 P+ A' |
Object obj);
# U* R/ ~ F7 h, \. r- c 跟绑订相关的另外两个方法7 e: E. t2 v" [9 r5 W0 y! i
//如果name对应的值不存在,返回null。$ c! ]! _" w- G) J: q
Object request.getAttribute(String name);
( `& ?% U. V, E2 C5 Y request.removeAttribute(String name);0 t9 v6 T4 F/ U+ G
step2 获得转发器,转发。) `% k3 ^( y8 Z1 y" [7 ^
RequestDispatcher rd =
2 L) J) _+ V$ g0 ~+ I; I" n- T& x request.getRequestDispatcher(String uri);
% K7 ]8 s, i7 v% a rd.forward(request,response);
4 E0 \3 N7 ]4 `7 ~) }2 f 3)编程中要注意的问题
2 f( [4 @2 c% u P9 A& C5 s 转发之前,不能够执行out.close或者out.flush。4 M) N( L1 [7 k9 Z
转发之前,会将response中缓存的数据先清空。
# k. N! r! R6 { v9 r; @- t, r5 b) B 4)转发的特点 [. B- D3 W/ Y8 \) ]9 f
a,转发的目的地只能是同一个应用内部的某个组件。
+ V2 q; k" O1 _: S! H b,转发之后,浏览器地址栏的地址没有变化。
( N4 ~8 |+ A2 f0 c% Q4 M c,转发所涉及的各个组件可以共享同一个request,
" d8 [+ s+ F8 u3 B. D, I+ I response对象。& E7 }' Z% A9 ?4 G
思考:; E9 i9 x! |& Y8 p! Z
转发与重定向的区别。
5 @5 p+ ?# M9 k6 R/ ?& D; E% `2、表单中文问题
q% S8 |& G! q7 r" ^6 r/ N O5 A step1 jsp文件,要添加. l9 b; y5 \0 d4 m
<%@page pageEncoding="utf-8" ! g6 S. ^, H |8 k
contentType="text/html;charset=utf-8"%>9 j4 F8 D. j. k
表单设置method="post"。
5 a7 }1 o1 j8 M step2 在servlet类当中,添加
; @: K# s# N1 q1 b; M9 V- W request.setCharacterEncoding("utf-8");
; H- _5 N! e4 j" h
6 P4 }) e" K0 s3 s step3 如果要访问数据库:
! T& e4 ]6 J% O' B# V a,保证数据库能够正常地保存中文。" h+ g; m5 Z& `; X
对于mysql1 M5 _6 i8 }2 ~2 f3 _, U8 {! u
create database dbname . {: p- L- k8 X6 N, Z: A
default character set utf8;
: ?* ?2 z& {6 y+ j+ o: G1 s* b+ _ b,使用jdbc访问数据库时,必须要保证
7 L# l( Z8 W+ e: i4 n$ A jdbc驱动程序能够识别数据库中保存7 L3 q% F. M2 e: C
数据的编码。# l* m! u# V- a4 f3 s. U
jdbc:mysql://localhost:3306/jd1109db2? P- D M& [/ J! c
useUnicode=true&characterEncoding=utf8
7 B. X1 C n/ J% E9 @1 v# G( E6 _1 x/ T' h
3、路径问题7 h \& A, B( U/ H2 o8 D/ Z; G+ h2 B
链接地址、表单提交、重定向、转发的路径应该* P0 [- ]# Z( x# T0 [
如何写?
3 u, Y \) ]; n9 x# T6 c# q <a href=""></a>$ K8 k0 t0 P: {9 b) x: S
<form action="">
2 D4 o9 f# l& m4 a/ }( g3 {8 H response.sendRedirect("");
& F8 I; L: k2 i getRequestDispatcher("");
2 k3 u6 y7 Z" h. X a,相对路径与绝对路径
+ l k' m* L% {# c. R) ]; @ 相对路径:不以"/"开头的路径,比如:7 v4 x3 g5 P6 f1 A
<a href="del.do"></a>8 A, q4 L ~3 @: t3 f% R
绝对路径: 以"/"开头的路径,比如:
, |# [7 X1 `6 Z/ P7 I" v; w <a href="/appname/del.do"></a>
4 G. t6 p; P; M b,怎样写绝对路径?
! j. k9 d! @* X2 U2 C& b [ 链接、表单提交、重定向,绝对路径要从% @# u6 r. W3 l; H T
应用名开始写。
# Z O2 e! u+ k) r8 F3 }( N 转发要从应用名之后开始写。- x2 {* P. z8 Z2 s A
//返回应用名,比如返回"/web05";8 O$ \0 w) P( f1 ?, ]
String request.getContextPath();- D. \* N% \$ |( L( O
$ `% Q, v- B+ i, }/ ?$ p' A |
|