该用户从未签到
|
1、转发
6 ?' d; u+ g; c; A" _$ J 1)什么是转发?0 ?, g: W4 c) S
一个web组件(jsp/servlet)将未完成的处理. c4 k' _/ c; @" t
转交给另一个web组件继续处理。转发的各个组
0 `$ l1 ^6 o/ ?4 T/ u- V! z# |4 B- g 件会共享request和response对象。
, E* @8 s2 d& }6 X 2)如何转发?
' K) k) o" I6 R. d1 C2 ~: b9 ]; Z step1 先绑订数据
' b2 l7 z9 y& }8 V' E request.setAttribute(String name,
0 R! W2 R. ~9 V# i: E. p Object obj);/ \ _- g2 S( Y; A
跟绑订相关的另外两个方法" v) v, ^0 B/ x% a" s1 G1 k
//如果name对应的值不存在,返回null。
# m& z& R `# j3 ~ Object request.getAttribute(String name); I% x# B8 a: j$ C! _( W5 ^$ X
request.removeAttribute(String name);" K* ^) r1 F4 \- |8 z( k
step2 获得转发器,转发。" j M) @0 c) v2 e6 }' ?
RequestDispatcher rd = + f+ V' d# T/ }/ b5 J
request.getRequestDispatcher(String uri);
. y ~$ Y! ~- q& _) F rd.forward(request,response);
) ?# R2 c( X' g; W5 p5 Z 3)编程中要注意的问题: Y. Z J% t; v/ G" E. `
转发之前,不能够执行out.close或者out.flush。' ?1 K/ c6 ?! M" O
转发之前,会将response中缓存的数据先清空。
# F, ^0 m" L- g& B 4)转发的特点$ u' `0 h6 T1 X O. J
a,转发的目的地只能是同一个应用内部的某个组件。
# P6 I Q9 R: p- B8 j: R: d3 B% C b,转发之后,浏览器地址栏的地址没有变化。
' F( N' m: N ]2 l) n- V c,转发所涉及的各个组件可以共享同一个request," f8 g, F; y m' z
response对象。2 H% x9 Q" `1 d0 T% N3 Y+ B# U! ~
思考:. S1 g5 f' g& C, k
转发与重定向的区别。
) K3 [& u' E2 y2 ], I1 ?9 a2、表单中文问题' ?( ~2 @/ @0 @" K, A) _* ?
step1 jsp文件,要添加
4 {$ j$ c* x- v; Y8 t3 T( w$ \ <%@page pageEncoding="utf-8"
* i# X$ |0 Z0 E9 M5 v' G6 Z contentType="text/html;charset=utf-8"%>$ A! |' _' a, u5 m: S0 p! J3 z
表单设置method="post"。
6 @5 Q. A+ f( ^+ _4 e step2 在servlet类当中,添加; r, n* } K/ c. F
request.setCharacterEncoding("utf-8"); {$ P I" O: U8 h% R9 o
6 ]1 f% L4 F' V% P! s' j* E& t* i
step3 如果要访问数据库:
4 T/ j) h" T" @ a,保证数据库能够正常地保存中文。
4 F( S- D- Q& q7 b8 I2 C+ g 对于mysql
: r% R, z3 ]! ]* }, C& c1 i create database dbname
! P+ U8 s7 G/ ? default character set utf8;
" p, o" D$ Q: u b,使用jdbc访问数据库时,必须要保证# I$ V- c' l9 J8 X) t2 k
jdbc驱动程序能够识别数据库中保存
, F5 W$ Y/ r7 X& M 数据的编码。- ~5 Y* y+ S$ w: f+ _ H
jdbc:mysql://localhost:3306/jd1109db2?+ m0 d9 ?; {2 ~1 N- _( d# Y/ k E5 m$ u
useUnicode=true&characterEncoding=utf8
6 c" ^% S3 M4 L% c$ @* Z9 O: P# D3、路径问题
! B9 n: H! y B1 A7 q' Y 链接地址、表单提交、重定向、转发的路径应该3 |- ~) ]1 V% y* Y; ]! H u& d! k
如何写?8 a/ Z6 }( l: T r$ X
<a href=""></a>
) W, l3 S9 J5 @- h! P) j6 U1 E <form action="">7 e) S k, E8 U
response.sendRedirect("");, e' I5 t, z: `' ?2 H
getRequestDispatcher("");
2 J. @: o6 U d4 C6 a, @; V a,相对路径与绝对路径
' e. T0 @, S( v9 V& `4 \! }$ ^ 相对路径:不以"/"开头的路径,比如:* z8 [$ Y7 Z( a6 l; m# ]) z
<a href="del.do"></a>
# F$ i1 L) W( Q 绝对路径: 以"/"开头的路径,比如:
* o% T2 w$ [7 m; I: Q, p <a href="/appname/del.do"></a>
4 _- w( r0 \- u* C% v; o$ T b,怎样写绝对路径?
7 R+ H( }" i$ K w# v 链接、表单提交、重定向,绝对路径要从
/ V2 T- l" p- _3 G) Q 应用名开始写。
, ~& n g( e: Z" d5 H' }( P L 转发要从应用名之后开始写。3 B; x% j2 g3 t: z/ b J
//返回应用名,比如返回"/web05";: n3 a/ D E3 W
String request.getContextPath();1 [5 i* R) L" X& H% s; K
|
|