第四章 jsp 语法 ( 续 )

35
第第第 JSP 第第 ( 第 ) 南南南南南南南南南南南南南 西 南南南南南南JSP

Upload: yvonne

Post on 24-Jan-2016

118 views

Category:

Documents


0 download

DESCRIPTION

西南科技大学网络教育系列课程 动态网页设计( JSP ). 第四章 JSP 语法 ( 续 ). 内容提要. 理解服务器动作指令行 所有 HTML 文件可以在资源管理器中双击执行. 介绍 JSP 页面的结构. JSP 的编译指令、操作指令和代码. 但是 JSP 文件必须先放到 Web 服务器中,然后通过 HTTP 的方式访问。因为文件内所有 内代码是被 Web 服务器解释执行的。. 理解服务器端执行. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第四章  JSP 语法  ( 续 )

第四章 JSP 语法 ( 续 )

西南科技大学网络教育系列课程动态网页设计( JSP)

Page 2: 第四章  JSP 语法  ( 续 )

动态网页设计( JSP) http://www.swust.net.cn

内容提要

理解服务器动作指令行所有 HTML 文件可以在资源管理器中双击执行

介绍 JSP 页面的结构

但是 JSP 文件必须先放到 Web 服务器中,然后通过 HTTP 的方式访问。因为文件内所有 <%%> 内代码是被 Web 服务器解释执行的。

JSP 的编译指令、操作指令和代码

Page 3: 第四章  JSP 语法  ( 续 )

动态网页设计( JSP) http://www.swust.net.cn

理解服务器端执行

<%@ page language="java" contentType="text/html;charset=GBK"%><%@page import="java.util.*"%><%

Date dnow = new Date();int dhours = dnow.getHours();int dminutes = dnow.getMinutes();int dseconds = dnow.getSeconds();

out.print(" 服务器时间: " + dhours + ":" + dminutes + ":" + dseconds);

%>

<SCRIPT LANGUAGE="JavaScript">var dnow = new Date();dhours = dnow.getHours();dminutes = dnow.getMinutes();dseconds = dnow.getSeconds();document.write("<br> 浏览器时间: " + dhours + ":" + dminutes +

":" + dseconds);</SCRIPT>

Page 4: 第四章  JSP 语法  ( 续 )

动态网页设计( JSP) http://www.swust.net.cn

Java 程序片在 Jsp 中,在“ <%” 和 “ %>” 之间书写的程序代码为 Java 程序片在程序片中声明的变量只在页面有效,是局部变量,不能共享。

但是,在“ <% !”和 “ %>” 之间声明的变量可以在不同的客户间共享,有效范围是整个 Jsp 页面,声明周期是服务器关闭后变量才会被释放。

JSP 表达式用来把 Java 数据直接插入到输出。其语法如下:< %= Java Expression % >

计算 Java 表达式得到的结果被转换成字符串,然后插入到页面。计算在运行时进行(页面被请求时),因此可以访问和请求有关的全部信息。例如,下面的代码显示页面被请求的日期/ 时间:Current time: < %= new java.util.Date() % >

Page 5: 第四章  JSP 语法  ( 续 )

动态网页设计( JSP) http://www.swust.net.cn

Java 程序片

在表达式中 JSP 应遵守以下规则:

实例: simpleCounterApp1.jsp

JSP 表达式的内容必须是一个“完整”的 Java 表达式。

JSP 表达式的内容必须是一个“单独的” Java 表达式。

一定不能以分号结束一个 Java 表达式(与 JSP 声明不同)。

Page 6: 第四章  JSP 语法  ( 续 )

动态网页设计( JSP) http://www.swust.net.cn

注释

JSP 注释语法格式如下:<!-- comment [ <%= expression %> ] --> 或<!-- 注释 [<%= 表达式 %> ] -->这种注释发送到客户端,但不直接显示,在源代码中可以查

看到。

JSP 另外一种注释语法格式如下: <%-- 注释 --%> 不发送到客户端。

Page 7: 第四章  JSP 语法  ( 续 )

动态网页设计( JSP) http://www.swust.net.cn

JSP 页面结构

在一个 JSP 页面中,主要分为三种元素:编译指令、动作指令和 JSP 代码。

– 编译指令告诉 JSP 的解释引擎(比如: Tomcat ),需要在编译时做什么动作,比如引入一个其它的类动作指令 JSP 页面的使用什么语言编码等。

– 动作指令(操作指令)则是在 JSP 页面被请求时,动态执行的,比如可以根据某个条件动态跳转到另外一个页面。

– JSP 代码指的就是我们自己嵌入在 JSP 页面中的 Java 代码,这又分为两种:第一种是 JSP 页面中一些变量和方法的声明,在声明时,使用“ <!%” 和“ %>” 标记。另外一种,就是常用到的用“ <%” 和“ %>” 包含的 JSP 代码块

