|
该用户从未签到
|
1、转发
2 k9 Y4 B2 ^; U& b4 r 1)什么是转发?
5 U# d$ V; H$ ^) j* K 一个web组件(jsp/servlet)将未完成的处理
' o5 T7 _$ b- N4 u) l' a 转交给另一个web组件继续处理。转发的各个组
: r$ _* y4 Y% {; Q9 j5 C 件会共享request和response对象。1 {/ L1 ]% R( b; l8 |. }3 ?& ?7 a
2)如何转发?' L5 g- |% S' @0 v3 f
step1 先绑订数据
1 M! z L. u" \/ o Y/ V' {, I request.setAttribute(String name,
6 G( g; [6 a) a7 H3 ?/ { Object obj);
2 K6 E+ x0 K; h* m5 S$ N8 z 跟绑订相关的另外两个方法
, z5 A) O7 r0 C' M; ]) K //如果name对应的值不存在,返回null。3 f# A8 H' g6 [! Y+ Z
Object request.getAttribute(String name);+ m$ M, ~; J, ]$ Q, N5 D
request.removeAttribute(String name);% N9 H; u& V, Q6 P% c2 p( H+ m
step2 获得转发器,转发。, O2 f4 X* k6 H8 H# Y4 w
RequestDispatcher rd =
% K$ X/ S) p' g0 {6 }6 y request.getRequestDispatcher(String uri);
9 I" Q1 [! [$ N! m rd.forward(request,response);
* D, v! n/ T2 y0 C9 K- w 3)编程中要注意的问题5 @* k F3 b! p7 U) H" q
转发之前,不能够执行out.close或者out.flush。
p3 M: W' A L 转发之前,会将response中缓存的数据先清空。
D8 Q7 {8 q6 A# r& P" d 4)转发的特点" H* s" X3 P% [0 F/ a' Z) q" `
a,转发的目的地只能是同一个应用内部的某个组件。6 W. m/ S* p4 t0 _
b,转发之后,浏览器地址栏的地址没有变化。$ x* q+ Q W3 J9 c0 Y& u# |
c,转发所涉及的各个组件可以共享同一个request,* L/ s4 n, \0 U/ t5 N
response对象。' p. ~0 ?! _& B* \1 L* J* d7 D
思考:( y Z6 Y+ Y v5 ]
转发与重定向的区别。7 { d; S/ C& g: A' `
2、表单中文问题; k' G6 j& f, }; N* U: P- x
step1 jsp文件,要添加+ D# Q8 e" O, ] y
<%@page pageEncoding="utf-8"
/ c& H% c5 w. c; g7 D contentType="text/html;charset=utf-8"%>
6 y C7 ^; Q m7 c+ H M 表单设置method="post"。7 i' x# `) H1 r0 S; `& C5 L
step2 在servlet类当中,添加
( E. {5 J2 Z4 o/ f+ N. n" Y request.setCharacterEncoding("utf-8");& g$ |; l' k1 G4 \/ z2 C, v) r% w& p
9 l# q; ^1 I1 {+ s' z, P, O
step3 如果要访问数据库:' s- L; i7 U- {: p/ I7 g4 c) _
a,保证数据库能够正常地保存中文。
; O; G4 H8 k! M; h, @4 ~ 对于mysql
1 g" a1 {: C% Q( J X: A create database dbname
% e. C; R) | [7 @9 d# t& e6 A default character set utf8;
3 J5 d6 D& w1 e b,使用jdbc访问数据库时,必须要保证6 g' F9 S/ y$ g8 m7 u1 Q
jdbc驱动程序能够识别数据库中保存5 J" v5 p7 ?( l7 Y
数据的编码。7 I: z6 @) [8 n8 f
jdbc:mysql://localhost:3306/jd1109db2?! A3 E9 |, E4 n& A1 M! _
useUnicode=true&characterEncoding=utf8
1 H5 y4 H. Y8 u. S3 P3、路径问题, k/ ^8 y# R8 D& n) B
链接地址、表单提交、重定向、转发的路径应该- ]. @3 E5 v/ \& x6 e; G- a
如何写?2 l3 I2 s( j# u4 R u, Z
<a href=""></a>6 r C9 `4 O2 d( |
<form action=""> x) [8 t6 x; s$ n) x
response.sendRedirect("");
2 T& v) _1 j1 O9 k! ]7 ?# i- d2 d getRequestDispatcher("");1 k% m2 ^2 T- [9 }" P# ]/ ?
a,相对路径与绝对路径
# P; B' Q9 @( V$ G) o3 e 相对路径:不以"/"开头的路径,比如:
; W' b0 O; o$ }! f! W5 s u2 U4 X <a href="del.do"></a>/ }4 N4 |( p* a# h" i1 M, [* T
绝对路径: 以"/"开头的路径,比如:& e7 c: M, O6 Y" \) h; W! B
<a href="/appname/del.do"></a>
* P8 {" n! J5 X _( Z. _- u9 U b,怎样写绝对路径?
/ p1 K/ T: Q1 T- v. V1 `5 S- g7 | 链接、表单提交、重定向,绝对路径要从
- c1 d2 w. R H$ N8 K* M; N 应用名开始写。. o; C3 @2 N: l3 _ E/ Q5 Q
转发要从应用名之后开始写。
, y6 |7 U: G2 M$ p' ` }) R //返回应用名,比如返回"/web05";
+ M* r9 w6 g6 o [7 f String request.getContextPath();( {( ~& k! y+ R* f
|
|