该用户从未签到
|
1、转发
( W3 b" y6 R6 B/ K4 q 1)什么是转发?
1 i/ G) H' P! w* \! m 一个web组件(jsp/servlet)将未完成的处理
/ k$ j! ]& l' g1 Q 转交给另一个web组件继续处理。转发的各个组
7 u! l* h7 X0 F3 H0 d7 T1 z 件会共享request和response对象。1 k% D; i& v8 \% q) t
2)如何转发?! Q5 |: R# A% h( |4 K7 P) }5 \/ N
step1 先绑订数据& I) m4 R# f7 |, P3 z+ L
request.setAttribute(String name,6 H0 ^1 }0 F( ^! B: _4 e" ]; B
Object obj);' j0 F; q9 K) U2 A9 o1 S2 H
跟绑订相关的另外两个方法
1 U/ m$ O" ]( |7 V6 }% z //如果name对应的值不存在,返回null。
4 I+ e' Q7 Y4 k; @4 g3 f! ^ Object request.getAttribute(String name);
/ C4 ~# ?( y" y: E1 j request.removeAttribute(String name);- ^2 u8 o1 p; E1 _% P1 r# x
step2 获得转发器,转发。
2 Z! s2 V; ^/ O( I RequestDispatcher rd =
% I$ L5 b. a+ B4 r: ~7 D request.getRequestDispatcher(String uri);) x) \1 @& D+ z9 ^- ~
rd.forward(request,response);% C T! C: `9 B s5 H
3)编程中要注意的问题7 B+ b+ O( V5 Q% _7 S
转发之前,不能够执行out.close或者out.flush。
. t, Q, T: W' @7 ]( a 转发之前,会将response中缓存的数据先清空。 8 s! f6 J7 y8 D7 _% k
4)转发的特点
5 K) P5 w* R) v5 g a,转发的目的地只能是同一个应用内部的某个组件。2 p% x; Z' D+ q' F0 X0 i- H: Q
b,转发之后,浏览器地址栏的地址没有变化。
0 w: x1 D5 J$ a( t! u+ b c,转发所涉及的各个组件可以共享同一个request,7 i: z. t+ W1 X2 n3 U. w7 a
response对象。
% \- T! q5 c! d& H1 N: x8 p! B1 ^ 思考:. g0 P4 _ ^) |4 S, M& n8 S5 j
转发与重定向的区别。# s8 y: \# p/ e8 b
2、表单中文问题
, j% F( J" V+ K, K/ x' ^ step1 jsp文件,要添加
9 \3 f, y! f; c. L* f* r1 [& m <%@page pageEncoding="utf-8" & q: F" V3 S+ c5 K
contentType="text/html;charset=utf-8"%>
! i: V) A1 a8 n& h# @; s 表单设置method="post"。
' w5 O2 K$ K/ d" K; u$ h2 s step2 在servlet类当中,添加( ?; M2 q% d$ N7 d1 W4 r) {
request.setCharacterEncoding("utf-8");
* h) B o4 Q1 f6 g- j, H
) W9 p( }! G2 W6 t2 Z7 l step3 如果要访问数据库:
. r& G/ P) R d& w2 v( R8 f. ^ a,保证数据库能够正常地保存中文。6 [& B7 e( r! j: P' d
对于mysql
. p: u+ ^1 {- t5 G& Q6 } create database dbname
) }% F& |% ^7 m4 M7 w' f( t8 u) k default character set utf8;
- t) S( N& \( t6 c b,使用jdbc访问数据库时,必须要保证" `+ k7 U' e6 z$ C
jdbc驱动程序能够识别数据库中保存9 j2 i$ A. E! h8 M- A7 l6 R
数据的编码。
5 D* l. J9 S5 K# z jdbc:mysql://localhost:3306/jd1109db2?1 q2 m; \( h- f- U) e8 ?
useUnicode=true&characterEncoding=utf8! f4 r/ P0 c% O
3、路径问题# w2 Q& U/ n0 x. L" O ~
链接地址、表单提交、重定向、转发的路径应该
8 o% a" I& T" R; p7 a0 F6 o如何写?+ e+ w2 i2 g" D& R( c
<a href=""></a>
% ]0 P6 V8 S) U* P/ e <form action="">* [. G" j- G2 Z8 B
response.sendRedirect("");
2 Z. B$ u T* l& ^" O getRequestDispatcher("");
* S( o( {, K: v Y- H7 A+ d a,相对路径与绝对路径
5 J" g: ]* v* M- k4 X, h/ c 相对路径:不以"/"开头的路径,比如:
( k5 W0 S( H& o+ e0 {4 I! L <a href="del.do"></a> I$ g ^9 [2 h4 M/ o& Y; D
绝对路径: 以"/"开头的路径,比如:
3 r; j, z: R. J <a href="/appname/del.do"></a>
0 m' B# i# A1 i! O7 h) \ b,怎样写绝对路径?
6 s0 G% C! |: }" P3 ` 链接、表单提交、重定向,绝对路径要从2 B# D0 x4 d3 T& o& ?( h
应用名开始写。" X" B* ~1 ]0 \" M
转发要从应用名之后开始写。0 Z4 _; G$ z k0 f8 l( r7 i" E
//返回应用名,比如返回"/web05";1 C& N0 [, y( Q7 u
String request.getContextPath();+ R7 v' z0 Y8 u' l, e- A5 M
|
|