|
该用户从未签到
|
java server page(java服务器端页面技术)。
; X* O+ ?. z# V5 t9 ?# r' d9 y3 w 是sun公司制订的一种服务器端动态页面生成技术的
* U/ u: [6 T* l" \& B规范。
' f2 @2 A; l1 |1 q+ C 因为直接使用servlet生成页面,如果页面比较复杂,2 z6 f) C; a3 u
则代码过于繁琐,并且难以维护。所以,对于比较复杂
n+ n- s2 g% k' h# I的页面,使用jsp来编写,更容易编写和维护。
8 Y, y+ N! y8 R$ A 2)如何写一个jsp文件。
# c8 ?9 |* w3 q6 {, M/ C6 [; j 写一个以.jsp为后缀的文件,然后,在该文件当中,
1 x7 ^# F0 m# g2 J. U. d5 l添加html和java代码。编写完成之后,不需要编译,当* {! G% V: O: O
客户端请求访问某个.jsp文件,则服务器会自动将
^! N5 M: s) c3 V$ ~.jsp文件转换成一个.java文件(该.java文件其实是一个4 S6 R! t0 \- `; H
servlet)。( S7 ?" i6 _* w/ N
3)jsp文件的组成! T( Z! R0 B' h. o. w$ o m
a,html(包括css,javascript):/ ~2 M1 R5 I! V$ Q. v
直接写在.jsp文件里即可。) Q) x* e/ b/ `4 U7 D; h
b,java代码:+ n1 ~. E1 ?& \8 R% M0 E. z& I4 p
第一种形式 java代码片断
s* S3 G* F9 R2 {( K' \$ S. k 语法:' o8 F. \1 Z5 X: @6 G0 F
<% java代码 %>
B* q" Z% n5 Q7 d, ]% x3 q% J 第二种形式 jsp表达式0 v# p% i) z# s
语法:$ q4 a# O: Q% [; s2 G
<%= java表达式%>
! t6 p# C! q. I, [& B! m3 R c,指令:6 K* I) o2 e" s9 _2 l# R
所谓指令,就是告诉jsp引擎(容器当中,负责, N$ F: T2 j2 ]( d
将.jsp文件转换成.java文件,并在运行时,
3 y3 n1 j2 P% \" X 为jsp提供一些 辅助支持的模块),在将.jsp
! I4 ^9 t+ c" U- V$ S5 B 文件转换成.java文件时,做一些额外的处理。
# {( ~# S: ]8 H$ e4 X1 | 语法:
% ~# [7 W/ ^1 l2 K0 K \ <%@ 指令名 属性名=属性值%>
7 Y6 O; C% r3 z page指令
Z1 i8 _4 F- y( O, f import属性:用于导包。
1 j4 x( C, a4 A6 _- h5 @/ q 比如2 d# j; P9 v- H* `; C
<%@page import="java.util.*,java.text.*"%>
' b- r# R* n, U3 E) C contentType属性:等价于9 p- Z2 |( O h c
response.setContentType();9 M( `: ?- z) g F7 y5 @, [, V6 b
pageEncoding属性:告诉jsp引擎,.jsp文件
3 t2 d$ ^. e/ {9 u 保存时的编码。. G R- y( \9 U, ? s
include指令
2 a# Y3 J6 G5 p1 H& ]7 C file属性* w1 u p6 o2 x$ u
告诉jsp引擎,在将.jsp文件转换成
; `& G6 L9 p. M( V0 w. p .java文件时,在指令所在的位置,插入
; _& F; n# e$ [5 d# ?. b- j file属性所指定的文件中的内容。/ i' v" {2 I: Z" n
d,隐含对象. D0 f5 g! @' b" u* ~# o
所谓隐含对象,指的是在.jsp文件当中,不用" x! z3 P2 \+ E3 @# K# i% e0 y% {
声明和创建该对象,就可以直接使用的对象。原
7 V4 G" j/ |4 Y 因是,.jsp文件对应的.java文件当中,已经自动
& L6 G( [; S8 ?3 S d5 j8 k( N( F3 T4 Q 生成了该对象的代码。
1 N% F" V& o- W% a: s1 e6 b out
% @) B" @9 j w9 W3 E request! D8 g2 a6 j( Y' b. M, A$ [0 c
response/ K/ t+ ?: V) j" Y2 v0 K
4).jsp文件如何转换成.java文件
- r/ T' P. ]. ]5 H& z9 g a,html ----> 放到service()方法里,使用0 S) K% m% e9 S" L* b/ f
out.write()输出。
4 o: D& o: W1 D+ v( k b,java代码片断 -> 放到service()方法里,照搬。2 G) o+ F+ j; |$ ~& Q
c,jsp表达式 ----> 放到service()方法里,使用0 g) y. Y# c; X$ X
out.print()输出。7 O' q! d" G6 g: n
! [2 J% h% N! R. c0 N! z) D
# B4 e5 k; T( `. M* `1 o; D
1、转发/ o' Q% s/ } E! ]3 M3 N6 z
1)什么是转发?
/ c5 @& Y, c. R. G" B 一个web组件(jsp/servlet)将未完成的处理
, k C6 j' F* D j5 Q$ ^. H9 r 转交给另一个web组件继续处理。转发的各个组
. m/ L& o" i; W* j+ p5 d% I* J 件会共享request和response对象。5 d% c( i3 y+ Y; A# ]- a
2)如何转发?$ M6 e c6 c- k7 W% R* G) Z5 E% G! Z
step1 先绑订数据
3 y- u4 H& ^$ I3 t- D b request.setAttribute(String name,
U: p: \4 x3 F( [8 I Object obj);; k6 {/ L0 s7 V; d5 V& S
跟绑订相关的另外两个方法
1 L, P9 o/ ~6 f+ e //如果name对应的值不存在,返回null。, b2 y' x+ {! h
Object request.getAttribute(String name);4 g: B+ a" g8 G
request.removeAttribute(String name);
4 K1 t" a' K' O5 l+ @: e step2 获得转发器,转发。
8 D6 W- T6 J) i: Y3 Y RequestDispatcher rd = 4 @- W0 x7 N" b0 H; s
request.getRequestDispatcher(String uri);
$ M+ G2 i3 v: h- t8 ` rd.forward(request,response);. ~- S( b7 K% B$ f0 V L1 w
3)编程中要注意的问题5 u. y7 e6 A: Z
转发之前,不能够执行out.close或者out.flush。% R: U0 b% [6 H) N: R. p9 {
转发之前,会将response中缓存的数据先清空。 ' ]. S: h. |5 v7 e; }: W
4)转发的特点6 z- U; a" C: ~) h3 V$ M- b& y
a,转发的目的地只能是同一个应用内部的某个组件。
' d2 G- C& J! z, D8 p b,转发之后,浏览器地址栏的地址没有变化。
# l3 T- Y/ o5 ?* W9 H) G; q c,转发所涉及的各个组件可以共享同一个request,
6 U1 Q5 H( }# ]4 }' f8 T& T+ B response对象。
! H- m" u& \7 H 思考:
, J! f8 i% j) m9 V0 G9 d 转发与重定向的区别。
) m3 X/ `* a* s+ [2 f( F7 }4 K$ I2、表单中文问题
3 I$ P1 m9 O; W0 P4 V& ]" ] step1 jsp文件,要添加# e% Z7 n& S: o$ R- w4 @/ U2 X
<%@page pageEncoding="utf-8"
3 y/ T$ ]* Y0 f2 P contentType="text/html;charset=utf-8"%>4 R7 l3 m: Z. s8 ]/ X
表单设置method="post"。
6 t0 v% [! w1 p9 R* Q# v2 ?9 j step2 在servlet类当中,添加
; a. ?/ {8 I$ v request.setCharacterEncoding("utf-8");. I! _+ |; ?& l5 r" A6 a
6 |8 Z9 o3 ~5 [ Z [
step3 如果要访问数据库:# K: _' _" @6 W2 Y4 k- R
a,保证数据库能够正常地保存中文。
g' y- p& P0 e- a' c 对于mysql9 D7 t9 g. L8 {$ Z
create database dbname 3 F* r$ K: R- t/ H8 f- q$ B$ b
default character set utf8;- c9 F/ Y+ [9 \: w# f6 P
b,使用jdbc访问数据库时,必须要保证
- ^& t) ~& r/ k$ ~; L2 O+ x jdbc驱动程序能够识别数据库中保存7 K8 l3 E! U! B/ ?) L: W* M
数据的编码。
. d7 D1 @5 b2 j6 b& J5 V& ^ jdbc:mysql://localhost:3306/jd1109db2?3 \: e, j6 g6 l4 z
useUnicode=true&characterEncoding=utf8% u" t$ a3 `8 T0 N
" T" a# y$ J3 }3 e3、路径问题( ^0 P& _% b; ~9 o, Q
链接地址、表单提交、重定向、转发的路径应该 {! g5 r% ?9 `5 [
如何写?
. L$ f8 s7 R( V4 S K4 o V <a href=""></a>5 c( P( O; s. I3 h
<form action="">
5 T4 [, [" w- @4 P* ^ response.sendRedirect("");) ^. Z) B7 |. \& k! o, @, D
getRequestDispatcher("");
& o! T; Y0 k: A4 i8 X' D3 b' X4 T; l a,相对路径与绝对路径
- I# x, e/ \& i* r& J- g& K 相对路径:不以"/"开头的路径,比如:
6 h9 N' R% Z4 Q+ c$ Z <a href="del.do"></a>
! [9 A/ {' A. v5 b0 H; n' Y 绝对路径: 以"/"开头的路径,比如:
( x% b& G8 z3 D <a href="/appname/del.do"></a>
9 ?- f5 H; A6 c5 V \. L; q b,怎样写绝对路径?7 P+ C3 K' I: {3 X2 q
链接、表单提交、重定向,绝对路径要从
6 d, p5 l. W9 M. L1 ]" m( P 应用名开始写。! v0 P$ U: K5 ?; l7 ]
转发要从应用名之后开始写。
$ }0 x! o3 l. z! o4 F+ r6 X //返回应用名,比如返回"/web05";
- ?$ M3 W4 @' i% ?% Y String request.getContextPath();) K% k+ B2 A, \% ? T
8 ?5 w+ t2 w+ N% F1 I {
|
|