|
该用户从未签到
|
1、转发
" ~) v( B+ h3 G$ s 1)什么是转发?% @$ S8 _1 F; k8 U+ |
一个web组件(jsp/servlet)将未完成的处理
' A- R$ j% \3 _# z9 R 转交给另一个web组件继续处理。转发的各个组9 ?# W% K# b" T& R1 E# p
件会共享request和response对象。
) C) Y! T! t' s7 g 2)如何转发?
6 b; Q; t/ z9 m3 _' O! X step1 先绑订数据
1 U8 P: [& V( |, x) S9 \8 ^# o/ } request.setAttribute(String name,4 X, T5 e" a4 }1 z. W; x
Object obj);/ f: W& T5 T8 ^/ G
跟绑订相关的另外两个方法
" o( D- U- I! i8 A: R //如果name对应的值不存在,返回null。5 H4 ?, X$ n' C i" m
Object request.getAttribute(String name);3 E# f$ F# g8 K4 ?
request.removeAttribute(String name);
$ K- @7 U' k& z' Z3 \/ A step2 获得转发器,转发。3 O0 a" O* W+ w: G9 o
RequestDispatcher rd = 3 R7 ~7 s2 s7 v; Y" L
request.getRequestDispatcher(String uri);
, ^+ z0 U5 S: N- z) A, L3 K+ D/ U rd.forward(request,response);' h3 d2 @6 z6 \8 @) r
3)编程中要注意的问题* V& s3 N M F$ C0 I
转发之前,不能够执行out.close或者out.flush。- M+ U% ]4 k# V: e. E
转发之前,会将response中缓存的数据先清空。 ; O+ e3 Q4 t2 J3 s7 n- v
4)转发的特点! J( o2 @7 J1 O# w m( [# v
a,转发的目的地只能是同一个应用内部的某个组件。$ U7 C4 u1 n2 u" p" O
b,转发之后,浏览器地址栏的地址没有变化。
& P. ]1 R# S3 @! X# u1 } c,转发所涉及的各个组件可以共享同一个request,$ [2 |8 _$ y0 v" _* X( s' H/ r: E
response对象。& M( Q+ T( ?0 i" ] w& t( N
思考:
0 l+ {- P$ i6 I: b- l 转发与重定向的区别。
4 y6 ]" Z, ~: G2 i5 f9 b- k2、表单中文问题
7 v$ ?$ g3 }! X1 _ step1 jsp文件,要添加( c3 k6 y+ G, ^& N6 ~
<%@page pageEncoding="utf-8" . X1 {& a5 k0 H- ?/ Z. G
contentType="text/html;charset=utf-8"%>
4 C% P; v" Y8 o, x 表单设置method="post"。* @: P! `8 C# O9 k" O8 H
step2 在servlet类当中,添加2 a6 c6 I3 y+ ]# }
request.setCharacterEncoding("utf-8");5 B: v2 }( h( ?
- B! r) ^& F; g step3 如果要访问数据库:
0 H: W2 `0 @9 ^4 J: J7 ]# E a,保证数据库能够正常地保存中文。+ c R9 d7 ~5 L* f {; B# ]
对于mysql
$ E9 d) R; B/ V create database dbname
1 J0 {' \9 t2 l default character set utf8;
! T7 D( A& z" Q) C( g b,使用jdbc访问数据库时,必须要保证 e/ W" K; U' B" E- u: D, Q
jdbc驱动程序能够识别数据库中保存
1 c8 [. B+ j2 q0 _ 数据的编码。% W/ g1 ^" t9 i, x1 d
jdbc:mysql://localhost:3306/jd1109db2?
8 W7 j& H1 y' L) u& C" g useUnicode=true&characterEncoding=utf8
' m. P' z: z, d! z+ J3、路径问题
. a! z% J1 N# r- o1 W7 N1 G# ]+ H$ f 链接地址、表单提交、重定向、转发的路径应该) k) l* j- q/ o+ ^
如何写?
7 j6 q- J+ \: u# @7 y5 c1 p4 V J. Q/ | <a href=""></a>
3 ]1 G/ b* q" e G% f( k( F <form action="">
$ I$ p. h$ k( A" J response.sendRedirect("");$ a" n4 d8 p0 E4 ^/ S b: c
getRequestDispatcher("");, \* c# ^% f! e* @5 m5 D: }
a,相对路径与绝对路径
) D% P) \6 _3 @. G 相对路径:不以"/"开头的路径,比如:( B4 l" D+ E$ `
<a href="del.do"></a>) B; p& y9 j; t. G/ ]- l
绝对路径: 以"/"开头的路径,比如:: Q3 o [ H Z! h8 q( m$ W0 g
<a href="/appname/del.do"></a>3 A0 W: N' Z) Q) j
b,怎样写绝对路径?
3 Q6 a: u- G, s) z% X7 Y 链接、表单提交、重定向,绝对路径要从2 M3 ~# m8 ]+ w! P1 X: y# M
应用名开始写。9 i, r: g- H2 q1 Y/ X+ }7 ^
转发要从应用名之后开始写。
4 E4 h/ {' [7 ]1 H/ {7 b) i //返回应用名,比如返回"/web05";6 K5 m$ I* N' X
String request.getContextPath();) _ k; Y3 u/ ^- R
|
|