Page 8: 第四章  JSP 语法  ( 续 )

动态网页设计( JSP) http://www.swust.net.cn

page 指令

page 指令是针对当前页面的指令。 page 指令由“ <%@” 和“ %>”字符串构成的标记符来指定。在标记符中是代码体,包括指令的类型和值。

例如: <%@page import=“java.sql.*”%> 指令告诉 JSP 容器将 java.sql 包中的所有类都引入当前的 JSP 页面。

编译指令

常用的 page 指令标记有 8 个:– language 、 extends 、 import 、 errorPage 、 isErrorPage 、 cont

entType 、 isThreadSafe 和 session 。

Page 9: 第四章  JSP 语法  ( 续 )

动态网页设计( JSP) http://www.swust.net.cn

page 指令

language 设置 JSP 页面中用到的语言,默认值为“ Java” ,也是目前唯一有效的设定值。使用的语法是:<%@ page language="java"%> 。

编译指令

import 设置目前 JSP 页面中要用到的 Java 类,这些 Java 类可能是 Sun JDK 中的类,也有可能是程序员自己定义的类。例如: <%@page import="java.sql.*,java.util.*"%> 。

有些类在默认情况下已经被加入到当前 JSP 页面,而不需要特殊声明,包括四个类: java.lang.*;java.servlet.*;java.servlet.jsp.* 和 java.servlet.http.* 。

Page 10: 第四章  JSP 语法  ( 续 )

动态网页设计( JSP) http://www.swust.net.cn

page 指令extends 设定目前 JSP 页面要继承的父类。一般情况下不需要进行设

置。在默认情况下, JSP 页面的默认父类是 HttpJspBase 。例如:当前 JSP 页面要继承 mypackage 包下的 myclass 类,相应的声明语句为:“ <%@ page extends="mypackage.myclass"%>” 。

编译指令

errorPage 用来设定当 JSP 页面出现异常( Exception )时,所要转向的页面。如果没有设定,则 JSP 容器会用默认的当前网页来显示出错信息。例如:

“<%@page errorPage="/error/error_page.jsp"%>”

isErrorPage 用来设定当前的 JSP 页面是否作为传回错误页面的网页,默认值是“ false” 。如果设定为“ true” ,则 JSP容器会在当前的页面中生成一个 exception 对象。

Page 11: 第四章  JSP 语法  ( 续 )

动态网页设计( JSP) http://www.swust.net.cn

使用 errorPage 指令捕获异常

<%@ page language="java" errorPage=“error.jsp"contentType="text/html;charset=GBK"%><%

int dividend = 0;int divisor = 0;int result = 0;try {

result=dividend/divisor;}catch(ArithmeticException zz) {

throw new ArithmeticException( " 除数不能为零! " );}

%>

<%@ page isErrorPage="true"contentType="text/html;charset=GBK"%>当前页面是: errortest.jsp<br><%out.print(exception.toString());%>

Page 12: 第四章  JSP 语法  ( 续 )

动态网页设计( JSP) http://www.swust.net.cn

contentType 这个属性用来设定传回网页的文件格式和编码方式,一般使用 “ text/html;charset=GBK” 。

page 指令编译指令

isThreadSafe 定义 JSP 容器执行 JSP 程序的方式,默认值为“ true” ,代表 JSP 容器会以多线程方式运行 JSP 页面。当设定值为“ false” 时, JSP 容器会以单线程方式运行 JSP 页面。

session 定义当前 JSP 页面中是否要用到 session ,默认值为“ true” 。

Page 13: 第四章  JSP 语法  ( 续 )

动态网页设计( JSP) http://www.swust.net.cn

include 指令

include 指令用来指定怎样把另一个文件包含到当前的 JSP 页面中,这个文件可以是普通的文本文件,也可以是一个 JSP页面。例如:“ <%@ include file = ”logo.htm“%>” 。

采用 include 指令,可以实现 JSP 页面的模块化,使 JSP 的开发和维护变得非常简单。

实例: includeSample1.jsp

Page 14: 第四章  JSP 语法  ( 续 )

动态网页设计( JSP) http://www.swust.net.cn

动作指令

JSP 编译指令是让 JSP 容器自动采取的动作,但对于 Web 开发人员,有些时候想要自己控制 JSP 页面的运行,这时可以采用 JSP 中的操作指令。

JSP 标准动作<jsp: useBean> 标记<jsp: getProperty> 标记<jsp: setProperty> 标记<jsp: forward> 标记<jsp: include> 标记

Page 15: 第四章  JSP 语法  ( 续 )

动态网页设计( JSP) http://www.swust.net.cn

