该用户从未签到
|
1、转发. \- K/ r3 ^) ~, F% U/ s
1)什么是转发?! B- Z( N2 Y- m+ c
一个web组件(jsp/servlet)将未完成的处理
2 F1 Y$ [ N/ i7 L& `6 ] 转交给另一个web组件继续处理。转发的各个组
: O* ~0 h" | L5 v# D5 N$ v3 _9 e 件会共享request和response对象。 ~! _0 q/ o- u3 z; `2 ]
2)如何转发?) I2 r2 I1 d6 B6 C& q6 N
step1 先绑订数据
" L, r& M8 N! n7 i& G% L request.setAttribute(String name,& ~% |. _8 V- }" A, S
Object obj);
A9 m# Q6 n# n5 _3 ] l6 I4 [7 t. y- } 跟绑订相关的另外两个方法
) k+ j: `4 X- n9 T% ?3 u //如果name对应的值不存在,返回null。1 B6 o) R" g. w1 C/ _2 V) K) B' l
Object request.getAttribute(String name);
3 n n# s8 g( ^; x request.removeAttribute(String name);
9 v( J+ v5 i$ _4 | step2 获得转发器,转发。
: U4 V" `8 o: D( n" Z RequestDispatcher rd = 0 ]: a; X2 R6 |3 k( ~/ K& K$ Z3 u
request.getRequestDispatcher(String uri);% {- _8 Y; H& v
rd.forward(request,response);
& f! B2 E4 b7 X& {& p5 X2 L$ o 3)编程中要注意的问题5 l6 Y2 s: v" D x2 e
转发之前,不能够执行out.close或者out.flush。
. i! J) b" J# \" R& H: S 转发之前,会将response中缓存的数据先清空。
2 m; W# P) @2 m& ~- z+ b* O- |2 \ 4)转发的特点
! a* {4 |% O" \: D C2 S6 \ a,转发的目的地只能是同一个应用内部的某个组件。/ G* |+ h/ ?: ~! j- M( _" s8 _# n
b,转发之后,浏览器地址栏的地址没有变化。) m E6 c2 b" k# }2 q
c,转发所涉及的各个组件可以共享同一个request,% M6 ]5 A3 `/ A# S) Z. A
response对象。' x' y# r7 l* E0 [6 q, t
思考:
+ y8 s# ~. E# k! O9 r 转发与重定向的区别。
6 [- @$ }& S$ i3 a( E! `& m+ Z1 z2、表单中文问题
- ?3 Q% [2 |0 r step1 jsp文件,要添加
& i" Q- c% f7 v) T8 l8 T) u; x <%@page pageEncoding="utf-8"
! t! F% j1 j1 b, p* u contentType="text/html;charset=utf-8"%>; {. ]' n: k! P; T7 O! E# g
表单设置method="post"。
|: B4 _5 D& l1 A6 x. W step2 在servlet类当中,添加4 B% ~: {9 k+ [; i
request.setCharacterEncoding("utf-8");0 s& @( }4 o' @" O8 L' ~& K' ~
( L/ \/ n( }9 m+ }% B( X% } step3 如果要访问数据库:' Z: w7 D, u4 ?, z: U
a,保证数据库能够正常地保存中文。! `7 w$ L0 i/ H8 A, Y
对于mysql7 q3 o( W2 A; V
create database dbname 9 s& t) h, M. r1 Z
default character set utf8;
- S$ x" s8 A6 J# _4 q1 d b,使用jdbc访问数据库时,必须要保证# z/ [5 p5 {$ x' D$ W& _8 |
jdbc驱动程序能够识别数据库中保存
. m' E* H0 ^: m0 d 数据的编码。
, Q2 b+ I* ^! ^# ? I* D jdbc:mysql://localhost:3306/jd1109db2?# n7 ~7 p+ L6 Z4 D; M
useUnicode=true&characterEncoding=utf8
w$ W4 b, x( C; @8 `# X2 w5 { @5 T3、路径问题
' Y8 L: F/ d: f4 ] i2 `; K) B 链接地址、表单提交、重定向、转发的路径应该
/ O' V0 N5 [9 K. o: u如何写?
: { j4 W \6 G T6 b0 J/ t <a href=""></a>1 s* v5 \1 [1 Q; \
<form action="">* `9 A' ^: v* y; q; u
response.sendRedirect("");2 Z0 q- u* N7 {8 V* W# B
getRequestDispatcher("");+ I' Q- r/ H- I/ [3 p
a,相对路径与绝对路径& n7 c8 N7 u; A4 L" d$ ^0 z
相对路径:不以"/"开头的路径,比如:8 I! i3 | b3 ?0 [( _* A8 s
<a href="del.do"></a> z8 e3 e( ` s
绝对路径: 以"/"开头的路径,比如:
3 u' G7 O2 o5 z' a <a href="/appname/del.do"></a>
$ _! Z7 f& s. g! x2 R/ O W2 Y) _ b,怎样写绝对路径?' S- g( }- n& }/ ?6 R2 k( C9 N3 c3 |
链接、表单提交、重定向,绝对路径要从& a' G4 H1 _* d
应用名开始写。8 X- }1 b$ L) y1 Z
转发要从应用名之后开始写。
) ~ Y. @( l P# U //返回应用名,比如返回"/web05";
, @( \. W! u! h# X# c6 z3 V( @ String request.getContextPath();
, A2 M) Z$ r H% L" z o |
|