该用户从未签到
|
1、转发: q; T7 B! ]: z7 i6 S' f ~9 X
1)什么是转发?4 S, r% D4 }& }/ B0 e$ H: ~
一个web组件(jsp/servlet)将未完成的处理- ~5 _- K# F9 h$ x9 Q
转交给另一个web组件继续处理。转发的各个组- G% m+ t; ^! y" c/ g
件会共享request和response对象。4 j% P) T, c& O S( O
2)如何转发?4 \6 M5 Z) N5 s7 d+ g. q3 C$ G
step1 先绑订数据
2 W+ w& e& J9 L) ]9 Y' d4 p: ^ request.setAttribute(String name,
. q3 i D* O( D/ B9 e Object obj);- L$ Z# h I2 a- S, S: ]
跟绑订相关的另外两个方法
) v; ?2 t# I" ^! a, S3 A //如果name对应的值不存在,返回null。
) S# \" U* n% p4 S& R Object request.getAttribute(String name);3 A4 H" m( \* z* c
request.removeAttribute(String name);
3 J: M0 ]$ { e8 ^9 U2 A step2 获得转发器,转发。' ^" G$ I) s) l' n( b7 B4 G. ~
RequestDispatcher rd = 7 ~& O, B( C& w1 l+ W
request.getRequestDispatcher(String uri);
8 c% L" V6 v- y rd.forward(request,response);; O) H+ a% u- y
3)编程中要注意的问题
9 Z6 _' n6 U; t 转发之前,不能够执行out.close或者out.flush。
; J8 i! c1 \) |2 |+ H 转发之前,会将response中缓存的数据先清空。
. v% x8 p3 Q9 R a' ?0 [ 4)转发的特点9 d) _8 ?% B" q
a,转发的目的地只能是同一个应用内部的某个组件。; K; Q, @$ O. w
b,转发之后,浏览器地址栏的地址没有变化。( p7 u s v' _+ e
c,转发所涉及的各个组件可以共享同一个request, B" Y( d1 [2 Q1 X1 X
response对象。; y. z# s( `$ X( S( F+ ~
思考:% b! y" z3 Z, n4 R7 ?/ ?- W- ?! j6 o
转发与重定向的区别。7 \0 j) x5 X4 S \4 D7 @( J
2、表单中文问题% H$ w' h" m4 w8 g3 _
step1 jsp文件,要添加- C4 {: d1 M& N0 h
<%@page pageEncoding="utf-8"
2 Q9 w0 p5 E; g+ ] contentType="text/html;charset=utf-8"%>, l/ G% o' S/ L
表单设置method="post"。/ q0 j0 p5 w0 p$ n7 P. ~3 ?
step2 在servlet类当中,添加
4 _# @! I' V6 l% H request.setCharacterEncoding("utf-8");
0 V o" P2 a$ ]0 W 6 R% c, F* |/ v" z, Z
step3 如果要访问数据库:
1 n$ g! ]5 \5 s% j% i a,保证数据库能够正常地保存中文。
& }% p* z: ~$ {9 I! a2 b: i# p* t 对于mysql
/ Q8 x F" t* l) ?, I5 G! ? create database dbname ; c+ }% D7 Q8 p5 q6 O9 n9 w o
default character set utf8;3 i9 C6 ~/ L8 ?! X8 N
b,使用jdbc访问数据库时,必须要保证
% B1 o) K8 M2 R' B' W jdbc驱动程序能够识别数据库中保存; g$ K# X1 z& Y9 m/ E. n
数据的编码。 S) @1 H3 Y) S' }
jdbc:mysql://localhost:3306/jd1109db2?" P8 r( j. j1 u9 a- {$ O) |/ S
useUnicode=true&characterEncoding=utf8! U) X- U' R6 `9 L' P0 _
3、路径问题0 r6 t. p) z. R! G8 m; }/ A
链接地址、表单提交、重定向、转发的路径应该 o- W6 A; w! Z5 @% T
如何写?
( Z8 p: c2 Y) Q) U% Q8 e" \ <a href=""></a>
- G/ [+ z6 d9 K: ~) }* e <form action="">5 Y; m+ n1 Y- Y
response.sendRedirect("");
' t' s& e. I* r: x8 B$ v7 _ getRequestDispatcher("");/ |: ]8 c- K* H5 V* z! P- Z1 ~
a,相对路径与绝对路径 z+ K+ |9 u$ }! l3 S/ r
相对路径:不以"/"开头的路径,比如:3 p! S0 A7 ~% o5 j# U! E; ?
<a href="del.do"></a>2 ?( m+ x1 w. |- M' e
绝对路径: 以"/"开头的路径,比如:$ w) ^* c; A; h. ?0 Y B7 K
<a href="/appname/del.do"></a>
) v/ v% p# z3 T. z* s2 A b,怎样写绝对路径?7 x: {8 n3 a7 r1 m+ \; O: Y, @
链接、表单提交、重定向,绝对路径要从
7 q2 w0 a N5 J, l' a c& o 应用名开始写。% Q9 T6 [4 z! @7 {! g0 e0 e
转发要从应用名之后开始写。
. v5 F' o. j, s2 E b //返回应用名,比如返回"/web05";- X$ s* @7 r% i- e6 _: E
String request.getContextPath();
& V+ Q+ Z$ T# S- u5 Z |
|