动作指令

JSP 动作的作用

– 通过标记库定义自定义标记

–实例化对象

–与服务器端资源进行通信

–提高组件的可重用性,增强应用的可维护性

–使 JSP 页面可与 JavaBean 对象进行交互

Page 16: 第四章  JSP 语法  ( 续 )

动态网页设计( JSP) http://www.swust.net.cn

JSP 标准动作

JSP 动作的语法– JSP 动作标记遵循 XML 语言的语法

具有一个名称

具有前缀 jsp:

用一对尖括号( < 和 > )括起来

在尖括号内定义标记:

– 起始标记 - 以元素的名称开头

– 结束标记 - 以正斜线开头,后面紧跟元素名称

– 空标记 - 以元素名称开头,以正斜线结束

Page 17: 第四章  JSP 语法  ( 续 )

动态网页设计( JSP) http://www.swust.net.cn

jsp:include 指令

jsp:include 标准动作用于在当前的 JSP 页面中加入静态和动态的资源。

语法格式为:– <jsp:include page=“test.htm”/>– jsp:include 指令必须以“ /” 结束,功能和 includ

e 指令大致相同。

区别: include( 操作指令 ) :编译时包括,形成一个整体 include( 动作 ): 运行时包括

Page 18: 第四章  JSP 语法  ( 续 )

动态网页设计( JSP) http://www.swust.net.cn

jsp:forward 指令

jsp:forward 动作指令用于把当前的 JSP 页面转发到另一个页面上。

基本语法为:– “<jsp:forward page=”test2.jsp“/>” ,– 使用该功能时,浏览器的地址栏中地址不会发生

任何变化。

Page 19: 第四章  JSP 语法  ( 续 )

动态网页设计( JSP) http://www.swust.net.cn

jsp:param 指令

jsp:param 操作指令以标记“ <jsp:param>” 开始,以“ />”结束比如: <jsp:param name=“oper” value=“add”/> 。

可以将 jsp:forward 操作指令和 jsp:param 操作指令结合到一起来使用。

使用 jsp:param 操作指令可以在执行 jsp 动作指令 forward 操作动作时,追加参数 . 以动作指令字 / 值的方式进行传递。

实例: forwardExample1.jsp

paramExample1.jsp

Page 20: 第四章  JSP 语法  ( 续 )

动态网页设计( JSP) http://www.swust.net.cn

<jsp:plugin>

JSP 语法格式如下:<jsp:plugin

type="bean | applet"

code="classFileName"

codebase="classFileDirectoryName"

使用“ <jsp:plugin>” 插入一个 applet 或 Bean ,必要的话还要下载一个 Java 插件用于执行它。

Page 21: 第四章  JSP 语法  ( 续 )

动态网页设计( JSP) http://www.swust.net.cn

<jsp:plugin>

[ <jsp:params>

[ <jsp:param name="parameterName"

value="{parameterValue | <%= expression %>}" /> ]+

 </jsp:params> ]

 [ <jsp:fallback> text message for user </jsp:fallback> ]

</jsp:plugin>

实例: appletExample1.jsp

Page 22: 第四章  JSP 语法  ( 续 )

动态网页设计( JSP) http://www.swust.net.cn

JSP Bean 标记与 JavaBean 交互的三个标记

– <jsp:useBean>– <jsp:getProperty>– <jsp:setProperty>

Page 23: 第四章  JSP 语法  ( 续 )

动态网页设计( JSP) http://www.swust.net.cn

<jsp:useBean>

创建一个 Bean实例并指定它的名字和作用范围。 JSP 语法格式如下:

<jsp:useBean id="bean name" scope="page | request | session | application" class="class name" />

或者<jsp:useBean id="bean name"

scope="page | request | session | application" class="class name ">

初始化代码</jsp:useBean>

Page 24: 第四章  JSP 语法  ( 续 )

动态网页设计( JSP) http://www.swust.net.cn

属性以及用法

1. id="beanInstanceName"在所定义的范围中确认 Bean的变量,使之能在后面的程序

中使用此变量名来分辨不同的 Bean ,这个变量名对大小写敏感,必须符合所使用的脚本语言的规定,这个规定在Java Language 规范已经写明。如果 Bean已经在别的“ <jsp:useBean>”标记中创建,则当使用这个已经创建过 Bean时, id的值必须与原来的那个 id值一致;否则则意味着创建了同一个类的两个不同的对象。

Page 25: 第四章  JSP 语法  ( 续 )

动态网页设计( JSP) http://www.swust.net.cn

2.

scope="page | request | session | application"

属性以及用法

bean 存在的范围以及 id 变量名的有效范围。缺省值是 page ,以下是详细说明:

