|
该用户从未签到
|
java server page(java服务器端页面技术)。
) y# o7 M- [: x( Y% p! O 是sun公司制订的一种服务器端动态页面生成技术的
, h( U- ~; n7 w! h3 A# }规范。3 k6 W' ~( u5 f
因为直接使用servlet生成页面,如果页面比较复杂,
! V( j( N, x `( L' ~则代码过于繁琐,并且难以维护。所以,对于比较复杂' i& P! |# O! B: `+ L# M Y
的页面,使用jsp来编写,更容易编写和维护。6 H u9 u/ u$ [4 k
2)如何写一个jsp文件。
+ C3 n# d: h" _0 }6 a 写一个以.jsp为后缀的文件,然后,在该文件当中,9 W9 V) @8 g- x
添加html和java代码。编写完成之后,不需要编译,当
6 N" _, Q+ _& s客户端请求访问某个.jsp文件,则服务器会自动将, Q$ E+ S% @( S" r) {/ T% V
.jsp文件转换成一个.java文件(该.java文件其实是一个
8 I! S* ]8 g7 I" Rservlet)。
4 j; O2 X' [ e 3)jsp文件的组成+ M/ g+ c' ]; m
a,html(包括css,javascript):
u4 y8 Y# G) Y 直接写在.jsp文件里即可。3 e( a4 i2 A4 l* X7 S
b,java代码:
8 E( b& }2 f( i$ t4 w: p2 i$ K. g- g2 u 第一种形式 java代码片断 J- A8 u8 E3 o& \+ a( X0 x% h" E
语法:2 |$ ?, J- i- ~3 @. w* y. C1 ^8 S
<% java代码 %>% c5 ?$ M, t. x, \$ c: b
第二种形式 jsp表达式
6 r2 P4 j; K1 ^, S' j5 \* W 语法:
( `# ~8 j& m. E1 V( A <%= java表达式%>
& M$ O) y) X! f) N7 Z# o c,指令:& O& g; P. o/ y. ?0 D7 k
所谓指令,就是告诉jsp引擎(容器当中,负责
* u" \# I2 o3 n 将.jsp文件转换成.java文件,并在运行时,
1 W' K8 `) W- d, v 为jsp提供一些 辅助支持的模块),在将.jsp
# w* p9 Q6 l s, c1 E3 Z3 Y 文件转换成.java文件时,做一些额外的处理。
9 `! k. m# U, v$ U- E 语法:
& v; R1 u6 k8 Z6 |- B7 Z1 @ <%@ 指令名 属性名=属性值%>. \7 h- Z9 ]8 y4 V0 g M, L7 G) d/ ]
page指令5 a' K* q* h& _$ w' c
import属性:用于导包。
/ Q. _0 ~5 E- k: W 比如, U) c& b/ F8 Z9 S+ t8 c; p
<%@page import="java.util.*,java.text.*"%>
3 {4 f% M9 O+ i' n- v, E' p6 P9 r contentType属性:等价于3 H' R% z/ y$ p; p; Z
response.setContentType();
. P9 k; c$ N8 @$ x# z2 w pageEncoding属性:告诉jsp引擎,.jsp文件6 v* d) z) ` b6 j) {6 c- `, F
保存时的编码。
9 F: c4 t' x A6 P% m; Q include指令
3 L! a& K1 L# b2 w4 D4 v/ M0 Q file属性, h1 \% S2 F- q2 w8 C s
告诉jsp引擎,在将.jsp文件转换成# v# E# ^( p8 K0 o" I5 ?
.java文件时,在指令所在的位置,插入
* e. ]5 B2 B3 S; G- _ file属性所指定的文件中的内容。. q N( R, [! ?# L0 p8 o0 ~5 [ y
d,隐含对象: d& E, j4 N! ?/ H
所谓隐含对象,指的是在.jsp文件当中,不用
# k9 x9 C; c0 y' L( ?2 D J 声明和创建该对象,就可以直接使用的对象。原
4 E% d4 [1 h: h6 t7 b 因是,.jsp文件对应的.java文件当中,已经自动9 f: X$ @! h9 x) \6 D. n1 ~
生成了该对象的代码。
. O: d9 l7 _( {; j0 I( v1 b out
w+ I; d# f0 u) B$ h request
) n( L: g9 O% l+ D response& H- u. |7 M+ S
4).jsp文件如何转换成.java文件2 V5 D K) j7 g g6 [& D# k7 Q8 S2 d* i
a,html ----> 放到service()方法里,使用
. U! \; o2 ], I, C' ?. I& e out.write()输出。
+ w3 f1 Z0 z: o3 i/ W, C b,java代码片断 -> 放到service()方法里,照搬。6 v2 E. _5 w) b* G& t' `
c,jsp表达式 ----> 放到service()方法里,使用* p/ j/ m3 T- R8 w. Z- l
out.print()输出。
) O7 z+ R" ~! _4 R9 K: H! W % ~; U8 l3 |3 q" z
: R- U2 |9 s1 e+ }5 Q; U) ?. R
1、转发
, N, V1 i9 H6 p8 | 1)什么是转发?/ \* E5 q' j0 j5 n, P' i
一个web组件(jsp/servlet)将未完成的处理
2 F, B; ?8 r0 k, l. N( N 转交给另一个web组件继续处理。转发的各个组
( O; L7 \8 ]5 X9 j* Y 件会共享request和response对象。7 S$ u1 J, n/ R. c0 f# k
2)如何转发?
8 Y, j, r6 O: F, ` step1 先绑订数据2 |, @# E$ c* N, [
request.setAttribute(String name,. T& B% G& Q: P- Q. T
Object obj);* i E! I8 O. H5 B( U9 m2 w
跟绑订相关的另外两个方法
+ L) o8 v5 }; q$ L; f //如果name对应的值不存在,返回null。
6 c- S5 q9 M0 w2 h1 X* `3 R Object request.getAttribute(String name);
. D8 A0 F1 _2 k( n' @& Y( Y request.removeAttribute(String name);
/ ^4 N8 }6 J" O step2 获得转发器,转发。8 D9 Q7 G2 h6 y: P
RequestDispatcher rd =
* K/ v4 @/ G/ u! S request.getRequestDispatcher(String uri);6 q7 K, r( G0 }' ^/ M
rd.forward(request,response);( |; {( P1 N- Y- J$ l6 p, D# Y9 d
3)编程中要注意的问题
: s+ i: u- J7 y* S( o' ] 转发之前,不能够执行out.close或者out.flush。 r' U W& J5 J6 P% a
转发之前,会将response中缓存的数据先清空。 0 J5 F$ e1 e; m; T2 H( Z
4)转发的特点! U# w, n3 e# C: t
a,转发的目的地只能是同一个应用内部的某个组件。: C. w& ~: e% _ ?
b,转发之后,浏览器地址栏的地址没有变化。
4 n/ g \6 }$ X* v c,转发所涉及的各个组件可以共享同一个request,9 O+ i/ l0 l' J& |3 L$ x. F/ k
response对象。6 ^. A1 [6 P7 l- x- {
思考:. ~( b) q1 f( o( |' |
转发与重定向的区别。6 U+ `5 A5 w1 B$ ? d( m; Y( {
2、表单中文问题/ ^; h2 u+ m- s) E* `8 O2 Q
step1 jsp文件,要添加
1 g; x6 z" l0 _ <%@page pageEncoding="utf-8"
1 W* f# ~1 F+ n' k contentType="text/html;charset=utf-8"%>
7 ]" N# A8 G6 ?" A) p/ S( _! X+ o 表单设置method="post"。
8 r7 m' }8 a$ h: S; g6 L step2 在servlet类当中,添加' y. x E* i9 o* u4 t1 {0 {, B5 A
request.setCharacterEncoding("utf-8");
2 ^: m' R/ X0 p4 b1 C " z. G) j, r8 X0 b r
step3 如果要访问数据库:
9 N9 x2 Y9 l/ B; C7 H, U a,保证数据库能够正常地保存中文。1 J" T. y" I* V
对于mysql
w" J1 a; o+ P! J: s: A create database dbname
( R5 m7 X' O& g default character set utf8;4 r- C" B) J: w: h0 [
b,使用jdbc访问数据库时,必须要保证
" m' d; q2 A& U. m0 x5 p5 e jdbc驱动程序能够识别数据库中保存4 x, H2 M; a4 ^7 e
数据的编码。
% q l4 P! [$ ] x* a9 ] jdbc:mysql://localhost:3306/jd1109db2?% X7 G+ X* z' H! e8 `$ |4 V
useUnicode=true&characterEncoding=utf8
% j9 B* z& y) K' }2 ?5 U
. q/ Q& ?% \% \3、路径问题, W, R- T Q/ |/ ~0 U
链接地址、表单提交、重定向、转发的路径应该
5 G n+ R; w5 r. T如何写?
+ |- j4 N( M+ G+ P# a7 U$ Y9 [: b <a href=""></a>) |! R2 s7 R/ E( P" M3 s
<form action="">
( \! y" M, P- X) \2 Z1 ?4 q# g response.sendRedirect("");
, a0 {# t$ _7 O! Y0 r getRequestDispatcher("");( N/ L5 @( q' o
a,相对路径与绝对路径& P# C% [& S+ W+ g. C( C) O
相对路径:不以"/"开头的路径,比如:+ v4 t# M8 T1 S% u; l
<a href="del.do"></a>" x9 M; T9 n; n6 X6 [
绝对路径: 以"/"开头的路径,比如:
# [. S; Y0 k8 o2 E. A <a href="/appname/del.do"></a>! K U5 g* l9 }/ T
b,怎样写绝对路径?. K+ V) ?) c5 u2 u7 O; A
链接、表单提交、重定向,绝对路径要从% T7 T+ L, M( _
应用名开始写。+ X [& i& p" O4 _
转发要从应用名之后开始写。
. q4 H# [& C7 P7 E1 v- M$ U9 {: A //返回应用名,比如返回"/web05"; B7 H# u' [7 `
String request.getContextPath();
% X9 K2 C) Q9 M. Q
; I/ {9 X0 i- c- k: `! t! n* }! D |
|