该用户从未签到
|
1、转发
7 X& K0 P3 p$ ]7 L4 T, {% L 1)什么是转发?* `$ K, T) o& {: Y! S
一个web组件(jsp/servlet)将未完成的处理& m& Q8 ?7 O) I5 j! J' _, j" ]
转交给另一个web组件继续处理。转发的各个组& {& w6 f8 H- Q* }' F6 w
件会共享request和response对象。
1 g5 s) N. g' C5 W7 k 2)如何转发?( S# `5 T8 b6 K/ C
step1 先绑订数据* @2 g0 v( I# @' j1 v# ?" H% @
request.setAttribute(String name,
# u! I# m2 c( I) T! i4 k1 d1 y/ i Object obj);
+ u- B: E; k1 V3 O+ X, r8 C 跟绑订相关的另外两个方法
+ \. b" S/ D5 K! I/ i //如果name对应的值不存在,返回null。
, Y! w \6 i- L7 V5 P Object request.getAttribute(String name);
! j& z; [' o/ z: M request.removeAttribute(String name);4 J" ~5 X: j/ O2 H
step2 获得转发器,转发。" i! \- j; ]4 w3 }4 W" w
RequestDispatcher rd =
2 j$ V E4 ~6 r ~2 t& T# B request.getRequestDispatcher(String uri);
' c$ Y8 o) ^1 h) X9 X; o rd.forward(request,response);
0 M, y- E3 M( _3 U0 K+ o- ? 3)编程中要注意的问题
# A7 o" m1 c9 A" t. k2 c5 N% A 转发之前,不能够执行out.close或者out.flush。5 q6 X4 q: E1 ]" Z9 R
转发之前,会将response中缓存的数据先清空。
/ y; }) Y8 x3 r# e" R4 O F8 \# D 4)转发的特点7 N' E V7 k8 W; x
a,转发的目的地只能是同一个应用内部的某个组件。
[6 l% Z/ X4 ]% V9 i/ [ b,转发之后,浏览器地址栏的地址没有变化。
; Z% a6 B7 Y- b) r& B: ] c,转发所涉及的各个组件可以共享同一个request,
: {) y/ R9 s1 \/ V% t9 j, b# q2 M response对象。/ s# W$ B6 H# u1 j1 Y% }& i) p& l) S9 N
思考:/ h/ O* h$ h% v. J
转发与重定向的区别。
. Z2 t% v# J" o+ r8 L6 h6 T+ J2、表单中文问题
5 y, |; B' y5 s2 Q% J3 @8 d4 k step1 jsp文件,要添加1 `6 `, u6 a5 N- ?, W4 z7 k1 Z
<%@page pageEncoding="utf-8" 5 Z: k8 H4 r# E9 i
contentType="text/html;charset=utf-8"%>
^: ^& @! P0 ?& Q1 } 表单设置method="post"。& d& f( X- ?# K( r
step2 在servlet类当中,添加
9 o9 \ O9 o1 w+ a1 P8 v/ g request.setCharacterEncoding("utf-8");! z6 Z% x4 p& Z7 U* _
2 H' q, |0 e; N4 y/ {
step3 如果要访问数据库:
{/ Q/ f5 D$ S$ @8 k. p a,保证数据库能够正常地保存中文。& s Q- z7 Q0 i' e
对于mysql4 B* [0 P* C7 M! \+ t' U7 c
create database dbname $ I, z: n" N1 T4 A6 I/ `& E
default character set utf8; g' b- h% Q6 {! T7 Z: @7 }2 s
b,使用jdbc访问数据库时,必须要保证
9 H) D8 v7 z, K* z, f7 q jdbc驱动程序能够识别数据库中保存( c- G4 B, j# g h4 I
数据的编码。
1 j4 y# y1 e N0 W. @3 D6 _, Y2 ] jdbc:mysql://localhost:3306/jd1109db2?
2 y; k4 A' S$ b! f useUnicode=true&characterEncoding=utf80 {3 D% P( d7 B% w
3、路径问题
+ c! a9 B9 @8 ]4 j9 {' c7 L) t 链接地址、表单提交、重定向、转发的路径应该9 o( t+ x6 m: L9 w! q$ M& @
如何写?1 f: v+ p; i `# ~2 x
<a href=""></a>
i9 e5 Y% E% ~ |' h" p <form action="">( p4 k" w& z0 B5 {
response.sendRedirect("");
, j" I& x. t9 L/ r" e getRequestDispatcher("");4 z$ Q9 i7 s# e5 e3 b
a,相对路径与绝对路径" t9 o% o& S* [; @9 U5 m. t
相对路径:不以"/"开头的路径,比如:
2 l a! O, X+ w- ~ <a href="del.do"></a>) _' u/ z* q! y
绝对路径: 以"/"开头的路径,比如:
9 d+ K6 f2 _' m3 `2 Y0 j9 T <a href="/appname/del.do"></a>
+ G5 S3 Q' D: G6 P+ G6 x5 E- Q b,怎样写绝对路径?% S0 h! N* {8 j, i8 F2 q8 J
链接、表单提交、重定向,绝对路径要从
" Y4 N P" J8 s' K$ I* Z 应用名开始写。
; i) Q7 T! K- u! e j7 c 转发要从应用名之后开始写。
9 A: q# W6 c t8 _/ J //返回应用名,比如返回"/web05";% V% |- @/ N. z/ ?% J7 B
String request.getContextPath();
0 B2 m; i; ?2 ?" j2 q4 A. I, Z |
|