该用户从未签到
|
1、转发
/ ~6 J: g4 ?; L 1)什么是转发?
, F2 Z( x* g; l: Q 一个web组件(jsp/servlet)将未完成的处理, F, m, M% H6 s. q5 Z+ h2 z
转交给另一个web组件继续处理。转发的各个组7 J8 n8 {% o* l, |( Y1 x
件会共享request和response对象。 H. r9 x7 ^1 _; v$ _
2)如何转发?
$ M* x8 V/ J% f8 d step1 先绑订数据
: m% i" {- x0 J* }& w( }; u \ request.setAttribute(String name,
) E% K8 }5 k1 Z) [ Object obj);
# E: _; ~/ h3 ~. k 跟绑订相关的另外两个方法* l7 n5 h8 `( {5 b: y/ t* S
//如果name对应的值不存在,返回null。& W. |2 T* ~0 J
Object request.getAttribute(String name);
1 o+ w- x, f* T. H request.removeAttribute(String name);
8 y4 _- ~' a1 e; u. n+ C4 i+ M+ H step2 获得转发器,转发。3 c3 H0 w( H5 a
RequestDispatcher rd = 9 ]% @0 |/ B3 `
request.getRequestDispatcher(String uri);" [0 S, D% s. d, j) o+ @
rd.forward(request,response);$ t! h7 g% |# b% S
3)编程中要注意的问题$ S8 i8 T; ^7 d, B
转发之前,不能够执行out.close或者out.flush。, u0 i! J8 v9 ?- R
转发之前,会将response中缓存的数据先清空。
) x* c5 [2 n9 k k& L1 D 4)转发的特点& q( C9 f$ n5 q! X% v
a,转发的目的地只能是同一个应用内部的某个组件。 h) I9 n6 n& s' F
b,转发之后,浏览器地址栏的地址没有变化。
+ o) b* _& m. x* q" g c,转发所涉及的各个组件可以共享同一个request,
, R w) v# ~/ K response对象。5 X; H$ c9 l% `+ d- g, D
思考:/ y6 ^3 W' u, ?+ k
转发与重定向的区别。
. Z+ h5 E* o$ ^ A( ]0 v8 d2、表单中文问题
e3 P9 n; g- P9 Q7 k step1 jsp文件,要添加
4 u: j7 j' ^7 _. w+ n <%@page pageEncoding="utf-8" 2 g4 }$ U: N) i. Y7 {0 o
contentType="text/html;charset=utf-8"%>: X ^) t( D8 m% n% D, m
表单设置method="post"。8 r: S* X5 G9 \) p3 _6 y
step2 在servlet类当中,添加
. D( J) D/ I- t4 ]4 _ request.setCharacterEncoding("utf-8");
% N- t$ e3 v" X* o / o$ h% z8 g% T8 a: c8 @! R' w
step3 如果要访问数据库:# `/ @* `, T" l p ?+ {
a,保证数据库能够正常地保存中文。, B4 z5 i- Z6 z! S9 Z& L
对于mysql
' v8 Z0 j. E+ r create database dbname
b8 I) X h6 j3 S default character set utf8;% Q2 T) R- ^7 a& L1 h* t7 J
b,使用jdbc访问数据库时,必须要保证
! Z2 Y g# b7 }( A$ Z3 |. v jdbc驱动程序能够识别数据库中保存" \: E& Q5 @# _3 |, _
数据的编码。
% I4 v+ U# z! t) u" Y jdbc:mysql://localhost:3306/jd1109db2?
& B, D c9 F- R/ | useUnicode=true&characterEncoding=utf8+ j* I3 q1 ^; b6 m \
3、路径问题8 I* q7 o- }5 o& T; M: B+ f5 ^
链接地址、表单提交、重定向、转发的路径应该
# k5 W5 D3 D$ m$ R8 B1 M: P如何写?
2 S# ?; Q' N, W5 t) P. o* g# J& l. f <a href=""></a>
, B' h3 R$ S5 [ <form action="">
& C) i- a* `2 B" w& ]1 e! G% A response.sendRedirect(""); ~; m' G8 N" ^8 I; R9 w
getRequestDispatcher("");
' @. u7 J5 Y/ [4 D a,相对路径与绝对路径
$ Y# N9 U( Y, p3 q; V6 S- O. v 相对路径:不以"/"开头的路径,比如:$ j/ P: ]. ]9 j* j
<a href="del.do"></a>
# y; j/ ?. [: u 绝对路径: 以"/"开头的路径,比如:/ f$ H0 l+ W, f5 n" f* N
<a href="/appname/del.do"></a>
& e$ }" F7 q1 i m+ l b,怎样写绝对路径?! x" }* ?. X& Q. S4 k7 J
链接、表单提交、重定向,绝对路径要从2 R+ z, |. H' k' e
应用名开始写。; } g, P, n9 m) J0 o$ R
转发要从应用名之后开始写。( g0 t# x2 e$ E/ S* w J' v
//返回应用名,比如返回"/web05";
9 f" e/ {5 L4 w. ]1 m, \ String request.getContextPath();$ @, G3 \3 `8 l9 X7 m
|
|