该用户从未签到
|
java server page(java服务器端页面技术)。
: w( O6 H v' `% O6 L5 ~ 是sun公司制订的一种服务器端动态页面生成技术的 \& u7 N% `8 S' m8 v+ Y* u
规范。
. g# q' a* q' a) @6 h% G+ J 因为直接使用servlet生成页面,如果页面比较复杂,, |$ m ?; y* _2 D; H# J. e+ F
则代码过于繁琐,并且难以维护。所以,对于比较复杂% T6 N4 c6 T9 i8 `
的页面,使用jsp来编写,更容易编写和维护。
& l5 `; p1 L9 E+ A 2)如何写一个jsp文件。
3 P6 J% K% K* b2 ^/ P1 ? 写一个以.jsp为后缀的文件,然后,在该文件当中,
A1 I* T! p% M' H4 A6 ]添加html和java代码。编写完成之后,不需要编译,当* f" M/ F# ~. b- u, v$ x
客户端请求访问某个.jsp文件,则服务器会自动将/ [/ \. U# I6 P
.jsp文件转换成一个.java文件(该.java文件其实是一个
/ R/ y5 |/ B' X2 E3 _& mservlet)。
" s+ s6 b* ?6 I! W5 c 3)jsp文件的组成* i8 r/ X' K; U' v' D4 D0 ~3 M( ^
a,html(包括css,javascript):7 L! A8 A0 b5 u
直接写在.jsp文件里即可。/ a2 d( l9 [$ f! T% h8 c$ A9 {
b,java代码:7 t& d- F$ r! D9 Y: o% a
第一种形式 java代码片断+ e2 g- }1 J: j( t5 J
语法:; _7 {& a- ?& r6 H, t
<% java代码 %>2 b0 g7 T* W& a8 Y- |) F4 v9 g
第二种形式 jsp表达式7 ~1 i3 ^9 ^7 ^' [/ b
语法:) A/ u' r; u9 c. L$ ]. t
<%= java表达式%>- @5 @; j) L( p3 [; b
c,指令:
: W# P( C! J9 _, U- a 所谓指令,就是告诉jsp引擎(容器当中,负责# `4 Y, C: _4 v2 A! ]3 ^' J$ A
将.jsp文件转换成.java文件,并在运行时,
5 j+ v- F2 D G# L% X8 `' A5 g 为jsp提供一些 辅助支持的模块),在将.jsp
( V- u1 _. P8 R3 L3 A 文件转换成.java文件时,做一些额外的处理。
( n, f( S5 U5 t! T; X2 Q8 w 语法:$ b. B, ]: B- ~4 [+ h) p0 u
<%@ 指令名 属性名=属性值%>2 g3 B4 C6 I7 r: o7 z
page指令
' K, H- s* ]5 R- D8 ` import属性:用于导包。
) h# W8 l, W& P4 x3 l5 } 比如6 [3 ?% z% o+ c2 ^& V9 W$ o
<%@page import="java.util.*,java.text.*"%>
, H) g" _9 {4 z9 i contentType属性:等价于
" O4 S* u& {- ^7 y. ~ response.setContentType();
9 g8 ~2 f( ~' J8 [! X; p* ^" Q$ D pageEncoding属性:告诉jsp引擎,.jsp文件# `. S- O) t; m
保存时的编码。 I- G. o( `7 f7 f$ t4 i: U# M- Z
include指令
9 j2 q- N5 ?5 W5 `" m file属性# ^2 c* h+ C3 Q
告诉jsp引擎,在将.jsp文件转换成0 N5 E" y; t8 f/ O. X: ^# m! G* n
.java文件时,在指令所在的位置,插入
8 U7 z+ ^( s) j& c1 n+ l, x* `$ o file属性所指定的文件中的内容。
# b$ `) b* j5 H d,隐含对象7 x/ f2 X2 D% C
所谓隐含对象,指的是在.jsp文件当中,不用+ x% ^8 u+ \7 b! C( F
声明和创建该对象,就可以直接使用的对象。原- G8 b% C; v7 M8 H" U. n
因是,.jsp文件对应的.java文件当中,已经自动, Y$ a4 r* Q. i
生成了该对象的代码。
5 H) R, {3 V7 F: K" ?$ ^ out
3 A4 M( g3 M$ B4 r; W* Z request1 p) }+ J/ @+ [! Z* l
response7 O' l0 D- n1 `, T/ z+ E
4).jsp文件如何转换成.java文件
7 k% B' i0 x/ x8 J: i a,html ----> 放到service()方法里,使用* `2 ]" @! h9 C1 |3 u6 G( a
out.write()输出。6 @% n5 C# f5 B, n; m# q# Z
b,java代码片断 -> 放到service()方法里,照搬。% l" [& m. P: m8 X; |, L/ G( H
c,jsp表达式 ----> 放到service()方法里,使用
! y/ F/ S( V, p; R# Y' X out.print()输出。/ |5 M. z( `; [, t/ @- h
/ L5 @8 N7 A9 [- _
/ u# V% C1 d) M7 N/ e/ r6 ]1 G1、转发: h7 ^- O" O' W9 X) _
1)什么是转发?
3 s( D$ X# _& x/ D; r 一个web组件(jsp/servlet)将未完成的处理% ]# r8 y: w0 N6 g$ S0 ~
转交给另一个web组件继续处理。转发的各个组
# x7 ~+ }- m7 f, f3 ^7 f8 U* N( z 件会共享request和response对象。
: W3 K/ b ?* F9 r7 k9 z 2)如何转发?: g4 o, M- L9 e, w2 i) f9 g& ]
step1 先绑订数据& e2 o: `$ j" G" r3 U1 q) l2 X% ]
request.setAttribute(String name,0 [% L! ^" d; b H! m
Object obj);# Z# \6 ^* ~" S0 t1 `
跟绑订相关的另外两个方法
. e x" G/ Y: _ //如果name对应的值不存在,返回null。
3 L6 B; e) f+ ? Object request.getAttribute(String name);
" u ^$ A. B; |3 w+ e request.removeAttribute(String name);
0 W; Z3 E& c* ~8 h. H step2 获得转发器,转发。
2 P! M0 ^' t$ \8 t: R6 T& N RequestDispatcher rd =
5 Q0 ~: Q! D% i$ Q7 W request.getRequestDispatcher(String uri);
, r: @0 `& h+ } rd.forward(request,response);
$ w% R' m M" _2 j$ W d, | 3)编程中要注意的问题
! K' }+ m1 U2 C2 I 转发之前,不能够执行out.close或者out.flush。
, ~0 u4 g7 A3 S- @9 i, P) B/ o 转发之前,会将response中缓存的数据先清空。
8 a y& O; l$ {. J/ ] 4)转发的特点
' ~6 O r) A$ N7 Y' T a,转发的目的地只能是同一个应用内部的某个组件。! M* T5 e( T0 x$ A
b,转发之后,浏览器地址栏的地址没有变化。
- c- Z. B9 d1 @( l0 L9 W c,转发所涉及的各个组件可以共享同一个request, v7 f9 n# H) N* ]
response对象。+ Q+ x' r! Z8 k0 E$ h* N
思考:" T; x9 F0 |5 v& q. l" z* w
转发与重定向的区别。$ E# o9 i. }9 ~% ]3 c
2、表单中文问题" ]3 p+ `* ~" d0 b0 |( v
step1 jsp文件,要添加4 g2 b, E# C! s) a' W
<%@page pageEncoding="utf-8" + _! G/ B' y; [" [
contentType="text/html;charset=utf-8"%>7 Q4 B& U$ u# R: j- ]4 Y
表单设置method="post"。8 D1 I+ y+ F2 P4 a$ v6 L
step2 在servlet类当中,添加/ B' ~$ A/ l- D3 d
request.setCharacterEncoding("utf-8");
+ s5 Y. J s. [1 U6 B
6 s) Z; F/ {( e" {; O( i step3 如果要访问数据库:
( R3 S: S+ W2 k& ?) c% J0 ` a,保证数据库能够正常地保存中文。, _& W) {% I% Q( B* z
对于mysql
3 d) i& |' u& A2 \" r: Q create database dbname
6 o; K& z6 \6 `9 m default character set utf8; p3 t Z5 j5 ^* I
b,使用jdbc访问数据库时,必须要保证, X9 }4 ^. t- B# R4 q) _6 W
jdbc驱动程序能够识别数据库中保存; ]' |: c \! f/ d8 h( K3 x
数据的编码。
- m) e0 X' Y; X. M$ _6 v& { jdbc:mysql://localhost:3306/jd1109db2?
# ?; q# a6 @$ \9 z useUnicode=true&characterEncoding=utf8% R: M6 q/ R7 i$ Q" |
9 e9 }0 V7 z- R) c3 V% k2 z( l3、路径问题5 L% n- ~5 G& ^! N' L/ f
链接地址、表单提交、重定向、转发的路径应该0 |5 t: p- g6 q! \+ r' z; E
如何写?) A) ^; N# A4 z7 [/ q1 Y
<a href=""></a>
" S6 h- P! s/ u. C u <form action="">: |0 r2 h0 f6 e! c
response.sendRedirect("");
: d4 V+ \& v5 U( s% f3 n# z getRequestDispatcher("");2 _" h6 [6 E! g9 c( ?! y
a,相对路径与绝对路径
- w7 m; c2 i9 I- M! d 相对路径:不以"/"开头的路径,比如:
: m- m y2 j( Q9 O* b) ? <a href="del.do"></a>( h: B3 A% a" U+ h9 P4 A$ @
绝对路径: 以"/"开头的路径,比如:
% D; V+ F; C9 m <a href="/appname/del.do"></a>
/ `+ Z9 w' a0 i: t7 B b,怎样写绝对路径?. S j( j3 A+ j: r4 u4 g- h+ l1 K
链接、表单提交、重定向,绝对路径要从- g- Z( `. `* T/ t6 \3 c
应用名开始写。4 {3 D4 O5 U2 T* t
转发要从应用名之后开始写。' F8 h6 Y$ H9 @; b% c" r2 x$ v) z/ B
//返回应用名,比如返回"/web05";1 r& W0 n. I7 _ o4 O
String request.getContextPath();6 ]5 d- r; j3 r L# X
7 I& X2 B; S# H3 G5 L. ~ |
|