该用户从未签到
|
java server page(java服务器端页面技术)。
1 R! f1 A ^+ Q% I8 I 是sun公司制订的一种服务器端动态页面生成技术的. j1 W. U+ z, @0 m- p' F
规范。
4 J0 ]& {0 F) t- J 因为直接使用servlet生成页面,如果页面比较复杂,
" j' Q- K, Q4 \) g3 [2 I: O6 R则代码过于繁琐,并且难以维护。所以,对于比较复杂3 C2 E" m" n1 O) ]
的页面,使用jsp来编写,更容易编写和维护。# M9 Y+ {6 b f o! j
2)如何写一个jsp文件。
5 o6 u3 H1 _0 i$ M 写一个以.jsp为后缀的文件,然后,在该文件当中,
( q! m5 s( b! t, f7 f添加html和java代码。编写完成之后,不需要编译,当
* z! ^ L/ M% X$ @客户端请求访问某个.jsp文件,则服务器会自动将- U$ F. ]8 x, q1 K/ x" Q- ]3 ^
.jsp文件转换成一个.java文件(该.java文件其实是一个
7 F/ [2 Y7 w5 g) P; l, nservlet)。
4 ?7 ^2 ^$ T9 W 3)jsp文件的组成3 _8 J6 v+ m6 ~2 q1 [
a,html(包括css,javascript):" \5 m m$ h! u) l R3 m8 @- D" G
直接写在.jsp文件里即可。, t3 a% Z# l+ C# O1 P: s U
b,java代码:* H( p5 H7 g4 A
第一种形式 java代码片断' X- B1 _0 [) v9 O
语法:* l: S& F2 m$ z
<% java代码 %>! r6 I3 \$ _9 t
第二种形式 jsp表达式
, E9 }- S# X' ]) A# n; | h 语法:
3 [$ U2 I3 w" w8 _. f* O; U5 T# Z. H <%= java表达式%>
) r& E1 _. n9 D c,指令:
6 t( S2 Z$ [" ~8 Q1 E# s 所谓指令,就是告诉jsp引擎(容器当中,负责2 u. @' V7 u( ~! \, ]* J4 n
将.jsp文件转换成.java文件,并在运行时,& P* i, i0 I& p# ]7 _, D
为jsp提供一些 辅助支持的模块),在将.jsp
/ e2 }+ U- `- W" l7 W 文件转换成.java文件时,做一些额外的处理。
) }. l8 Y1 b1 I" j& M, ] 语法:
. ~% Z0 C ~3 @ <%@ 指令名 属性名=属性值%>. b2 s0 Y- b b8 Y
page指令
. }7 d A7 {& C% R! W4 f9 j* { import属性:用于导包。
/ s$ _/ X0 x% U6 S 比如
8 ?, o' c- y) m% B# y1 ]+ I <%@page import="java.util.*,java.text.*"%>$ x% _3 _. C/ F. l8 [; |
contentType属性:等价于. J$ W% h9 O( T2 n. ~
response.setContentType();
5 L% o' `" X6 H pageEncoding属性:告诉jsp引擎,.jsp文件& ?5 A2 Y7 [2 f3 T; m8 \) W
保存时的编码。
( p# R8 Y( D1 x' e" ] include指令
9 Q5 V O- {$ A ]& O* [# t- o file属性
* b0 u7 `' k* W/ Q3 s* x 告诉jsp引擎,在将.jsp文件转换成
% f6 O6 F; |$ t5 c .java文件时,在指令所在的位置,插入
3 ^- J$ ~0 d; ^8 V9 ~; o; l; n2 K c; O file属性所指定的文件中的内容。1 ?! w2 l' t8 ~2 k7 L* J9 f
d,隐含对象
9 X/ r/ |" z* x2 r( o o 所谓隐含对象,指的是在.jsp文件当中,不用+ `4 y; ?8 h/ [" V$ _8 v) r
声明和创建该对象,就可以直接使用的对象。原4 ^) O3 p& z. h# a# P# w( O
因是,.jsp文件对应的.java文件当中,已经自动 J+ z& k8 s! n- Y l0 i3 U. Z
生成了该对象的代码。
2 w4 J0 o; u; C6 ^ }* g$ T5 F1 O out | Z, f- U; r6 [6 j" x" V
request
6 y. \- `" r) b( Q! t& \7 ?* F response
# R ^/ k' u- D 4).jsp文件如何转换成.java文件
( K- S* B# M; G% d! G. w) X6 \ a,html ----> 放到service()方法里,使用
" u" c* _9 k: m9 R( G out.write()输出。
$ c+ L, k$ l: N b,java代码片断 -> 放到service()方法里,照搬。
, m S8 o2 O- N0 Z c,jsp表达式 ----> 放到service()方法里,使用, N. t( j7 w: i) `
out.print()输出。
6 E/ K3 E' G- {6 M3 m% V . `( M$ B1 j3 q, J
% a( c6 |- a8 T8 e/ \1、转发4 ~) Y! O. n K/ y3 Y( ]
1)什么是转发?2 m+ k6 m; S! q+ _7 {
一个web组件(jsp/servlet)将未完成的处理
: ^7 N: S* E" o, S" C9 E9 G: U 转交给另一个web组件继续处理。转发的各个组+ n! h- u% W. G: T0 a
件会共享request和response对象。
3 P A8 a# ~, Q( V 2)如何转发?
, \- h: w1 `) E1 z7 @ z4 t0 [ step1 先绑订数据4 X' K; C' c$ {- a; n1 I4 V* q
request.setAttribute(String name,
, T/ @6 [! @0 f5 y Object obj);
! c# e. [8 z# o, Y. ~* D 跟绑订相关的另外两个方法
7 `3 @" F5 f& s" P! @ a; I //如果name对应的值不存在,返回null。
3 l7 M- `) B ]" x V S Object request.getAttribute(String name); n' Z5 M+ ~2 T( o8 b. e( L
request.removeAttribute(String name);5 n ], ?8 P9 e. X' Z1 t, a
step2 获得转发器,转发。
3 Y" V7 o3 h" [. n6 ~' ?' T( X" c RequestDispatcher rd = 3 N: c& z8 K e4 W, D2 B. c0 N
request.getRequestDispatcher(String uri);! ^* F9 m! G. z! A/ r- B5 ^( d' _
rd.forward(request,response);4 P0 _# _7 \* U0 M
3)编程中要注意的问题9 V+ a* [ n# O8 `, w4 x D! u2 e
转发之前,不能够执行out.close或者out.flush。$ T+ X6 S% R+ a" t3 q, `" J
转发之前,会将response中缓存的数据先清空。
. G8 F! f; N" y) p5 D y3 v0 g 4)转发的特点
l( h5 W, z- E a,转发的目的地只能是同一个应用内部的某个组件。
0 D4 t% X4 {$ [5 a, m& e b,转发之后,浏览器地址栏的地址没有变化。 `& K: v; |6 g
c,转发所涉及的各个组件可以共享同一个request,
) ?3 u+ ~1 t, I q2 g! [" H8 u0 H* _" p response对象。
9 K4 s: v+ p/ P* o+ ~$ M 思考:) E/ U R1 V. f' b& Z
转发与重定向的区别。
) n: D0 F6 W3 n- t, p, o2、表单中文问题, d3 O, z; _7 a2 K8 \+ F
step1 jsp文件,要添加0 X& I8 L( ]$ o1 ?; ?# T9 b
<%@page pageEncoding="utf-8" ' J8 [7 [! ]1 n/ s$ y) y$ Q6 K
contentType="text/html;charset=utf-8"%>
1 }8 ~/ @4 v) f! G- \+ o 表单设置method="post"。! y: C$ m8 D' L6 ^
step2 在servlet类当中,添加& d ~1 k6 n( f; ?
request.setCharacterEncoding("utf-8");
" Z! I ?: z0 U) Z% T' j 6 M5 B. T2 D% |4 z1 p! H3 P
step3 如果要访问数据库:
5 F3 i* s1 {% @5 Z a,保证数据库能够正常地保存中文。
0 |7 m7 X6 u$ S% c 对于mysql
0 [- j4 Q* Z. P create database dbname : q% O9 }1 T# Q
default character set utf8;$ e7 K- z" w& i5 v
b,使用jdbc访问数据库时,必须要保证- O9 }% Y! [4 k$ m0 s* S" d
jdbc驱动程序能够识别数据库中保存
2 ~9 c! ]( ?# } @5 \; F3 O 数据的编码。# |& S' }, |/ c# D$ Z8 D
jdbc:mysql://localhost:3306/jd1109db2?
& d! u; N5 s1 K9 f1 ~& U useUnicode=true&characterEncoding=utf82 R5 L- n2 d; j
6 X) ^1 u7 [ v* G6 e
3、路径问题( ]8 r6 j* w3 O0 c, w5 ~) C
链接地址、表单提交、重定向、转发的路径应该- P) {1 \2 M" B1 ^3 f3 ~7 h7 z S
如何写?3 W6 r/ g0 ]4 {) A( H
<a href=""></a>
" }$ D, H9 w5 `; ~7 k: l/ D0 l <form action="">
" a4 C2 a% O6 b2 A* [' Z( ^ response.sendRedirect("");
* ` M. g6 @; g( Y9 \7 K getRequestDispatcher("");
2 Q3 j5 j7 M4 w* L" [. V% g2 a1 y a,相对路径与绝对路径. x6 i s j0 k' {
相对路径:不以"/"开头的路径,比如:
; C, p$ p' q6 P. Z( d) G$ W <a href="del.do"></a>- _9 G% s& a) f4 R3 w q f
绝对路径: 以"/"开头的路径,比如:& n* B8 a- l+ m: M3 ]; a2 g
<a href="/appname/del.do"></a>
' T: E9 Z2 d$ H b,怎样写绝对路径?$ E9 ]3 l: {9 x* a1 \
链接、表单提交、重定向,绝对路径要从5 O2 y+ f7 d. V G, F: x
应用名开始写。* Q: a% c! m8 I
转发要从应用名之后开始写。/ i* k, m% ~) b: I" }' n2 `, B
//返回应用名,比如返回"/web05";1 x2 P6 B9 j7 @7 i1 X
String request.getContextPath();) ?9 o) U8 V5 ?0 A( T, [1 ~* E1 q
% I& d2 A6 n7 A3 O: i2 D) X( F |
|