– page - 能在包含“ <jsp:useBean>” 元素的 JSP 文件以及此文件中的所有静态包含文件中使用这个 Bean, 直到页面执行完毕向客户端发回响应或转到另一个文件为止。

Page 26: 第四章  JSP 语法  ( 续 )

动态网页设计( JSP) http://www.swust.net.cn

request - 在任何执行相同请求的 Jsp 文件中使用这个 Bean,直到页面执行完毕向客户端发回响应或转到另一个文件为止。能够使用 Request对象访问这个 Bean,比如 request.getAttribute(beanInstanceName)。

属性以及用法

session - 从创建Bean开始,就能在任何使用相同 session的 jsp 文件中使用这个 Bean。这个 Bean存在于整个 Session生存周期内,任何在分享此Session的 Jsp 文件都能使用同一 Bean。注意在创建这个 Bean的 Jsp 文件中“ <% @ page %>”指令中必须指定 session="true"。

Page 27: 第四章  JSP 语法  ( 续 )

动态网页设计( JSP) http://www.swust.net.cn

application - 从创建 Bean开始,就能在任何使用相同 application 的 Jsp 文件中使用 Bean 。这个 Bean存在于整个 application生存周期内,任何在分享此 application的 Jsp 文件都能使用同一 Bean.

属性以及用法

Page 28: 第四章  JSP 语法  ( 续 )

动态网页设计( JSP) http://www.swust.net.cn

3. class="package.class"

– 使用 new 关键字以及 class 构造器从一个 class中实例化一个 bean 。这个 class 不能是抽象的,必须有一个公用的,没有参数的构造器。这个 package 的名字区别大小写。

属性以及用法

Page 29: 第四章  JSP 语法  ( 续 )

动态网页设计( JSP) http://www.swust.net.cn

<jsp:getProperty>

JSP 语法格式如下:<jsp:getProperty name="beanInstanceName"

property="propertyName" /> 属性:1. name="beanInstanceName" bean的名字,由 <jsp:useBean>指定。 2. property="propertyName" 所指定的 Bean的属性名。

Page 30: 第四章  JSP 语法  ( 续 )

动态网页设计( JSP) http://www.swust.net.cn

<jsp:getProperty>例子

<html>//声明引用的 bean<jsp:useBean id="calendar" scope="page" class="em

ployee.Calendar" /><head><title>test</title></head><body> Calendar of <jsp:getProperty name="calendar" property="username" /> </body>

</html>

Page 31: 第四章  JSP 语法  ( 续 )

动态网页设计( JSP) http://www.swust.net.cn

<jsp:setProperty>

设置 Bean的属性值 . JSP 语法格式如下:<jsp:setProperty name="beanInstanceName" { property= "*" | property="propertyName" [ param="parameterName" ] |

property="propertyName" value="{string | <%= expression %>}"

} />

Page 32: 第四章  JSP 语法  ( 续 )

动态网页设计( JSP) http://www.swust.net.cn

属性

1 . name="beanInstanceName" – 表示已经在“ <jsp:useBean>” 中创建的 Bean

实例的名字。2 . property="*"

– 储存用户在 jsp输入的所有值,用于匹配 Bean中的属性。

Page 33: 第四章  JSP 语法  ( 续 )

动态网页设计( JSP) http://www.swust.net.cn

3 . property="propertyName" [ param="parameterName" ] – 用一个参数值来指定 Bean 中的一个属性值,

一般情况下是从 request 对象中获得的。其中 property指定 Bean 的属性名, param指定 request 中的参数名。

属性

Page 34: 第四章  JSP 语法  ( 续 )

动态网页设计( JSP) http://www.swust.net.cn

4. property="propertyName" value="{string | <%= expression %>}" – 使用指定的值来设定 Bean属性。这个值可以是字符串,也可以是表达式。如果这个字符串,那么它就会被转换成 Bean属性的类型(转换方法见表 4.1)。如果是一个表达式,那么它的类型就必须和将要设定的属性值的类型一致。

– 如果参数值为空值,那么对应的属性值也不会被设定。此外,不能在同一个“ <jsp:setProperty>” 中同时使用 param和 value 参数 。

属性

Page 35: 第四章  JSP 语法  ( 续 )

动态网页设计( JSP) http://www.swust.net.cn

汉字问题两种解决方法

当利用 request.getParameter 得到 Form 种元素的时候,默认的情况字符编码为 ISO-8859-1 ,这种编码不能正确的显示汉字。

<%String str=request.getParameter("boy"); byte b[]=str.getBytes("ISO-8859-1"); str=new String(b); %>

实例: chineseStringExample1.jsp

目前有两种解决方法 :

一种是在执行操作之前,设置 request 的编码格式,语法是:request.setCharacterEncoding(“GBK”);

另一种方法是转换字符编码 :