该用户从未签到
|
1、转发3 ]- S3 Y5 P% K- }- }6 c/ b
1)什么是转发?
3 B# H9 q$ |% u1 N 一个web组件(jsp/servlet)将未完成的处理
3 U& i+ e0 B- M5 N3 y8 C2 a2 F 转交给另一个web组件继续处理。转发的各个组
+ n9 O8 \2 f, e) P 件会共享request和response对象。% D/ x$ R; l. h- ~, I- t; V( r' Q2 m" Z
2)如何转发?, A1 n( l: p+ Y0 q; Y) T
step1 先绑订数据* a+ y1 I3 f5 X$ b6 ~
request.setAttribute(String name,
0 r* I4 R- e6 I- a( K. y$ y7 R; y1 ^. x' ~ Object obj);
6 S2 A( ^$ }9 q2 R 跟绑订相关的另外两个方法
6 q: N. ]. X6 |2 I1 d8 R //如果name对应的值不存在,返回null。
* i$ a) \3 ~! c4 f% k& j4 } Object request.getAttribute(String name);
& X. @2 \& l, P2 m' Y" \ request.removeAttribute(String name);
c9 Z. I3 d3 p- \: Q3 Y step2 获得转发器,转发。, g% u5 ?" H! r) w( \$ Y F6 r
RequestDispatcher rd = ' U3 B) b% |- ^$ x: X) K5 K
request.getRequestDispatcher(String uri);
! |+ e8 H! l2 D' o- K rd.forward(request,response);
) M' D5 e* |( }0 r! Q 3)编程中要注意的问题
2 f" c) \; f1 _4 r# q 转发之前,不能够执行out.close或者out.flush。; w9 U. l' F! P# n- f1 ~' q5 q
转发之前,会将response中缓存的数据先清空。
/ D' S! {1 S$ \' u5 X F 4)转发的特点
/ a1 G) ]; T8 q4 n4 S a,转发的目的地只能是同一个应用内部的某个组件。3 T) s: \: t. r1 f! H
b,转发之后,浏览器地址栏的地址没有变化。+ x$ Y' C+ ~4 P% r6 {
c,转发所涉及的各个组件可以共享同一个request,
; F; I9 b: R2 ?9 U. P0 z response对象。+ h" U# Z. L* V" v$ g. Y
思考:
1 c( h5 [5 x* u; F" w 转发与重定向的区别。
; p9 z3 K4 z. p3 ^: s2、表单中文问题
/ T9 L, T$ V: \3 K% x# V) k0 d7 y! v) A step1 jsp文件,要添加4 |6 o2 S/ @" j+ `
<%@page pageEncoding="utf-8" ) K$ r0 V/ E8 L
contentType="text/html;charset=utf-8"%>
+ x; w: g& U+ }7 S8 m' n; q6 Y5 C 表单设置method="post"。
: e5 b; W9 u2 o step2 在servlet类当中,添加
. x$ n$ E+ E& U' M1 [7 P request.setCharacterEncoding("utf-8");1 }2 E/ @$ {3 h9 x- }8 f; |
& _3 z9 w$ v, w5 x# r1 s1 @) J- v step3 如果要访问数据库:
4 y4 f" |! ~5 J$ E2 b a,保证数据库能够正常地保存中文。
6 I2 ]$ @( D" D4 K 对于mysql
5 a+ D- D) a. J7 A create database dbname
+ {4 C/ G; s2 R default character set utf8;
- l9 h/ u$ ]! g2 X6 g b,使用jdbc访问数据库时,必须要保证
/ F' R8 q$ I3 e6 U jdbc驱动程序能够识别数据库中保存
9 Q# _9 W& f" k9 O, d+ B, B. m' h 数据的编码。, I) x: I0 X% C" |% g$ i* n, K
jdbc:mysql://localhost:3306/jd1109db2?' I2 \$ N/ Z5 B0 l6 @
useUnicode=true&characterEncoding=utf8
2 F% j% u. h2 @- L* X3、路径问题
8 y3 t8 i1 G+ Q, p2 l 链接地址、表单提交、重定向、转发的路径应该
+ Z+ z! w6 ?* w! u1 e3 K$ q, E如何写?, D2 ^* M7 t9 X
<a href=""></a>
( C/ ^7 u2 F; T6 v5 N$ L <form action="">
5 U) j! ]: P3 g* F response.sendRedirect("");5 S, l3 P3 A. G+ z$ M
getRequestDispatcher("");- J( @5 a8 Y& @8 t* `0 d
a,相对路径与绝对路径0 L+ w' J: @7 \" b) B( l
相对路径:不以"/"开头的路径,比如:2 t" ]6 k/ F7 `3 x7 u
<a href="del.do"></a>
% O% U( c# I! a6 W3 m 绝对路径: 以"/"开头的路径,比如:
7 s6 U0 \9 L8 r <a href="/appname/del.do"></a>
7 A% x3 g4 U9 ^ b,怎样写绝对路径?
- a; t3 o4 M' H6 M- G U 链接、表单提交、重定向,绝对路径要从4 o. M- w: T5 i; ?3 `
应用名开始写。
7 X# K& ^, I9 F 转发要从应用名之后开始写。3 ^& G, I5 @, P7 p% {
//返回应用名,比如返回"/web05";
( y- Z4 O _; h2 h8 c3 p% ] String request.getContextPath();
" _) S, L/ q9 r' W; |0 G8 L1 | |
|