|
该用户从未签到
|
1、转发: ?0 N$ W. S7 C, v& C
1)什么是转发?
6 I& n) B4 X/ t; z; l! G% t 一个web组件(jsp/servlet)将未完成的处理
% u. \6 P: y3 m0 m 转交给另一个web组件继续处理。转发的各个组" r! n. q5 p2 q7 D: [
件会共享request和response对象。# C; w {& ?5 E6 ^0 F
2)如何转发?
6 n1 T U( D8 T, P2 ?+ {2 d step1 先绑订数据1 [1 e- a8 @9 f- ~
request.setAttribute(String name,
( v9 B6 O0 Q0 l4 i6 W- ]9 e Object obj);
7 j4 q5 j- s( _ 跟绑订相关的另外两个方法
* F' V& ?, `( [ //如果name对应的值不存在,返回null。. L& {6 n# L) M$ {0 g5 X! v9 C
Object request.getAttribute(String name);
) p, q4 l1 P0 L7 E1 j) E7 h: H request.removeAttribute(String name);2 A- m5 c+ u, V. c8 ` d
step2 获得转发器,转发。
/ K) I% z* z; z8 m9 {' G* e [ RequestDispatcher rd =
9 f/ Q. k F7 R9 Z0 I8 d request.getRequestDispatcher(String uri);- c, n; K8 y$ j, p2 }6 n
rd.forward(request,response);6 Y, Q2 O7 _' t" M6 A
3)编程中要注意的问题
a7 M& l. a0 x7 v9 l3 P 转发之前,不能够执行out.close或者out.flush。8 A) K# V1 C/ j' o( t- X8 s
转发之前,会将response中缓存的数据先清空。 , F. _3 T" u3 ~/ l
4)转发的特点
7 G3 R( n+ ?9 \0 v' P' \ a,转发的目的地只能是同一个应用内部的某个组件。. @/ P0 o) h- o* _
b,转发之后,浏览器地址栏的地址没有变化。
6 r7 R" l2 u$ |. |$ c6 ^0 r; b) v% w c,转发所涉及的各个组件可以共享同一个request,' a- ?4 i' q/ E- [& f9 Z
response对象。1 u) j* `6 |1 i
思考:
' y0 y0 h& ?* T' T4 E. f0 `! Y 转发与重定向的区别。. d% y+ }+ S! U. X
2、表单中文问题; W- a: q7 K/ d: f& p
step1 jsp文件,要添加
2 p7 o2 y0 E8 x) n <%@page pageEncoding="utf-8"
" l8 ]: ~7 \, G3 V contentType="text/html;charset=utf-8"%>
, r- W8 [2 ]9 Q4 V' K) d) L 表单设置method="post"。5 f2 F0 T A! \$ g; f& \, w
step2 在servlet类当中,添加
- W9 p1 {) A6 _" ~) u$ z8 m+ { request.setCharacterEncoding("utf-8");5 w1 t1 d, ]7 |
7 ^! Q3 Z E2 F step3 如果要访问数据库:
( B9 y, d6 i' m& m% h, O! | a,保证数据库能够正常地保存中文。1 o7 ], B" S, N0 O1 |4 U b
对于mysql4 x$ e. v4 Q: B4 R+ x
create database dbname * l8 R2 k/ `" g( c
default character set utf8;
8 v$ S; [$ a3 n1 G# ~- |9 z/ Q b,使用jdbc访问数据库时,必须要保证
& `* J9 U0 a+ @; t jdbc驱动程序能够识别数据库中保存; J; o; u3 j0 B E) {
数据的编码。
5 s) p7 G9 A9 ?9 f5 E/ X jdbc:mysql://localhost:3306/jd1109db2?
6 c, `4 v8 i8 \/ D f useUnicode=true&characterEncoding=utf8
* `8 f2 D3 w$ s) O c3 G& \3、路径问题
4 Y6 j; Y# z% a3 _ 链接地址、表单提交、重定向、转发的路径应该
) ^, w2 [- D! D1 c% d) \- i如何写?
& V! Y% `) ]) M/ C: f <a href=""></a>
8 S3 { [5 L1 {1 @ N! h8 g <form action="">7 ]/ @; r, ^2 U5 E: w) k" J% j
response.sendRedirect("");
8 `: I, T0 i$ ?2 f' I+ _ getRequestDispatcher("");
: F3 Q( ^" u5 Z+ e a,相对路径与绝对路径" n, [: } w; X4 N& ~- ?. P0 J5 o
相对路径:不以"/"开头的路径,比如:+ S/ r' }' `$ @: O `
<a href="del.do"></a># J W* C$ x1 U$ n! z* N
绝对路径: 以"/"开头的路径,比如:
) I/ u, D4 o+ x1 S+ Y <a href="/appname/del.do"></a>/ l5 v7 C) h$ s6 I x3 n- p2 u
b,怎样写绝对路径?
! ^- F& l; M6 | S6 l5 X 链接、表单提交、重定向,绝对路径要从
' j$ y4 S- O ^ 应用名开始写。
' p/ x" h& E8 Z9 g2 l' N( a 转发要从应用名之后开始写。4 k$ A3 X: R! l9 }1 d! \
//返回应用名,比如返回"/web05";7 o) `) V6 n" V5 M! D
String request.getContextPath();0 T( R- m# S* j7 i: T. @$ j4 S! _% A
|
|