|
该用户从未签到
|
java server page(java服务器端页面技术)。+ [+ Y# P- }3 Y' s: P
是sun公司制订的一种服务器端动态页面生成技术的
# x+ ~5 _- P- m; U规范。+ I) c3 w7 x3 H1 \ U
因为直接使用servlet生成页面,如果页面比较复杂,' D/ W6 N6 I O" D6 k1 Z6 z4 v
则代码过于繁琐,并且难以维护。所以,对于比较复杂) t. e i1 \- ~7 K9 I
的页面,使用jsp来编写,更容易编写和维护。4 I. F6 e m; ^( z; X+ ]$ M
2)如何写一个jsp文件。
! ^+ R& {; R3 V% o* o( E* y 写一个以.jsp为后缀的文件,然后,在该文件当中,3 |! Z h3 z$ H% M. I
添加html和java代码。编写完成之后,不需要编译,当
3 n& m- {* V8 B- S+ G+ ?客户端请求访问某个.jsp文件,则服务器会自动将
1 z/ Z7 |$ N6 H1 j( s.jsp文件转换成一个.java文件(该.java文件其实是一个% C0 f7 z% d$ e" ~7 t
servlet)。
5 }* B! @/ n! F; O; g7 n 3)jsp文件的组成3 F1 D0 r5 `$ }- Z+ V( |7 n+ j
a,html(包括css,javascript):
- I4 F3 a. d9 z: f# _) j: f3 V 直接写在.jsp文件里即可。! k# L& y& U' w, b1 T; F
b,java代码: g3 R3 ^& w- _
第一种形式 java代码片断% {0 z q$ |/ B* _! o n2 D
语法:
2 b, o7 Z, I& a <% java代码 %>, I/ ~% h/ l% F: L
第二种形式 jsp表达式
5 h8 u4 @1 k J* @9 l+ P 语法:. K0 |% h) s: G7 K* E1 x6 P3 ]
<%= java表达式%>% k* D$ U) J1 ~2 V. K
c,指令:. B" [! I0 U8 ~" j: W1 L9 a8 t2 j
所谓指令,就是告诉jsp引擎(容器当中,负责( x. z3 l* l0 @# y, K3 n( U
将.jsp文件转换成.java文件,并在运行时,, ?- J# d( w9 z% Z6 N
为jsp提供一些 辅助支持的模块),在将.jsp6 R2 s4 s& ?" \2 ]6 h
文件转换成.java文件时,做一些额外的处理。
! j2 O5 k) \. X! X& n 语法:. u0 b* e% g9 c; W5 w
<%@ 指令名 属性名=属性值%>
. `$ N- c( _+ Y2 m page指令5 K8 p- j* w4 a5 m
import属性:用于导包。+ ~# U3 X- V, Y( b
比如
! _$ d7 {1 j" f5 p/ K" D9 o% [ <%@page import="java.util.*,java.text.*"%>
. _; d; I! t/ d4 ~+ }( y- x contentType属性:等价于0 {- q9 _& Q4 T: ]: X
response.setContentType();! f/ {' f& H' ~! z( u1 K
pageEncoding属性:告诉jsp引擎,.jsp文件
/ r9 B, r3 r" n& X% e4 F3 b 保存时的编码。
3 z# K& J: l1 E/ Q; ^7 r" h1 x3 z$ R include指令1 F# U, k2 _' |) O. }1 r; h
file属性
4 M/ U8 E0 |5 d! x1 c$ v' D 告诉jsp引擎,在将.jsp文件转换成1 B" F5 |, J" k$ j
.java文件时,在指令所在的位置,插入! h* n5 \0 t4 E2 h; F
file属性所指定的文件中的内容。
/ O) f) y7 x7 o7 o d,隐含对象
; J( x2 Q1 D4 {) U$ g 所谓隐含对象,指的是在.jsp文件当中,不用
, O& `' X' ~' l6 @ 声明和创建该对象,就可以直接使用的对象。原0 }' o& Z7 R7 x) p. t1 s
因是,.jsp文件对应的.java文件当中,已经自动. v5 ]; p `; I" j0 ?* C w4 w
生成了该对象的代码。8 x9 f: O( {0 w/ _4 B( C
out
2 K% G' n0 S3 { request
" W ~2 c3 V; n3 H- y; g6 @$ t response
1 @% w0 J4 j1 y) K+ N 4).jsp文件如何转换成.java文件
0 |' T1 H3 N; y4 R a,html ----> 放到service()方法里,使用6 P( t- T+ W' T' X# W
out.write()输出。9 m' Q- H, h2 `# R8 H
b,java代码片断 -> 放到service()方法里,照搬。7 X; i8 k! ^5 o$ v/ Z9 Q& C
c,jsp表达式 ----> 放到service()方法里,使用 h9 e* t3 X) ~+ a0 ~
out.print()输出。
! R$ C/ S" L; u0 \) j & `1 V# j3 |$ t# N }2 z
1 ^0 _ k' h, \9 O& }* n4 }% C2 r
1、转发
# ]2 R2 j+ Z- H2 u. y* P) z$ H 1)什么是转发?% |$ M2 R5 w& G" j, k4 j/ V
一个web组件(jsp/servlet)将未完成的处理9 T! k) f! ~ }8 A3 E
转交给另一个web组件继续处理。转发的各个组
+ f' _5 q2 P6 R. p+ U6 J) a 件会共享request和response对象。/ s% b) V" i' d& P- @. v9 ^6 s
2)如何转发?9 \2 _8 n! N* F( y5 U
step1 先绑订数据; K) R3 R7 V, q- B9 ?0 f
request.setAttribute(String name,/ ]% x/ q( x( K0 i
Object obj);
3 K+ a. L/ j% z3 ~ 跟绑订相关的另外两个方法
. d8 U- e2 [" K //如果name对应的值不存在,返回null。4 e8 o$ ^ r8 v
Object request.getAttribute(String name);8 h# M- c, z% G4 T0 p: | w. d/ p4 P
request.removeAttribute(String name);
, L& m+ B; H+ l' J; S1 G0 E step2 获得转发器,转发。3 S* {! y f) b" t; L4 V
RequestDispatcher rd = ! P, S# Q; q' i, H0 y, e2 s# t* R+ F
request.getRequestDispatcher(String uri);9 C5 o- @. F b/ c h7 I; p
rd.forward(request,response);
3 M" z# m7 a" Y! L) o: V- i 3)编程中要注意的问题
. i) h; S9 w0 f+ |/ ~ 转发之前,不能够执行out.close或者out.flush。
- Y5 u. a5 u- r 转发之前,会将response中缓存的数据先清空。 9 x2 r+ E2 ?% P+ V
4)转发的特点
9 H" U0 Q, g) D) }* h6 B& ?3 h8 F a,转发的目的地只能是同一个应用内部的某个组件。
% l e* [8 S3 I( ?; ?7 g7 t# i/ M b,转发之后,浏览器地址栏的地址没有变化。
% i9 K8 B( P) ]! J( P c,转发所涉及的各个组件可以共享同一个request,/ ?: Q# \2 q1 a! x$ J7 ]
response对象。
" e+ q( x& H+ k R0 o7 j6 B- y$ o 思考:
4 J) e6 `& D3 m( ?$ c: D: M 转发与重定向的区别。2 c6 ~1 G2 S' w
2、表单中文问题$ [+ V, c1 u+ R6 X
step1 jsp文件,要添加
" w! z$ r/ W0 @" ^1 A4 T <%@page pageEncoding="utf-8" # I" C& [$ b9 ?5 H1 U
contentType="text/html;charset=utf-8"%>
, B6 w P/ n4 O9 U1 {$ e; R/ r/ s+ L; M 表单设置method="post"。4 g+ s8 y( D. g% T# P; q3 h3 @
step2 在servlet类当中,添加& {7 \/ \. y0 a5 f* A, B2 f0 D
request.setCharacterEncoding("utf-8");5 O, L* O/ i+ [( D
% c2 L, ~* `" X' b( F/ o' X o
step3 如果要访问数据库:, ]5 _" w$ Q6 ?/ Z3 W
a,保证数据库能够正常地保存中文。( N6 g* X4 C' Y6 Q% y/ [
对于mysql) f! M1 v5 m9 |# L1 n5 F" k" h% S5 t* i
create database dbname
! ?2 ]3 m( \: |" v4 e default character set utf8;
9 [3 ]: m$ b# z( |6 ] b,使用jdbc访问数据库时,必须要保证9 @7 ]8 C, H K4 w$ C; B, Y/ X
jdbc驱动程序能够识别数据库中保存& X- B' e- n$ e' o
数据的编码。
6 J( a: ?+ n) O; j; N jdbc:mysql://localhost:3306/jd1109db2?9 l+ u9 U2 j- U7 w. p8 O2 v
useUnicode=true&characterEncoding=utf8$ ^0 O0 ]% A- L( V/ N6 h) n# b
+ |* E; f" a" ^. U9 Z/ N$ g3、路径问题
$ v4 l5 Q; D* c( y 链接地址、表单提交、重定向、转发的路径应该
; U( d( Z, b7 j0 G/ ^. z! c- {如何写?
6 [% N: C& i- ~. i6 { <a href=""></a>1 B0 C* L, `' r0 G z! y0 T- x0 l
<form action="">
; m0 m1 T r+ g response.sendRedirect("");
* |2 V- S0 h+ C" u+ ? getRequestDispatcher("");1 m0 }, X* F7 {
a,相对路径与绝对路径* z/ [0 S, ?0 @$ T. a
相对路径:不以"/"开头的路径,比如:
9 a$ n+ ?8 Z% \ @ <a href="del.do"></a>
4 Y/ H' t' e- V1 E9 R: D2 j 绝对路径: 以"/"开头的路径,比如:( u/ S: r x5 Y
<a href="/appname/del.do"></a>) R- p; Y$ N2 H/ }1 V$ z
b,怎样写绝对路径?
$ P% D, i8 n$ ~ 链接、表单提交、重定向,绝对路径要从) L% R0 u7 m8 L0 D7 ]0 z; o' m& k7 A
应用名开始写。7 G+ @, r* _; X% @
转发要从应用名之后开始写。
3 Z: g3 X# ?8 {9 F$ [9 K' V0 j, O //返回应用名,比如返回"/web05";
! B, Z4 b3 P; _) J' z' E String request.getContextPath();
9 J- R0 J6 A; f7 \
$ k9 k3 B% c; ?$ m0 A |
|