该用户从未签到
|
1、转发7 f) n2 J' J- o5 A ~; q
1)什么是转发?% j. P: f' @5 V, z
一个web组件(jsp/servlet)将未完成的处理
+ b. ?8 r0 @3 k/ H$ L( M( g 转交给另一个web组件继续处理。转发的各个组, J) S8 G) I! Y* x. k
件会共享request和response对象。, P& ^( l ^4 E4 l. [( a Z
2)如何转发?: U1 {; _! o; ~3 n n8 d/ K- q% E
step1 先绑订数据* z" n# z4 N: }$ K
request.setAttribute(String name,
# o3 m& N9 N' [$ K3 M- z ]9 C Object obj);# r- x* \* `' Y
跟绑订相关的另外两个方法: F" T6 Z ^& M. Y6 W% n7 Y' L
//如果name对应的值不存在,返回null。
9 }; a. S5 T3 A8 Q Object request.getAttribute(String name);
" G& l) u9 _' c: f# Z. n: t$ { request.removeAttribute(String name);' @, f, d" `9 l- V
step2 获得转发器,转发。
% [4 N/ _& M$ I5 X, P% m P RequestDispatcher rd =
+ b9 j5 I! N5 V$ |$ ?( H* X& Z, Y request.getRequestDispatcher(String uri);
' x% @& l3 g; I6 p rd.forward(request,response);
# [# _( u; u5 c7 n3 s 3)编程中要注意的问题. Y; |. Z8 D+ K& ?; x# v
转发之前,不能够执行out.close或者out.flush。
% n6 A- k6 S% M) t8 o 转发之前,会将response中缓存的数据先清空。 4 l4 t) n2 u; h& d2 l3 B5 ?9 p( {
4)转发的特点9 E7 v: e! j/ j+ B5 \4 M
a,转发的目的地只能是同一个应用内部的某个组件。
$ V0 u$ A; Z8 {8 r1 }5 |1 H8 ^ b,转发之后,浏览器地址栏的地址没有变化。
+ q. }/ W: |* ^4 o' Z' c3 u c,转发所涉及的各个组件可以共享同一个request,8 K+ }, w G- U/ t2 @
response对象。
# c1 B% W5 g n, M 思考:9 W' `' E) k% k* e! O. m
转发与重定向的区别。
( w+ D$ c |& ~2、表单中文问题3 D) ?( f% y) _/ Y* e+ P s- `
step1 jsp文件,要添加
% d4 n% h. Z! R4 O' N r3 ?' O <%@page pageEncoding="utf-8"
6 w, E+ X- p1 o" e- z* N contentType="text/html;charset=utf-8"%>
) o( ^8 h8 n9 T% i" k% P0 y. f 表单设置method="post"。
5 B" `7 I% d- u4 B step2 在servlet类当中,添加
' ~8 S4 s1 ^0 J. |/ K request.setCharacterEncoding("utf-8");
2 R+ ?: V& w. M( u1 M3 n
7 S, e: o: z" a step3 如果要访问数据库:
+ B1 L0 P3 H! q: }2 c( R& d" _, r4 _ a,保证数据库能够正常地保存中文。8 [ ]1 I2 B; Z8 M0 _
对于mysql( k5 I! b$ L' d$ j
create database dbname
. S% I9 a$ ^6 ?3 y default character set utf8;
W) f5 ~8 L7 m7 w5 h7 c b,使用jdbc访问数据库时,必须要保证; r q+ a4 H. g/ t( `2 U
jdbc驱动程序能够识别数据库中保存8 D. H2 L8 U2 s: T% h- L! w
数据的编码。
7 T |9 L) f' ?, E' O s6 E2 @. y jdbc:mysql://localhost:3306/jd1109db2?6 u0 b1 ]( @% v* g, n
useUnicode=true&characterEncoding=utf8# _+ J; K7 k% `8 y& `+ v `
3、路径问题
; H! s, ~$ `5 j6 q3 ~) G 链接地址、表单提交、重定向、转发的路径应该0 N4 K: S% d' b# f+ R& v
如何写?+ d( d: U( n, F7 j; l7 B
<a href=""></a>
J1 s y& S& V; b% ] <form action=""> C- v- Z$ t. m4 S/ t5 D4 {; Z
response.sendRedirect("");
. g+ G* k! I- y3 }. I6 v0 P: ? getRequestDispatcher("");# f6 f0 z! b6 |8 ?; X, ], s
a,相对路径与绝对路径
: ^ p) b3 O+ |8 d# s3 j 相对路径:不以"/"开头的路径,比如:+ |( K' f; O6 M5 _
<a href="del.do"></a>
9 O* J3 `3 N2 {1 \ 绝对路径: 以"/"开头的路径,比如:, u3 W2 n7 S( D! g/ d0 |2 ^
<a href="/appname/del.do"></a>
0 Q) B: b! k/ S: p! Z b,怎样写绝对路径?2 F( [% j, x8 ~
链接、表单提交、重定向,绝对路径要从, A* g! C8 y) P0 n" i
应用名开始写。
1 M! ]% a6 w& k! [$ @ 转发要从应用名之后开始写。* E; O' l: M$ K3 G% C
//返回应用名,比如返回"/web05";" m/ K; M, ?+ Q% @+ v
String request.getContextPath();* ?4 _3 S7 H2 ]# S9 B& y" [" f
|
|