该用户从未签到
|
1、转发
! [: L% [+ K! S- d/ n 1)什么是转发?
8 A# X6 I5 V6 I, h% {+ K 一个web组件(jsp/servlet)将未完成的处理
$ F: Y( j4 _3 `& X* z6 F0 m 转交给另一个web组件继续处理。转发的各个组
1 m) `+ G+ h4 g& r 件会共享request和response对象。
8 v4 s8 H6 d7 i# W7 Y* Z 2)如何转发?4 Q& q( J8 q# c- w4 {) M7 d7 I; u
step1 先绑订数据
) C3 D8 E2 f8 d/ t' f4 W request.setAttribute(String name,
M+ l5 C. D: D; H7 j) m Object obj);" e7 S7 n: f" J
跟绑订相关的另外两个方法
3 [5 Y* ]# o4 {. W1 \ //如果name对应的值不存在,返回null。* x6 c6 T, \' K
Object request.getAttribute(String name);+ x6 g% k1 @" h9 ^2 A0 m7 K* k
request.removeAttribute(String name);; E4 Q0 [* g0 z6 N( S
step2 获得转发器,转发。8 z6 {& K& D% Q6 y8 b' B3 d1 ?
RequestDispatcher rd =
! T* K: X# q$ u' ` request.getRequestDispatcher(String uri);% d0 b! f4 H- p% d. r
rd.forward(request,response);
$ I' M& C. s/ x$ v: M 3)编程中要注意的问题 R/ S! S- ?" E
转发之前,不能够执行out.close或者out.flush。
5 S5 J" `5 x! Q 转发之前,会将response中缓存的数据先清空。
2 O4 h: \* s1 V. b 4)转发的特点/ n, J5 Y' h/ i8 x
a,转发的目的地只能是同一个应用内部的某个组件。
+ g3 W# K5 @) H b,转发之后,浏览器地址栏的地址没有变化。
8 H0 j( X1 h* t% E+ G" W c,转发所涉及的各个组件可以共享同一个request,
/ ?' T- L% e2 ?5 d7 ?2 [ response对象。3 K J6 @- h+ ^ V1 Z: P
思考:, @( s9 x* A1 n4 L
转发与重定向的区别。
& R$ r) b8 W, V4 s2、表单中文问题- m4 K5 H$ L5 ]- Z/ e( W
step1 jsp文件,要添加
/ o4 B# _; a) e% s% V <%@page pageEncoding="utf-8"
% {; l- T2 F: N8 U contentType="text/html;charset=utf-8"%>! q% M! d& n& i/ X
表单设置method="post"。" M) t: N, g- u3 S
step2 在servlet类当中,添加) ^' [, I5 p' J8 _9 C: z; e" l
request.setCharacterEncoding("utf-8");
* s; n, L7 a5 A+ O ( t7 j2 E; I7 ^- g: G/ D
step3 如果要访问数据库:% z I u& C% {# @& P
a,保证数据库能够正常地保存中文。
' F) a, B: g/ L& j1 ]1 y 对于mysql
! K; E9 F( J: b, U create database dbname ) O; r7 B) H2 J: \
default character set utf8;
+ J: X3 L) Q8 ?- i6 J b,使用jdbc访问数据库时,必须要保证7 N8 ^" j0 L8 R7 _* @
jdbc驱动程序能够识别数据库中保存
5 Y% ]/ y( d7 i) S 数据的编码。. M9 q; S0 M. q* A- N2 d
jdbc:mysql://localhost:3306/jd1109db2?
, ]' m. N: t+ r# h' C useUnicode=true&characterEncoding=utf80 ^ x! e; z5 u( m' {& S8 G; B9 Q
3、路径问题
" m; M% t) }# k! C 链接地址、表单提交、重定向、转发的路径应该4 Z E4 u+ O. Y
如何写?
6 ^2 r* n1 | r% [ D <a href=""></a>
5 @" ~) ?' `1 }& B <form action="">5 Q; B6 @- J+ M% X9 N/ v9 L9 e: a
response.sendRedirect("");& N8 y+ p+ b* q# l6 Q
getRequestDispatcher("");
; ~: Z+ Q. m1 j) s! P7 @+ U" l a,相对路径与绝对路径
4 [$ Z. p) i" n$ o3 i9 E0 A& T 相对路径:不以"/"开头的路径,比如:; a4 u# Y2 q$ s% i6 ?7 k
<a href="del.do"></a>. f5 f2 W# X! k q- m
绝对路径: 以"/"开头的路径,比如:$ G8 [0 d- q1 l4 b5 A! R9 c) W
<a href="/appname/del.do"></a>
$ s y" B- [8 a; L7 r b,怎样写绝对路径?4 A/ ^* P: y- Z+ v: V1 f7 R I4 I2 q( c
链接、表单提交、重定向,绝对路径要从
m) k: F' L/ @8 F6 ~9 h2 R5 [ w' X 应用名开始写。' X' y0 X2 A) K8 v6 i
转发要从应用名之后开始写。 b* e7 ?" k; G3 [, J! ^
//返回应用名,比如返回"/web05";
8 c, O8 D1 V, h/ Z String request.getContextPath();
: q( |. {8 ^9 x# ~, x3 M |
|