该用户从未签到
|
1、转发
5 Z0 q" |9 q6 m1 P: w% g 1)什么是转发?0 ~9 r+ p% k! G$ v0 G3 y
一个web组件(jsp/servlet)将未完成的处理
% j% e9 l9 b: A' w3 B6 f) | 转交给另一个web组件继续处理。转发的各个组7 W/ P( {& j% q1 V! c
件会共享request和response对象。4 C! n+ {7 t4 B" `( x" J
2)如何转发?) y/ V1 p, K6 H7 g3 u
step1 先绑订数据
, _% |1 Q5 T1 y& _9 j request.setAttribute(String name,
3 h0 E4 S0 s! i+ f% R$ x/ t' p Object obj);4 d9 ^, `$ J8 n: X0 u
跟绑订相关的另外两个方法( T' ~" D# a1 Z3 g' }: \
//如果name对应的值不存在,返回null。
! D' d2 j6 I/ x9 p3 @ Object request.getAttribute(String name);
1 L- b: y E: {+ p6 c8 C request.removeAttribute(String name);) R: f0 a; L9 L& L4 i" x
step2 获得转发器,转发。
( L4 {) Z, L* u5 [/ Z1 S RequestDispatcher rd = O; o3 o; x- a3 a
request.getRequestDispatcher(String uri);" t9 @/ [# i' {/ j
rd.forward(request,response);' H$ |. B. T' V4 i1 Z9 z6 J# X
3)编程中要注意的问题
* ]+ S: X# t. j0 m3 V" |. |! @0 z7 T 转发之前,不能够执行out.close或者out.flush。
6 L3 h, ^' {6 U# S# B, t4 b; k 转发之前,会将response中缓存的数据先清空。 7 o1 ]% d4 F5 J5 O+ I3 |
4)转发的特点
, i! x. U z, P* Y, M* ]& S a,转发的目的地只能是同一个应用内部的某个组件。
) X* ?+ X2 g! v& P" }0 j b,转发之后,浏览器地址栏的地址没有变化。3 o6 G( N. B. N) m- f0 X
c,转发所涉及的各个组件可以共享同一个request,) J( s+ Y8 M2 @. x. M7 t/ w+ a1 T
response对象。
/ W$ Y+ o& D; f0 s! k3 }( N* n 思考:
0 A) W; r5 X% X9 H8 z1 F 转发与重定向的区别。
0 E8 a6 l# B6 Q; F+ P- R0 I2、表单中文问题3 v5 y! t U, V0 |
step1 jsp文件,要添加6 d M7 G d) ]3 |' l8 @
<%@page pageEncoding="utf-8"
: @' N2 n0 R0 e, G1 d# G contentType="text/html;charset=utf-8"%>, }2 S8 d, M5 C$ q9 X/ [* L) r& p9 G
表单设置method="post"。$ E f* [8 n! [3 ]1 ^( ?4 [/ v
step2 在servlet类当中,添加0 N! X; q: \8 }
request.setCharacterEncoding("utf-8");
, ]6 D$ w7 g" F/ k- d
4 p3 M2 q! [/ T& O" F7 K step3 如果要访问数据库:
1 t6 N2 q I+ U. ^ a,保证数据库能够正常地保存中文。
: i, R k. M* G2 _$ T 对于mysql
: b e$ D( s3 k create database dbname * N, C8 F& }8 O( Z+ s- ~. p
default character set utf8;) k N( k$ [' E+ Z/ [& _# G. X
b,使用jdbc访问数据库时,必须要保证
+ l, ?5 y& [/ Z3 Y jdbc驱动程序能够识别数据库中保存
' H+ e B) }3 X# \ 数据的编码。$ }( i" o+ |8 M" y2 U" V
jdbc:mysql://localhost:3306/jd1109db2?
/ n8 N2 n, Y: {- ?: P# \ useUnicode=true&characterEncoding=utf8/ o, i4 `% U0 G% U% q
3、路径问题
4 X0 Y5 Y# @2 K3 X. | 链接地址、表单提交、重定向、转发的路径应该
0 d) }' \4 U2 [5 |9 _: i' S7 R如何写?& ^( x+ i2 Q0 g I! g5 u
<a href=""></a> j# o# |$ f6 `% p1 b
<form action="">( ~0 N3 n1 W, l) N. r* r
response.sendRedirect("");% Y e" t6 }* y
getRequestDispatcher("");" @' f* q A5 o& G( }- V6 q
a,相对路径与绝对路径4 E6 [ ^ S) H J" i& @) ], i! W( b
相对路径:不以"/"开头的路径,比如:) i2 v' Q7 Q( }) `% g9 T5 q) K9 y
<a href="del.do"></a>
8 n3 J. z" L1 b" v% c5 c# h 绝对路径: 以"/"开头的路径,比如:
/ U7 K5 J8 z, U) q5 }" ]( y <a href="/appname/del.do"></a>
0 g& o9 {8 _( V) `/ W b,怎样写绝对路径?, j8 f+ @; m& Q- g/ }/ n6 c4 P7 b
链接、表单提交、重定向,绝对路径要从
, @3 d7 i$ B' J3 y6 v7 s/ [& r 应用名开始写。
6 a7 U2 Y# s; m$ x 转发要从应用名之后开始写。
7 x9 q. X( j: ] X9 a L: U9 U //返回应用名,比如返回"/web05";
" U/ T: N N+ p7 D1 w# m$ y String request.getContextPath();
1 P q3 j* [7 n7 i |
|