该用户从未签到
|
1、转发, |+ P; m9 Y# I- N+ y# ?& Q
1)什么是转发?( B/ T4 V' i% p( N3 Z1 C _4 ?
一个web组件(jsp/servlet)将未完成的处理3 M" r# k7 |8 g
转交给另一个web组件继续处理。转发的各个组
" k- j4 B' o0 Q# D" p7 |4 N 件会共享request和response对象。# g. D4 v* A! Y
2)如何转发?
7 k5 P' S }3 Z9 e step1 先绑订数据/ r, h% \* L/ T$ r4 S, ?
request.setAttribute(String name,
- D( A+ p( J# n9 X! I Object obj);& F# O K# g9 \, H$ f; u4 `1 P
跟绑订相关的另外两个方法, |: k9 p9 Y1 T' {7 @, {7 ?% i
//如果name对应的值不存在,返回null。3 o( N9 G: `' x$ \* j" t, g" H
Object request.getAttribute(String name);
- V7 z, U) }' _) F request.removeAttribute(String name);
' r9 o5 N# R4 V/ }5 o step2 获得转发器,转发。
) j8 j( U1 w- I! p6 z6 l7 K RequestDispatcher rd = ; q* e O! }" U4 |# G8 r! D
request.getRequestDispatcher(String uri);/ S$ B! i& y/ U6 f# ]% Z' M1 s- e
rd.forward(request,response);% T" c+ J' B4 H( ]
3)编程中要注意的问题9 K, S* L1 h- }* e+ R5 g5 n. ^
转发之前,不能够执行out.close或者out.flush。
' z* M' n% ^% ~( f" e0 q 转发之前,会将response中缓存的数据先清空。
$ {% I0 S) c" Z1 T; N 4)转发的特点' \4 G; v, S* }1 P- b2 m
a,转发的目的地只能是同一个应用内部的某个组件。
7 N$ z% m2 b9 w$ N" W4 Y b,转发之后,浏览器地址栏的地址没有变化。( v# O6 j u8 `1 W
c,转发所涉及的各个组件可以共享同一个request,- l9 w& R5 \0 X2 \
response对象。6 H0 v, h% U) W( \
思考:, K9 X* c8 U3 w' N f5 R* f
转发与重定向的区别。0 D. J' T/ y' o
2、表单中文问题8 X# @$ |. u8 M% L
step1 jsp文件,要添加
! E5 v; K) z: Z+ ?. L% T <%@page pageEncoding="utf-8"
+ |; Z4 n7 i% `. z contentType="text/html;charset=utf-8"%>- B! k- a+ p) f" N8 M
表单设置method="post"。
" d- }0 o8 P) a0 s: Y& l! ? step2 在servlet类当中,添加+ k6 K' ?0 ^4 H$ J% n! ?1 N
request.setCharacterEncoding("utf-8");0 [( W B h2 `' N' t. V+ R( D
4 G' H" T( B9 Y! p' d# v step3 如果要访问数据库:% t& a; G: W1 H8 G" ~) h, T8 K
a,保证数据库能够正常地保存中文。
8 G% _2 ? E2 P/ u2 R 对于mysql
+ n# B6 L- w3 \! d' M3 T create database dbname / n& k0 }% T' l% }
default character set utf8;; x3 v4 p$ m! o3 g
b,使用jdbc访问数据库时,必须要保证
. e: S' {: k$ Y4 G! p1 V! T jdbc驱动程序能够识别数据库中保存
" V0 ~, M7 } a 数据的编码。
. n/ `' \: {# w6 ]& X+ W0 l( }- p jdbc:mysql://localhost:3306/jd1109db2?* y% m; V3 ^4 M/ A( X
useUnicode=true&characterEncoding=utf82 X$ P7 P2 q1 X; E7 c1 p7 i
3、路径问题
7 A& H3 L0 n9 D/ K2 u7 n- S 链接地址、表单提交、重定向、转发的路径应该2 ^& C6 N# }$ R* b1 m6 k: n
如何写?
2 \4 ]0 P, W2 {) y$ i <a href=""></a>
/ K9 O: m" a2 a0 }! E <form action="">
3 R; ^8 i8 X! a/ q; [4 d response.sendRedirect("");5 I$ ?( l8 D' t% y9 U [
getRequestDispatcher("");8 V* R6 u* P- a
a,相对路径与绝对路径+ y/ n0 J' @4 o
相对路径:不以"/"开头的路径,比如:" _: o4 C4 c/ ?, p
<a href="del.do"></a>; d& l1 a3 R2 L, V# ]& X1 C6 `
绝对路径: 以"/"开头的路径,比如:
. P( W, p; W1 } u# k) t <a href="/appname/del.do"></a>
0 j; H# T U. O b,怎样写绝对路径?
$ N& w& J7 J' k7 k, M7 O 链接、表单提交、重定向,绝对路径要从
1 }* P5 v* U4 B. V% i2 p 应用名开始写。
1 [$ ~/ b& t# ? 转发要从应用名之后开始写。5 d2 o* `: ?6 @* B3 o& B
//返回应用名,比如返回"/web05";
$ i- l& ?1 `: u String request.getContextPath();- P8 V5 ?# M* E3 W
|
|