|
该用户从未签到
|
1、转发8 X' w( H' E) Z& ]. d. ]- ~
1)什么是转发?$ u( n/ e* o/ Q+ e8 G
一个web组件(jsp/servlet)将未完成的处理
) M5 L- z' I- m/ @. k, O+ g) i" f7 m; b 转交给另一个web组件继续处理。转发的各个组( h7 N% M* y/ |
件会共享request和response对象。
3 ?: \6 _) B2 U7 n 2)如何转发?+ o- u( w) O& c* T5 T9 X
step1 先绑订数据8 t( j0 E/ L, M0 }1 g. o
request.setAttribute(String name,
5 N8 n+ R& j+ D' C% F$ W Object obj);
* d* e2 L6 _) h1 s. O p( E3 t 跟绑订相关的另外两个方法- [# L, n3 r+ p+ u1 K
//如果name对应的值不存在,返回null。
5 K0 {5 o8 @/ ?, G; l7 U* z' k Object request.getAttribute(String name);+ J/ C! o# ?) u' O1 }& O8 C
request.removeAttribute(String name); B2 p$ d5 c7 Z( Y0 N$ `& Z
step2 获得转发器,转发。1 D% D" s, D" @, d: f& C' x, ^
RequestDispatcher rd = ) l+ A' B" l; o$ q# {! c
request.getRequestDispatcher(String uri);
+ A7 E Q" H4 c" [' N, J rd.forward(request,response);8 g _ ]3 }3 Z
3)编程中要注意的问题4 t7 T- e5 B+ f. n8 B
转发之前,不能够执行out.close或者out.flush。: o+ n7 K: r& O6 l. c, C
转发之前,会将response中缓存的数据先清空。 ' L$ w; \ N% n: G7 `$ P; J
4)转发的特点
$ [) X( V, M+ p) w" Z2 y# d% I a,转发的目的地只能是同一个应用内部的某个组件。
* E- a9 M* {; e7 Y( F& b% ` b,转发之后,浏览器地址栏的地址没有变化。
; h" T# F8 J- Y; R2 C# ~ c,转发所涉及的各个组件可以共享同一个request,: b$ [$ X2 p- w' M& R3 p# C
response对象。6 n* m8 Y" Y9 Q [3 h0 F2 B
思考:6 T% m0 x5 T a9 p' k9 J
转发与重定向的区别。
2 @5 m: G3 W8 r2 y2、表单中文问题
, ?, u) L9 m: S" A step1 jsp文件,要添加1 }3 L" E' i/ I- q- X
<%@page pageEncoding="utf-8" * B7 ?+ s& |+ j" j- s, R3 |" ~" S
contentType="text/html;charset=utf-8"%>
7 ^. |1 B( U- s; u# C 表单设置method="post"。
! |3 o4 s8 P" A1 b: n" g3 l step2 在servlet类当中,添加
9 y- z3 n2 O- ]8 j( N' ^ D$ w request.setCharacterEncoding("utf-8");
- j7 c3 }6 \5 D% `( t8 _
8 @4 k2 T u S$ z( [) x step3 如果要访问数据库:
L; ?* U \5 m! J( \+ L: U7 {/ u a,保证数据库能够正常地保存中文。
( f; a7 ?7 }9 z$ ]; I 对于mysql
5 L! P/ ]( b# l! b" Z' s, O H- ^ create database dbname
; b" |, m- B$ w default character set utf8;
# n! E" d4 k# M b,使用jdbc访问数据库时,必须要保证
$ Q& t: O' s# U: x2 C- y2 B jdbc驱动程序能够识别数据库中保存
3 f: m% x5 k: j, b" T1 S 数据的编码。
' @) P* |5 R2 X0 P( n$ k jdbc:mysql://localhost:3306/jd1109db2?, C0 c& Z$ x; a' ~
useUnicode=true&characterEncoding=utf8: W' x. Z9 G7 Y
3、路径问题5 J" B( }& A, ~2 G
链接地址、表单提交、重定向、转发的路径应该
* V0 c4 v2 w& T! g. m7 A如何写?
. o: z) D, u, v$ x+ T8 } <a href=""></a>
$ F2 Y/ ~3 g% |( p <form action="">
, ^$ e/ q+ Q' E K response.sendRedirect("");
" o, _" r! K- [ getRequestDispatcher("");
3 }' j1 V' c, b7 q a,相对路径与绝对路径" M4 @ P: H5 |
相对路径:不以"/"开头的路径,比如:
3 r' P9 L4 B5 @* l. U8 E9 F* j <a href="del.do"></a>
; v* O4 H k$ j* i& M- t( F- f 绝对路径: 以"/"开头的路径,比如:
$ c1 d+ B' d/ X: h" Z/ i <a href="/appname/del.do"></a>7 g1 H3 M, v7 F: z8 a
b,怎样写绝对路径?
& a) c2 J$ j3 s/ X" @% n4 a, t 链接、表单提交、重定向,绝对路径要从
e9 k6 v. m: ?! v3 h 应用名开始写。3 Q2 M8 U6 c" h" Y+ m4 @, l
转发要从应用名之后开始写。/ }! s0 ~2 [0 e8 Q5 n0 y
//返回应用名,比如返回"/web05";
3 }6 [$ X2 p/ z8 c# w5 E String request.getContextPath();" y3 B9 d* b! t- |
|
|