该用户从未签到
|
1、转发/ G9 T4 x- E9 f5 Y) O! {
1)什么是转发?4 w' @. j2 K+ Q( `5 [
一个web组件(jsp/servlet)将未完成的处理
- q) H& k/ s. d8 X3 ^; Q 转交给另一个web组件继续处理。转发的各个组, H! C: m$ E0 y" T
件会共享request和response对象。
; j: z3 M) ] E) i/ N; r! h 2)如何转发?
( P9 s: U" Q; U+ F% i/ N) ?" Q step1 先绑订数据; ~( w& M; M2 K% b4 P. h9 B; z
request.setAttribute(String name,
0 k" N# g7 C4 P3 ?; d9 q Object obj);
5 t; u1 K- c2 Q* S1 S: e/ e# S 跟绑订相关的另外两个方法5 g% T/ W( v7 p3 O
//如果name对应的值不存在,返回null。
* M& h* a! j3 W: H0 e Object request.getAttribute(String name);
" G/ S' z# y4 Z% R# x$ G request.removeAttribute(String name);$ ^) M8 W2 w1 Q- O/ P
step2 获得转发器,转发。
[* q- k. q7 Q; y RequestDispatcher rd =
5 j- R' e' C) R request.getRequestDispatcher(String uri);& L4 q: P4 F9 t; R3 d
rd.forward(request,response);% A- T6 \# \3 |0 a* r) c
3)编程中要注意的问题3 ^3 l* I' v! o3 e
转发之前,不能够执行out.close或者out.flush。: h) l) u: V1 f! R* j: g+ ^0 Q- `
转发之前,会将response中缓存的数据先清空。
2 k. [2 Q2 f4 H4 s) ^# f: @* S9 } 4)转发的特点
$ b5 I* w4 k) W% ] a,转发的目的地只能是同一个应用内部的某个组件。/ V; H- Q3 C$ q6 ]
b,转发之后,浏览器地址栏的地址没有变化。1 E, R( v1 I2 C) [
c,转发所涉及的各个组件可以共享同一个request,
6 [7 V+ i' m8 W( o response对象。
6 O& [, |- {3 V$ S" V+ C2 s* y 思考:
! N* s8 n: _2 B( J 转发与重定向的区别。5 N" d$ S0 |" `7 E2 L+ }2 @
2、表单中文问题% ?& R ~9 t1 O) a9 q+ S
step1 jsp文件,要添加! F& [* V1 e6 ?
<%@page pageEncoding="utf-8" : u. ]" K3 f3 F b) U( O
contentType="text/html;charset=utf-8"%>
' t* A; P$ k, \! d* g7 K 表单设置method="post"。/ ~ f: l& |8 ?: t( p
step2 在servlet类当中,添加5 v# d" N [& w# M( M# Z& E I
request.setCharacterEncoding("utf-8");, ?9 }- n! p/ }
$ A. M( f$ R6 d1 j! F% ]4 u step3 如果要访问数据库:4 Q, T: U U% J! q. H
a,保证数据库能够正常地保存中文。
1 z, K) R% f4 Q! w9 i; n 对于mysql+ }6 Q1 N# l. K6 _& F% [
create database dbname " B9 p* a7 u, Q5 h
default character set utf8;& k" F. F, v. A/ `& n3 E
b,使用jdbc访问数据库时,必须要保证
# P4 \2 [" m4 f$ P9 [ jdbc驱动程序能够识别数据库中保存
' F) M% X( P9 o9 l8 x1 t7 V 数据的编码。; B) P6 `, w1 n9 C0 W) @: t
jdbc:mysql://localhost:3306/jd1109db2?5 v( C+ B! L' _) A
useUnicode=true&characterEncoding=utf8
6 l2 r* R @) p' G3、路径问题. T/ |/ P9 m' y8 ]2 [
链接地址、表单提交、重定向、转发的路径应该5 }. O7 g7 q4 |8 P
如何写?
0 l s7 S3 d% F& |9 l6 z <a href=""></a>3 B/ Q# d* V- D+ h
<form action="">8 D/ ]% X/ C& I2 ^* _
response.sendRedirect("");5 ]2 [" I: }+ @8 x7 Y" P
getRequestDispatcher("");
0 O3 b5 V4 l, {1 ] a,相对路径与绝对路径7 ~: N: w, @# r$ R
相对路径:不以"/"开头的路径,比如:
: b, Q" _) P: I" R( `5 K# O* E4 |# m <a href="del.do"></a>; p9 {& \# B: O
绝对路径: 以"/"开头的路径,比如:
# |2 s. C7 U' u y8 ? <a href="/appname/del.do"></a>
* b V# ?% S* b4 e b,怎样写绝对路径?
* L: x8 `/ ]! w7 |8 \% b 链接、表单提交、重定向,绝对路径要从
- T% g/ g" d1 Q 应用名开始写。
/ \% B; G& {7 g 转发要从应用名之后开始写。, B9 M7 t. K0 Q# b2 x+ a5 O8 @
//返回应用名,比如返回"/web05";
% V, y+ w) y: S' d8 Z4 L5 k String request.getContextPath();5 {* K. g% J3 x( B1 W1 [9 G, \
|
|