|
该用户从未签到
|
java server page(java服务器端页面技术)。$ |" ?- D- g/ U# P
是sun公司制订的一种服务器端动态页面生成技术的
; B" R, V# q5 B1 B4 e6 E规范。$ I/ V4 B7 ^- j* K: b
因为直接使用servlet生成页面,如果页面比较复杂,- p- ^. _" \, @+ s
则代码过于繁琐,并且难以维护。所以,对于比较复杂5 M& ?, \; S a: V# Q. n. d+ K
的页面,使用jsp来编写,更容易编写和维护。
" L+ N( n; q* Y# ?5 b2 d 2)如何写一个jsp文件。& _ D8 n9 s5 p/ m& m* D
写一个以.jsp为后缀的文件,然后,在该文件当中,- i) q: Q. H. @- [! s
添加html和java代码。编写完成之后,不需要编译,当
/ h8 P5 p: m( n" }: n客户端请求访问某个.jsp文件,则服务器会自动将
9 Z, z2 i( Z" |( G& s9 ]5 X+ M.jsp文件转换成一个.java文件(该.java文件其实是一个( p7 L! E. F1 h: O/ y+ i7 m
servlet)。6 c8 S3 O! N+ I& f4 q
3)jsp文件的组成; u/ l/ C) D w" C, U1 O
a,html(包括css,javascript):- _1 s3 d3 R9 P w) p9 z
直接写在.jsp文件里即可。
3 Y4 f1 z" T1 F- {, E b,java代码:
$ G' p1 {$ f# W3 E 第一种形式 java代码片断
8 ?$ H4 l, H" k* L9 Q4 a: r4 W7 _ 语法:" D" d$ |+ p4 R$ F7 V, E
<% java代码 %>
[6 p$ w* I! @2 e9 l& ~ 第二种形式 jsp表达式+ [5 R1 q1 M$ `1 X# c
语法:3 r1 v: J5 x2 m3 ~( W: Q8 F
<%= java表达式%># x3 R- C/ m, o& A7 {$ k" x+ O
c,指令:
6 N0 X0 E9 N; \: j1 @9 e, \: d 所谓指令,就是告诉jsp引擎(容器当中,负责' J& r* r- c" W- C7 w
将.jsp文件转换成.java文件,并在运行时,0 g8 w4 W" @3 g
为jsp提供一些 辅助支持的模块),在将.jsp
7 q0 [# O2 H. Y8 A7 h' B/ H0 _ 文件转换成.java文件时,做一些额外的处理。
1 Z5 q$ W5 \8 N+ ]! O: z 语法:: w5 _' @8 O% D
<%@ 指令名 属性名=属性值%>8 e6 E! |/ s* `. m8 \ O' O9 y
page指令
/ Y) R$ L% y0 u" P0 ? import属性:用于导包。
3 n; D4 M3 y, w3 c) }* V, I 比如- u- o n" O8 Y/ _7 [
<%@page import="java.util.*,java.text.*"%>
! e$ a7 H: p% r( v" S contentType属性:等价于1 M% X8 X* |4 m
response.setContentType();
3 y' @* ~# |+ G, z pageEncoding属性:告诉jsp引擎,.jsp文件9 U! Z3 @" H8 s6 P/ `/ ~% [
保存时的编码。8 O9 q% q+ }; w( O, ^
include指令
4 V- Q& _- R# G2 n+ m f1 o. \ file属性
' m# h& d; B h6 \ 告诉jsp引擎,在将.jsp文件转换成* X0 t$ g% Y5 D
.java文件时,在指令所在的位置,插入. v% X8 _7 q) A: K4 s1 s
file属性所指定的文件中的内容。
; @2 |' b/ S3 U& d3 I d,隐含对象
8 u& w/ _' L; G4 B& H 所谓隐含对象,指的是在.jsp文件当中,不用. b; C6 ]' ^% l! t% e3 c8 z2 w4 S/ E
声明和创建该对象,就可以直接使用的对象。原
. k2 k6 ^1 ^# \% P4 `. L 因是,.jsp文件对应的.java文件当中,已经自动
( W: @. G: y, U! N 生成了该对象的代码。5 |+ u3 l( O3 I) ]4 o
out
# X! t& C2 A `" B( }7 G6 A( \, k request
6 h! x2 A1 F- Z7 U: N) h7 w response$ P# E' Z5 @) F
4).jsp文件如何转换成.java文件9 D0 f* r! O8 d+ U9 i, m$ w
a,html ----> 放到service()方法里,使用) C8 Q* O+ h! J: L; [5 Y6 z, ]0 A( l$ A
out.write()输出。
1 n! L/ u9 k' H/ E7 G! Z, g b,java代码片断 -> 放到service()方法里,照搬。1 a6 s& I- a9 C5 u
c,jsp表达式 ----> 放到service()方法里,使用1 o# b& q9 F- R o
out.print()输出。) O, C( _0 f! u% P
8 y, b' i, F d, w* k
& S6 [8 R. a# W: f, P+ R1、转发. o4 t* l$ c& h8 T( ^. L0 _& ~
1)什么是转发?. s9 c1 L* L8 s* H7 T, E! ^
一个web组件(jsp/servlet)将未完成的处理
2 }/ B( }" H4 ^- U, p 转交给另一个web组件继续处理。转发的各个组
% n9 V# w3 d$ o" x 件会共享request和response对象。
5 R \7 @: Y3 X2 J! _ 2)如何转发?
( Y& ?5 [+ S0 A! s/ j. w step1 先绑订数据* W1 d' k5 x A+ ]6 Q5 }
request.setAttribute(String name,
2 q+ i. C! X8 M' e Object obj);
5 o' G* U3 [. b( A 跟绑订相关的另外两个方法
* j0 g$ h( L, D: w; `/ d; H //如果name对应的值不存在,返回null。, E' d8 |6 \5 _1 w" p4 l$ x
Object request.getAttribute(String name);
6 R( d/ r5 e$ P! ^' i4 d! X request.removeAttribute(String name);
" g" \. ]- y& v; o. G; R/ C: H7 o4 t+ V step2 获得转发器,转发。
; K: E4 R. I3 B D" F3 \ RequestDispatcher rd = ! p8 {) M, j6 D) {
request.getRequestDispatcher(String uri);
) b; j- ]. S: s: V rd.forward(request,response);$ \5 v! T) {( o
3)编程中要注意的问题( w% ?+ C4 b, r6 @# x
转发之前,不能够执行out.close或者out.flush。
* f7 D+ F! c* {9 K9 E' ^ 转发之前,会将response中缓存的数据先清空。
9 U- K% L2 J1 t3 Z 4)转发的特点
5 a6 Y& l8 I2 p3 X6 Z a,转发的目的地只能是同一个应用内部的某个组件。
. d% W" F8 [6 k& t! Y9 I+ z b,转发之后,浏览器地址栏的地址没有变化。' K+ K; I+ J5 Q% G5 A( Z
c,转发所涉及的各个组件可以共享同一个request,: I! Z* B+ q/ r3 K' m( u
response对象。
; b. ~4 h8 _, n5 Z+ L+ k" f5 { 思考:, w8 v/ ?# d, M0 D) R$ T( k0 T# Y
转发与重定向的区别。
4 w3 J; w' |6 h3 W1 T8 A/ r2、表单中文问题% D2 N, j M4 m i' @" T
step1 jsp文件,要添加; a, P' Q. Y0 a' u: w; v
<%@page pageEncoding="utf-8"
: Z1 Y; M! Z! u4 \! {& a contentType="text/html;charset=utf-8"%>* R% y- k; e {: D' i h$ L
表单设置method="post"。
/ [% _5 E4 x* A( J. S2 j step2 在servlet类当中,添加, A0 b w7 n6 W
request.setCharacterEncoding("utf-8");; S6 Z3 d6 U; Q& D0 d. e% h4 J' E) W
3 e) Q1 C3 b3 f; [8 u5 O: \ step3 如果要访问数据库:* a/ ]& S6 b. l4 C* g# h1 R
a,保证数据库能够正常地保存中文。
1 [/ y9 C. M3 P7 |) d% s/ n3 _ 对于mysql
v3 m# c' q6 S create database dbname 4 c1 [( V8 o5 |
default character set utf8;, O& g4 d: Q& p2 B" A+ ~, v
b,使用jdbc访问数据库时,必须要保证
" b& G9 ~! I0 m4 s9 D0 R jdbc驱动程序能够识别数据库中保存
1 I5 ]3 |' F- ]0 r0 Q6 }. \ 数据的编码。
% |7 W* V4 o7 Y$ w3 \ jdbc:mysql://localhost:3306/jd1109db2?
. c. b) C1 J3 }! o; j useUnicode=true&characterEncoding=utf8
/ J ~8 T' h" h6 m9 Y1 i, S: G% W) T% _' o' D7 t
3、路径问题7 N5 i! M M1 T' p
链接地址、表单提交、重定向、转发的路径应该
6 S& S) U( X9 N3 H6 Q如何写?
8 u9 M% X* k& Y' K/ U <a href=""></a>
4 j( s8 x9 i3 q$ [ <form action="">
% H+ i$ U" p$ c) { response.sendRedirect("");: J8 h" X7 R( ~# R+ L6 i! `
getRequestDispatcher("");
! |/ n9 I7 ^% \ ?* |1 `* w4 I a,相对路径与绝对路径8 o& S @+ @9 J: w4 T; R
相对路径:不以"/"开头的路径,比如:
4 [9 v" @6 V/ g4 ]( A <a href="del.do"></a>
) p) H% P7 w& ~5 W/ u; ~ 绝对路径: 以"/"开头的路径,比如:
' ?% e$ Y3 o0 e3 C; W7 P* x- g <a href="/appname/del.do"></a>$ ], c9 F6 t* D5 P/ h
b,怎样写绝对路径?# y- N2 s n6 Y
链接、表单提交、重定向,绝对路径要从
2 {! Q W( _; J+ Q. ] 应用名开始写。
. n" j/ \+ U' A) b" ]( z 转发要从应用名之后开始写。
n! p4 s0 @4 W5 Q! C //返回应用名,比如返回"/web05";( Q1 ~7 F+ a3 F; Y5 r5 i/ [
String request.getContextPath();
, Q) K& [# n% V2 \5 @- h6 x5 X$ [: ~- `
|
|