|
该用户从未签到
|
1、转发/ P9 `% E- [. G; [& S( D; U
1)什么是转发?& V' Y) ~: U: b2 F! _) Y
一个web组件(jsp/servlet)将未完成的处理/ H9 ]! O6 u3 O' ^% O: }* ^/ j
转交给另一个web组件继续处理。转发的各个组
" ?$ ^0 X1 {4 ]4 a" B 件会共享request和response对象。7 |2 u( E2 |9 a0 X
2)如何转发?3 [1 _' @8 W [2 j
step1 先绑订数据
9 C) N/ q3 P w. ^' G9 g( r request.setAttribute(String name,# E& f! K+ H' ~1 Y2 l
Object obj);
$ ]. ^+ c% H8 N! [ 跟绑订相关的另外两个方法
1 j" M; ~# I* d7 _: }0 r //如果name对应的值不存在,返回null。4 y/ g% n6 l0 ~3 c( d, R
Object request.getAttribute(String name);
" K6 t% K e8 k, r request.removeAttribute(String name);8 L: R/ V. p( }, L# t
step2 获得转发器,转发。
1 J, n, N: L) F RequestDispatcher rd = 9 ~+ g* a4 _& v1 b. x/ G
request.getRequestDispatcher(String uri);% o, p; e$ `2 L5 G
rd.forward(request,response);! i. R! D; J9 N
3)编程中要注意的问题0 l5 [" e8 j* z& I* [
转发之前,不能够执行out.close或者out.flush。
8 k* K0 C+ Y0 u8 X2 u 转发之前,会将response中缓存的数据先清空。
# z- F2 b2 X& _! V 4)转发的特点
9 K$ d+ G* N5 q a,转发的目的地只能是同一个应用内部的某个组件。' {6 A. {7 k( y9 x9 S E
b,转发之后,浏览器地址栏的地址没有变化。
+ y4 v5 H! o! B+ O% Q, l% K c,转发所涉及的各个组件可以共享同一个request,, `3 ?# {( z$ v/ Y/ i. q
response对象。 f7 I& K' S7 d0 C
思考:
) E' H( g) r; P, m 转发与重定向的区别。4 H8 M/ r J) F% K" [( _" u9 r
2、表单中文问题
7 Q& ~# I4 q! ]$ `' F- g step1 jsp文件,要添加
4 K- R+ Z1 l4 K0 O; d <%@page pageEncoding="utf-8"
2 s7 \( y3 F# r( q& h5 H contentType="text/html;charset=utf-8"%>$ _4 K0 k" [3 ?: ? S: T8 R6 F$ V
表单设置method="post"。! G* L2 N% `+ J7 x' U
step2 在servlet类当中,添加
0 O! R0 t2 X+ p request.setCharacterEncoding("utf-8");4 Q( M* K! m3 C# _4 _- Y
. G: \( `1 S9 K: B# N; H; k: U+ ~ step3 如果要访问数据库:5 r+ L! @: B+ D7 G7 R) y% d
a,保证数据库能够正常地保存中文。$ l0 D7 J, g5 X, ?; ?
对于mysql
8 y2 \4 l( u: t+ L( S! x( ? create database dbname : I& K" m3 {/ v( B
default character set utf8;
# c9 h. I0 {3 P' R" H0 R0 G b,使用jdbc访问数据库时,必须要保证. W* a9 B C! }2 D
jdbc驱动程序能够识别数据库中保存7 v; t G) ?! w2 l1 q, s
数据的编码。6 e, p# r7 G9 `# s/ Z
jdbc:mysql://localhost:3306/jd1109db2?0 u/ a% J" [ b5 y$ ]" \% V
useUnicode=true&characterEncoding=utf8% a6 V% ^8 p5 O' X& ~' l' U
3、路径问题4 B3 f8 Q+ T6 Q( B$ |9 e
链接地址、表单提交、重定向、转发的路径应该/ Y' b4 f' D/ D3 O3 ~( q% R
如何写?* l4 \% ~9 `+ b7 f$ m" ]
<a href=""></a>6 @6 R, t B1 ^, I
<form action="">5 H9 l0 j# `5 d7 Y# d
response.sendRedirect(""); i3 {" C# W8 K- k0 n% M
getRequestDispatcher("");
$ {7 t A+ A! K& g a,相对路径与绝对路径8 G+ A/ q2 `7 k, B1 f
相对路径:不以"/"开头的路径,比如:: g/ Z2 q8 ~2 ~' { v5 \
<a href="del.do"></a>, p( \+ j4 `) H- S7 f4 X! ~
绝对路径: 以"/"开头的路径,比如:$ D% j! }6 t- I3 z; ^4 |
<a href="/appname/del.do"></a>' D" A; \, f: v
b,怎样写绝对路径?: v6 I6 P2 x! P! U
链接、表单提交、重定向,绝对路径要从 p, m9 A% q9 c& e
应用名开始写。
H( Y4 n9 {8 x4 r/ E3 N: a3 t6 T) d 转发要从应用名之后开始写。/ Q* g! F5 R" [, l
//返回应用名,比如返回"/web05";
; w2 f; s6 P! a! I String request.getContextPath();
) U3 B5 |2 ?7 w |
|