78
1 第第第 第第第第第第第第第 2.4 动动动动动动 2.4.1 动动动动动动动 2.4.2 动动动动动 2.4.3 动动动动动动动

2.4 动态网页技术

  • Upload
    jenn

  • View
    86

  • Download
    2

Embed Size (px)

DESCRIPTION

2.4 动态网页技术. 2.4.1 动态网页的含义 2.4.2 客户端脚本 2.4.3 服务器端的脚本. 2.4.1 动态网页的含义. 动态页面的核心:在于接收用户数据 , 用于业务处理,存储到企业的 DB 中 , 或将处理结果及 DB 内容显示在网页上。 动态 重点不在如何获得数据(属数据层技术),更不在如何构建复杂的业务逻辑(逻辑层技术),而是 实现用户与应用程序的通信 ,及如何将所获数据显示出现,目标仍在网页上,即信息的表达上。. 2.4.1 动态网页的含义. 动态网页与静态网页的特征比较 - PowerPoint PPT Presentation

Citation preview

Page 1: 2.4   动态网页技术

1

第二章 商务表达层及其技术

2.4 动态网页技术

2.4.1 动态网页的含义2.4.2 客户端脚本2.4.3 服务器端的脚本

Page 2: 2.4   动态网页技术

2

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

2.4.1 动态网页的含义 动态页面的核心:在于接收用户数据 , 用于业务处理,存储到企业的 DB 中 , 或将处理结果及 DB 内容显示在网页上。

动态重点不在如何获得数据(属数据层技术),更不在如何构建复杂的业务逻辑(逻辑层技术),而是实现用户与应用程序的通信,及如何将所获数据显示出现,目标仍在网页上,即信息的表达上。

Page 3: 2.4   动态网页技术

3

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

2.4.1 动态网页的含义 动态网页与静态网页的特征比较

静态网页 : 静态网页主要通过标记语言完成信息的组织和显示。无商务逻辑处理及与用户进行交互的能力

内容固定不变,不随客户访问要求的改变而改变; 页面文件预先储存在 Web 服务器上; 通过超链接来访问其它的网页; 可含有动画的内容

动态网页 内容随客户访问要求的改变而改变; 内容的生成可在客户端完成(通过客户端脚本、 Applet 插件、

ActiveX 控件),也可在服务器端完成(通过服务器端脚本,如JSP 、 ASP 、 PHP ) ;

动态网页是连接商务表达层和商务逻辑层的桥梁 能与用户进行交互,根据不同客户请求来生成不同的页面内容; 也可含有动画的内容

Page 4: 2.4   动态网页技术

4

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

2.4.1 动态网页概述

实例 : 简易计算器的实现 P68.htm 代码见备注

<script language="JavaScript" type="text/javascript"><!-- function ex(x) { if(x=="=") window.document.form1.text1.value=eval(window.document.

form1.text1.value); else if(x=="C") window.document.form1.text1.value=""; else window.document.form1.text1.value=window.docu

ment.form1.text1.value+x;}

Page 5: 2.4   动态网页技术

2.4.2 客户端脚本 客户端脚本体系结构(如下图)

一种向客户端提供动态内容的有效途径,是将脚本作为 HTML 页面的一部分从服务器传送给客户端,脚本通常不需与服务器应用程序通信就能在客户端执行的应用逻辑。

应用逻辑通常较简单,不要求显示新内容,也不做页面切换。 通常复杂逻辑仍由服务器执行,需要客户端给服务器新的请求,服务器处理后将结果

返回给客户端,最终还是由脚本进一步处理 在这种结构中,程序在浏览器上执行, Web 服务器必须把程序代码下传给浏览器,而

浏览器也要能够执行服务器所传下来的程序代码。优点:服务器与用户通信较少,需用的服务器资源少支持该体系结构技术有: ECMAScript/JavaScript/Jscript,VBScript,DHTML

浏览器

客户请求页面切换

产生

页面简单控制逻辑

内容修改

切换复杂控制逻辑

商业逻辑

内容构建加逻辑嵌入

响应

客户机 服务器浏览器

客户请求页面切换

产生

页面简单控制逻辑

内容修改

切换复杂控制逻辑

商业逻辑

内容构建加逻辑嵌入

响应

浏览器

客户请求页面切换

产生

页面简单控制逻辑

内容修改

切换复杂控制逻辑

商业逻辑

内容构建加逻辑嵌入

响应

客户机 服务器

程序 IE 可否执行 NC 可否执行

Java √ √JavaScript √ √VBScript √ ×

ActiveX 控件

√ ×

Page 6: 2.4   动态网页技术

1. JavaScript 脚本与实例 脚本是如何产生的?

早期 Web 服务顺只能返回在 URL 里指定的文件的内容,网页只能显示静态内容,随 Web 应用广泛,要求交互功能。最初动态由 CGI 技术实现,通过使用编程语言( C 、 VB )由服务器端执行。为了提供客户端性能,由客户端执行一引起基本的逻辑操作和编程,而HTML 不是一种编程语言,它本身不能做任何处理操作,就需要一种语言来指导计算机如何处理网页,这种自定义的命令集合就是脚本( Script )语言。

脚本特征:允许在 Web 页面的 HTML 中插入一些程序 脚本语言类型

ECMAScriptJavaScript 网景公司 Netscape 2.0VBScript Jscript 微软公司 IE 浏览器

静态网页的客户端实现技术利用高级语言编写功能模块( Applet 插件、 ActiveX 控件)嵌入 HTML标记中将客户端脚本嵌入 HTML 中( JavaScript 、 VBScript 、 JScript ;)

Page 7: 2.4   动态网页技术

1 、 JavaScript 脚本技术 JavaScript 是一种基于对象和事件驱动并具有安全性能的

脚本语言,在客户端浏览器被解释执行,提供响应并具有处理用户交互事件的能力

JavaScript 在网页中有两种用法直接加入 HTML 文档

一个实例 说明

JavaScript 脚本以 <script language=“JavaScript”> </script> 作为标记;

<!-- --> 为说明语句,这样不支持 JavaScript 的浏览器就会忽略掉当中的脚本语句;

JavaScript 脚本可放在 HTML 文件中的任意位置,在浏览器读到后就会解释执行。

Document.write() 是 JavaScript 的窗口对象方法,其功能是显示一串文字至 HTML 文件中。

JavaScript 中区分大小写 firstjs.html引用方式

要求有一个 JavaScript 源文件(以 .js 为扩展名)这种方式可提高程序代码利用率,其基本格式:

<script src=url language=“JavaScript”> </script> 例: scriptjs.htm script.js

<html><head> <script language="JavaScript"> <!-- document.writeln("JavaScript 脚本示例! "); //--> </script></head><body>……</body></html>

例:选创建一个 Script.js 文件,其内容为:document.write (" 这是 JavaScript!采用直接插入的方法 ! ");在网页中这样调用:<script src="script.js" language="javascript"></script>

Page 8: 2.4   动态网页技术

1 ) JavaScript 的基本特点 是一种脚本编写语言,采用小程序段的方式实现编程。其基本结构如同 C , C++ , VB…,但不需编译,而是在程序运行过程中被逐行解释。

基于对象的语言能运用自己已创建的对象

简单性 安全性

不允许访问本地硬盘,不允许将数据存入到服务器,不允许对网络文档进行修改和删除,只能通过浏览器实现信息浏览或动态交互

动态性直接响应用户或客户输入

跨平台性依赖浏览器本身,无操作环境无关

Page 9: 2.4   动态网页技术

9

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

2)JavaScript 语言与 java区别 它们分属于两个不同的公司 ;

Netscape 是嵌入web 页面中的基于对象和事件驱动的解释性语言SUN 面向对象的程序设计语言

JavaScript 是基于对象的,而 Java 是面向对象的 ; 两种语言在浏览器中执行的方式不一样 ;

前者不需经编译 ,直接发送到客户端由浏览器解释 ; 后者需经过编译 , 同时在客户端须具有相应平台的解释器

两种语言中对变量的使用方式不一样 ;前者是弱变量类型 ,即无须使用前声明 ,解释器在解释执行时再检查它的数据类型 ; 后者强类型变量须在编译前先声明

代码格式不一样 ;前者是一种文本字符 , 可直接嵌入 HTML 中 , 可动态装载 ; 后者代码格式与 HTML 无关 , 其代码以字节的形式保存在独立的文件中 ,HTML 中须引用外媒体一样装载

嵌入方式不一样 前者 <script>………</script>; 后者 <applet>………</applet>

静态绑定和动态绑定 前者动态 ; 后者静态

Page 10: 2.4   动态网页技术

10

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )2. JavaScript 中的数据类型与变量

JavaScript 有六种数据类型,分别为:Number (数值数据)、 String (字符串)、 Object (对象) 以及 Boolean (布尔值)、 Null(空) 和 Undefined (未定义的数据类型) ;

Number :包括整数和浮点数。整数可以为正数、 0或者负数;浮点数可以包含小数点 , 也可以使用科学记数法 ;

String:字符串,用单引号或双引号来说明 ; Object : JavaScript 中的重要组成部分,含有方法和属性。在 JavaScript 中,存在这几种类型的对象,一是由浏览器根据页面的内容自动生成的对象,如表单(Form)对象、框架 (Frame)对象、链接对象等;二是内置对象,如 Date 、 Math 、 window 、 document等;三是用户自定义的对象。

Page 11: 2.4   动态网页技术

11

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )2.JavaScript 中的数据类型与变量 Boolean 类型:代表某种可能,其值为 true或 false 。这是两个特殊的值,不能用 1 和 0来表示 ;Null :表示没有任何值 ;Undefined :表示一个变量被创建后,在未赋值以前所具有的值 , 如 : var x; var y = true; 则 y 变量就成为一个Boolean 类型的变量,而 x 变量在赋值之前的类型暂时为 Undefined .数据类型转换示例(与 java 有所不同):

var x=”123.0578”;//x 为字符串 x=parseFloat(x).toFixed(3);//小数点保留 3位 x=Math.round(parseFloat(x)*100);//四舍五入取整 x=Number(“123”);//x 的值为整数

Page 12: 2.4   动态网页技术

12

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

3.JavaScript 脚本中的对象与事件 对象

由浏览器根据 web 页面的内容自动提供的对象 JavaScript 的内置对象,如 Date,Math 、 window 、 document等 服务器上的固有对象用户自定义的对象

事件引起页面之间跳转的事件,主要是超链接事件 浏览器自己引起的事件 表单内部同界面对象的交互事件

Page 13: 2.4   动态网页技术

13

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )3.JavaScript 脚本中的对象与事件对象的定义与使用方式

Page 14: 2.4   动态网页技术

14

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )3.JavaScript 脚本中的对象与事件

对象的定义与使用方式<script language="javascript">function Dog(name,breed,color,sex) { this.name=name; this.breed=breed; this.color=color; this.sex=sex; this.eat=eatfun;}function eatfun(x) {document.write(x);}theDog = new Dog("Gabby","Lab","chocolate","girl");theDog.eat("has ate!");</script>

Page 15: 2.4   动态网页技术

算术函数 math 对象绝对值 abs() ;正弦余弦值 sin(),cos()反正弦反余弦: asin(),acos()正切反正切 :tan(),atan()四舍五入: round()平方根: sqrt()

日期及时间对象提供一个有关日期和时间的对象,必须使用 new运算符创建一个实例。 Mydate=new date();获取日期的时间方法

getYear(); 返回年数 getMonth(); 返回当月号数 -1 getDate(); 返回当日号数 getDay(); 返回星期几 getHours(); 返回小时数 getMintes(); 返回分钟数 getSeconds(); 返回秒数getTime(); 返回毫秒数设置日期和时间

setYear();设置年份 setMonth()设置月份 setDate()设置当前日期

Page 16: 2.4   动态网页技术

16

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

4.JavaScript 脚本中的变量及命名规则 JavaScript 中的变量用来存放 JavaScript 中的值 ,

JavaScript 对变量的数据类型要求不太严格(与 Java 、 VB 、 C++ 等高级语言不同),所以在声明变量时,不需要指出变量的类型。

变量声明格式如: var men = true; 变量命名规则

JavaScript 是一种区分大小写的语言,因此将一个变量命名为 computer 和将其命名为 Computer 是不一样的 变量名的第一个字符必须是一个字母(大小写均可)、或一个下划线 (_) 或一个美元符 ($) ,后续的字符可以是字母、数字、下划线或美元符 变量名不能是保留字 变量名长度没有限制

Page 17: 2.4   动态网页技术

5.JavaScript 脚本中的主要语句( 1 )变量声明语句: var x,y;赋值语句: x=25.3;函数定义语句 :

function 函数名称 (函数所带的参数 )   { 函数执行部分 ;    return 表达式 ; }

JavaScript 中系统函数 返回字符串表达式中的值

eval (字符串表达式)例: test=eval(“8+9+5/2”); 返回字符串 ASCII 码

unEscape(string); 返回实数

parseFloat(floustring); 返回不同进制的数

parseInt(numberstring,rad.X) parseInt(64,16) 返回 16 进制的 64十进制是多少

其中 rad.X 是数的进制, numberstring字符串数

function Name(x1,x2,x3,x4){ number=name.arguments.length; if(number>1)

document.write(x2); if(number>2)

document.write(x3); if(number>3)

document.write(x4);}

Page 18: 2.4   动态网页技术

5.JavaScript 脚本中的主要语句( 2 )条件语句 ( if…else ),如

if (result == true)  { response = "你答对了! " }  else{ response = "你错了! "     }

分支语句 ( switch ),如switch(expression)  { case label1: 语句串 1 ;    case label2: 语句串 2 ;    case label3: 语句串 3 ;       ...    default: 语句串 3 ; } 循环语句: for , for...in , while,break,continue 对象操作语句: with , this , new 注释语句: // , /*...*/ 数组定义

Page 19: 2.4   动态网页技术

6.JavaScript几个实例 例 1 : p73.htm 例 2.5

<html><head><meta http-equiv="Content-Type" content="text/html; ch

arset=gb2312"><title> 显示日期 </title>

<script language="JavaScript" type="Text/JavaScript"><!--today=new Date();document.write(" 现在时间是: ",today.getHours(),":",today.g

etMinutes());document.write("<br> 今天日期为: ",today.getMonth()+1,"/",

today.getDate(),"/",today.getYear());//--></script>

</head></html>练习:请将此 Script修改,使显示日期如右图所示 p73_1.htm

Page 20: 2.4   动态网页技术

20

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

JavaScript 的事件驱动 JavaScript 事件驱动中的事件通过鼠标或热键的动作引发,主要的几个事件:

单击事件 onClick。作用对象有: Button按钮对象 Checkbox 复选框或检查列表框 Radio 单选钮 Reset buttons重设按钮 Submit buttons 提交按钮例: <form<input type=“button” value=“改变” onClick=“change()”></form><input type=“button” value=“ ” onClick=alert(“这是一个例子”

> ;onChange 改变事件利用 text或 texturea元素输入字符值改变时引发

例: <form<input type=“text” name=“Text” onChange=“check(‘this.tes

t)”></form>

Page 21: 2.4   动态网页技术

21

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

JavaScript 的事件驱动获得焦点事件 onFocus

当用户单击 text或 textarea 及 select对象时,产生。此时该对象成为前台对象

失去焦点 onBlur 当对象 text或 textarea 及 select 不再拥有焦点而退到后台时产

生。与 onFocus事件对应载入文件 onLoad 例 autoload.html

当文档载入时产生。 onLoad 一个作用就是在首次载入一个文档时检测 cookie 的值,并用一个变量为其赋值,使它可以被源代码使用

卸载文件 onUnload 当Web 页面退出时引发 onUnload事件,并可更新 cookie状态

Page 22: 2.4   动态网页技术

22

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

利用 JavaScript制作动态网页 P74.html 例 2.6

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=g

b2312"> <title> 无标题文档 </title> </head> <body onLoad="open('notice.html','通知 ','toolbar=no,location=n

o,status=no,menubar=no,scrollbars=no,resizable=yes,width=200,height=140')">

一个电子商务站点 </body> </html>说明:在 JavaScript 中,内置的窗口对象 window 有一方法: open ,用它可打开一个新窗口,此方法的格式为: open('notice.html','通知 ','toolbar=no,location=no,status=no,menubar=no,scrollbars=no,resizable=yes,width=200,height=140')

Page 23: 2.4   动态网页技术

23

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

2.4.3 利用 Applet 实现动态网页当浏览器浏览到一个含有 Applet小程序的 HTML 文件时,嵌入的 Applet 程序代码会自动地从服务器上下载到客户的浏览器中,交给浏览器中的 Java虚拟机执行。这样,也能实现人机交互,并能进行必要的商务逻辑处理,实现与后台服务器的交互 ;能执行含有 Applet 网页的程序通常被称为 Applet 容器,因此,浏览器是一种 Applet 容器;在 Java 2软件开发工具包1.4.1版中也有一个 Applet 容器,它就是 appletviewer ;IE 浏览器,在初始状态下不是 Applet 容器 ,需要下载安装Applet 插件;真正支持 Applet 动态网页的浏览器是 Netscape7,( channels.netscape.com/ns/browsers/download.jsp )。

Page 24: 2.4   动态网页技术

24

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

1. Applet 插件与实例 Applet 是由 java 语言编写的包含在网页里的一种程序,称为

java 小程序,它不能独立运行,是特殊的客户端脚本。 通常该小程序在服务器上,当浏览器浏览一个含有 Applet 的

网页时,它就从服务器端下载到客户端的浏览器中,借助浏览器中的 java 虚拟机( JVM )运行工作。这样,利用 Applet就能实现人机交互,并能进行必要的商务逻辑处理,实现与后台服务器交互

Java规定 Applet 不能对客户方文件系统进行操作,也不能启动客户方的任何程序,故对浏览者是安全的。但浏览器复杂度增高,客户端负担加重,同时需要大量的带宽便于每次执行时下载。

客户端执行逻辑图: Client

( 浏览器 )

Applet

Web Server

HTML 页面

请求

响应HTML 后台

数据源Socket 连接

Page 25: 2.4   动态网页技术

25

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

2.4.3 利用 Applet 实现动态网页 编写 Applet 动态网页的步骤

第一步,用 Java开发工具编写一个符合 Applet规范的 Java 源程序,源程序文件的扩展名当然应为 .java ;第二步,利用 Java编译工具将此 Java 源程序编译成一个扩展名为 .class 的类文件;第三步,编写一个网页,在此网页中,利用“ <applet>”标识,来嵌入此类文件,最后将网页文件和 Applet类文件一起发布到网站上

Page 26: 2.4   动态网页技术

26

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

JAVA Applet 实例

利用 Applet 实现对商品总金额进行合计第一步 :编写源程序 P75.java ( 代码见备注 )第二步 :利用命令 javac p75.java 进行编译生成 p75.class第三步 :编写网页 p75.html第四步 :测试 p75.html使用命令 :appletviewer p75.htmlP75.html 代码

<html><head><title>Applet Test</title></head><applet code="p75.class" width="400" height="120"></applet></html>

Page 27: 2.4   动态网页技术

例:利用 Applet制作一个站点连接器

P77.java p77.class p77.htm 利用 Applet 制作一个站点连接器的动态网页。当在 List 框中选择某一站点时,

浏览器就将显示该站点的内容。只需将站点的 URL 作为 Applet Content 接口的 showDocument() 方法的参数

<html><head><title>site selector</title></head><body><applet code="p81.class" width="300" height="85"><param name="title0" value="Java Home Page"><param name="location0" value="http://java.sun.com/"><param name="title1" value=" 上海师范大学 "><param name="location1" value="http://www.shnu.edu.cn/"><param name="title2" value="Google search Engine"><param name="location2" value="http://www.google.com/"><param name="title3" value=" 上海热线 "><param name="location3" value="http://www.online.sh.cn/"></applet></body></html>

Page 28: 2.4   动态网页技术

Applet 动态网页实例 乘法练习 egcf.java,egcf.html

先写一 .java 文件(代码在备注中),经过编译生成 .class再写一 .htm 文件,引用 class 文件,并将该文件存于网页文件同一目录中浏览网页

可在 IE 中打开 利用命令 appletviewer打开网页

更多客户端 Script效果请参考 Http://202.121.63.4/tang 上的 Script51问网页

<html><head><title> Applet Test </title></head><applet code=p77.class width=430 height=300 ></applet></html>

Q47.html;atom.class原子轨道Q48.html;flag.class 红旗飘扬

Page 29: 2.4   动态网页技术

2.5 服务器端脚本 服务器端逻辑体系结构

完全依靠服务器提供用户界面内容,其构造逻辑及与用户的相互作用如下图

服务器端的操作分三部分 控制逻辑:服务器收到客户端的请求,取出传递的参数并确定相应

的“业务对象”,并进行适当的“业务动作” 业务逻辑:

处理特定业务知识,并与几乎所有的相关技术代码相分离,这些技术代码包括分析和生成数据格式,数据库和 I/O处理,或内在和进程处理

内容构造:执行业务逻辑之后的结果会被格式化,并可辅之以布局和其他一客户端显示所需的信息。

浏览器

用户动作

内容和控制的产生

控制逻辑

业务逻辑

内容构建

响应

请求

Page 30: 2.4   动态网页技术

30

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

2.5 服务器端脚本 服务器端的脚本是指能够在服务器上运行的脚本,其脚本形式与客户端的脚本没有太大的差别,也是将脚本直接嵌入到网页中。但不同的是,在网页被传送到浏览器之前,服务器会预先运行网页中的服务器端脚本,运行产生的结果合并到 HTML 中。

与客户端脚本相比优势:( 1 )不存在浏览器兼容的问题,所有浏览器收到的都是标准的 HTM

L 代码;( 2 )可以很容易地访问服务器上的资源;( 3 )在存取敏感数据时,较为安全,脚本直接在服务器上执行,身份等敏感信息不可能暴露到客户端上;

( 4 )简化了客户端的装载,脚本的执行由 Web 服务器承担。 常用的服务器端的脚本有 JSP 、 PHP 、 ASP 、 CGI 、 Se

rvlet 等

Page 31: 2.4   动态网页技术

31

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

2.5.1 PHP PHP(Personal Hypertext Preprocessor ,个人超文本预处理器 ) 是一种易于学习和使用的服务器端的脚本语言,它将自己的标记嵌入在 HTML文件中,其语法大部分是从 C 、 JAVA 、 PERL 语言中借用过来的,并形成了自己的独有风格 ;

PHP 安装方便,简单易学 ; 在 PHP 中提供了标准的数据库接口,可以连接多种类型的数据库,和自由代码的 MYSQL 数据库配合更是“天衣无缝” 。

下载: www.php.com

Page 32: 2.4   动态网页技术

32

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

2.5.1 PHP

PHP 的安装与设置安装 appserv

( http://www.appserv.com)安装 apache+php+mysql

(http://www.php.com 、 http://www.mysql.com 、 http://www.appserv.com)

测试: http://localhost/phpinfo.php <?php

phpinfo();?>

Page 33: 2.4   动态网页技术

33

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

2.5.1 PHP

示例 1 :数据库的生成与数据表的建立

<html><head> <title>电子商务应用的安装 </title></head><?php$pagesize = 5; //每页显示 5条记录$host="localhost"; //Mysql数据库管理系统的域名$user="root"; //Mysql数据库管理系统的登录用户名$password="111111";//Mysql数据库管理系统的登录用户密码$dbname="book"; //数据库名称//登录到MySQL数据库管理系统mysql_connect("$host","$user","$password") or die(" 无法连接 MySQL数据库服务器 !"); mysql_query("drop database if exists ".$dbname); // 若 book数据库已存在,则删除它mysql_query("create database ". $dbname); // 建立 book数据库$db = mysql_select_db("$dbname") or die(" 无法连接数据库 !"); //打开数据库 bookecho "Now will insert the database structure<br />";$structure[] = "

CREATE TABLE users ( id int(10) unsigned NOT NULL auto_increment,

loginname text NOT NULL, user text binary NOT NULL, password text NOT NULL,

department text, title text, role text NOT NULL,

approved tinyint(3) unsigned NOT NULL default '0', PRIMARY KEY (id)) TYPE=MyISAM;";

$structure[] = "CREATE TABLE employees ( id int(10) unsigned NOT NULL auto_increment,

no text, user text binary NOT NULL,

department text, title text, sex text, birth date,

PRIMARY KEY (id)) TYPE=MyISAM;";

$i = 0; //建立数据表 users 和 employees

while($i < count($structure)){ echo "&nbsp;&nbsp;Inserting Table No. ".($i+1);

mysql_query("set names GBK"); mysql_query($structure[$i]) or mysql_error();

echo "...Done!<br />"; $i++;

}echo "...Done!<br />";echo "set users initial value...<br />";mysql_query("set names GBK");mysql_query("INSERT INTO users SET id=1,loginname='admin',user='admin',password='123456',role='1',approved=1");echo "...Done!<br />";?></html>

Page 34: 2.4   动态网页技术

34

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

2.5.1 PHP

示例 2 :利用 PHP 脚本实现文件的上传步骤 1 :建立网页文件 upload.htm, 存放到站点根目录下 ;步骤 2 :建立脚本文件 upload.php, 存放到站点根目录下 ;运行

<html><head> <title> 上传文件 </title></head><body> <form target="_self" enctype="multipart/form-data" action="upload.php" method="post"> <table border="0" width="80%" cellspacing="0" cellpadding="0" align="center"> <tr><td aligh="left"> 请指定文件 : <input type="hidden" name="max_file_size" value="8000000"></td></tr>   <tr><td><input name="upfile[]" type="file" size=40></td></tr>   <tr><td><input name="upfile[]" type="file" size=40></td></tr>   <tr><td><input name="upfile[]" type="file" size=40></td></tr>   <tr><td><input name="upfile[]" type="file" size=40></td></tr> <tr><td>&nbsp;</td></tr> <tr><td><input type="submit" value=" 上传文件 ">&nbsp;&nbsp;&nbsp;&nbsp;<input type='button' value=' 关闭窗口 ' onclick='window.close()' /></td></tr> <tr><td>&nbsp;</td></tr> <tr><td>&nbsp;</td></tr> <tr><td><font color='blue' size="1">说明:一次最多上传四个文件,每个文件大小应小于 8M字节 </font></td></tr> </table> </form> </body> </html>

<?php $success=true; $filecount=0; $filename=""; $failurefilename=""; $dir="c:/".substr(date("Y-m-d"),0,4); if(!is_dir($dir)) mkdir($dir);for($i=0;$i<4;$i++) { if($_FILES['upfile']['tmp_name'][$i] != "") { $result=move_uploaded_file($_FILES['upfile']['tmp_name'][$i],$dir."/".$_FILES['upfile']['name'][$i]); if ($result){ $filecount=$filecount+1; $filename.=$_FILES['upfile']['name'][$i].","; } else { $success=false; $failurefilename.=$_FILES['upfile']['name'][$i].","; } } } //end forif($success && $filecount>0) {?><html><head> <title> 上传文件结果 </title></head><body > <table border="0" width="80%" cellspacing="0" cellpadding="0" > <tr><td> 文件 :<?=$filename?>已成功上传,共计 <?=$filecount?>个文件 </td></tr> <tr><td>&nbsp;</td></tr> <tr><td>&nbsp;</td></tr> <tr><td align="center"><input type='button' value=' 关闭窗口 ' onclick='window.close()' /></td> </tr> </table></body> </html> <?php exit; } else {?><html><head><title> 上传图像文件 </title></head><body><?php if($filecount>0) echo "<font style='font-color:red'> 文件 :".$failurefilename." 上传失败,请重新上传 </font><br>"; else echo "<font style='font-color:red'> 文件上传失败,请重新上传 </font><br>";?> </body> </html> <?php }?>

Page 35: 2.4   动态网页技术

35

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

2.5.2 ASP ASP ( Active Server Page ,活动服务页),是微软公司开发的一种服务器端的脚本技术,它没有提供自己专门的编程语言,而是允许用户使用包括 VBScript 、 JavaScript 等在内的许多已有的脚本语言来编写 ASP 的应用程序。 ASP吸收了当今许多流行的技术,如 IIS 、 ActiveX 、 VBScript 、 ODBC 等,是一种发展较为成熟的 Web 应用程序开发技术;其核心功能支持对象组件,通过使用 ASP 的组件和对象,调用 ActiveX 控件,可实现强大的商务功能 。

后台 ( 服务器端 ) : Windows NT/2000 +IIS Windows 98+PWS 4.0(Personal Web Server)前台 ( 客户端 ) :网页浏览器 Browser

ASP文件特点:将 VBscript 、或 JavaScript 嵌入到 HTML 中在 ASP 中,脚本在服务器端运行,当客户请求一个 ASP 文件时,服务器就把文件解释成标准的 HTML 文件发回客户端。在服务器端运行的好处:不受客户端浏览器限制,便于和服务器交换数据,如存取数据库。

Page 36: 2.4   动态网页技术

36

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

2.5.2 ASP 优点:

VBScript 源自 VB ,简单易学;脚本语言直接嵌入 HTML 文档,无需编译、连接就可以解释执行;利用 ADO组件轻松存取数据库;面向对象编程,可扩展 ActiveX Server 组件功能;不存在浏览器兼容问题;可隐藏源程序代码

缺点:(1)运行速度比 HTML慢;(2) ASP 一般限于Windows NT/2000 平台 , 不能跨平台

Page 37: 2.4   动态网页技术

37

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

2.5.2 ASP 常用的内置对象和组件主要有:

( 1 ) Request对象:用来连接客户端的 Web 页( .htm文件)和服务器的 Web 页( .asp 文件);

( 2 ) Response对象:用于将服务端数据发送到客户端;( 3 ) Server对象:它可以创建各种 Server对象的实例以简化用户的操作;

( 4 ) Application对象:它是应用程序级的对象,用来在所有用户间共享信息,所有客户都可以访问这个对象。

( 5) Session对象:它为每个访问者提供一个标识; Session 可以用来存储访问者的一些数据,在购物网站中,Session 常用于创建购物车( Shopping Cart )。

Page 38: 2.4   动态网页技术

38

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

ASP 中常用的内置对象和控件 1)Request 对象:用来连接客户端的 Web 页( .htm文件)和服务器的 Web 页( .asp文件),可以获取客户端数据,也可以交换两者之间的数据。

Request对象共有五种获取方法,分别是: QueryString 、 Form 、 Cookies 、 ServerVariables 、 ClientCertificat

e

语法:Request. 获取方法(参数)

例如:<%

Request.Form(“user_name”) ‘获得表单中的用户名 %> 例: eg3_3.htm eg3_3.asp

Page 39: 2.4   动态网页技术

39

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

ASP 中常用的内置对象和控件 2)Response 对象:用于将服务端数据发送到客户端,可通过在客

户端浏览器显示,用户浏览页面的重定向以及在客户端创建 cookies 等方式进行。该功能与 Request 对象的功能恰恰相反。

Response对象可以使用的方法有下面三个: Write :直接送出信息给客户端。 Redirect :引导客户端至另一个 URL位置。 End :结束程序运行 Cookies :设置 Cookies值。

可以使用的属性有下面两个: Buffer :设置为缓冲信息。 ContentType :控制送出的文件类型若在 <%……%>间只有一行 Response.Write 语句,则可将它简写成 <%=……%> ,如:下面两句等价

<% Response.Write Now %> <%=Now %>例: char2\eg3_4.asp( 源代码见备注)

Page 40: 2.4   动态网页技术

40

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

ASP 中常用的内置对象和控件 3)Server 对象:许多高级功能都靠它来完成;它可以创建各种 Ser

ver 对象的实例以简化用户的操作如: COM 对象和 Scripting组件

语法为: Server.方法 |属性 ( 变量或字符串 |=整数 )

常见的属性有 ScriptTimeout( 脚本运行时间) 方法主要有

CreatObject <%Set db=Server.CreateObject(“ADODB.Connection”) ‘建立数据库实例%>

HTMLEncode 对特殊符号进行编码,如显示原始标记等 如 eg3_5.asp<% Response.Write Server.HTMLEncode (“<a href=http://www.sohu.com>搜狐

</a>”) %> URLEncode :根据 URL编码原则将字符串编码 , 用来转化字符串

<%=Server.URLEncode(“<a href=’http://www.sohu.com’>搜狐 </a>”)%> 输出:

%3Ca+href%3D%27http%3A%2F%2Fwww%2Esohu%2Ecom%27%3E%CB%D1%BA%FC%3C%2Fa%3E

MapPath: 将虚拟路径或相对路径转换为真实路径 例: eg3_5_1.asp

Page 41: 2.4   动态网页技术

41

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

ASP 内置组件基本功能:

Page 42: 2.4   动态网页技术

42

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

利用数据库存取组件存取数据库 常用的数据操作对象 ADO ASP 网页制作中,用来存取数据库的对象统称为 ADO( ActiveX Data Objexts )。包含子对象有七个,其中主要的有:

Connection对象:负责打开或连接数据库文件。如:可以使用该对象建立与 Access数据库的连接,以便查询、操作数据库

Recordset对象:用来读取数据库(表)的数据。如:可以把一组查询结果记录赋给该对象,再利用该对象的属性和方法来操纵它们

Command对象:用来代表一个特殊的指令。如:可以使用该对象来执行一条 SQL查询语句

Page 43: 2.4   动态网页技术

43

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

(1)Server 对象的属性和方法 ScriptTimeout 属性

该属性用来规定脚本文件执行的最长时间,比如,如果系统创建一个数据库连接,如果超过规定时间还没有连接上就停止连接。默认为 90 秒:语法:

Server.ScriptTimeout=整数(秒)例如:

<% Server.ScriptTimeout=300 ‘设置最长执行时间为 300 秒%>

Page 44: 2.4   动态网页技术

44

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

(2) CreateObject 方法 Server 的一种方法,用途是:建立一个具有某种功能的对象(一般可以建立一个已经在服务器上注册的 ActiveX Server 的组件变量实例),它可以是 ASP 的内部组件,如数据库存取组件,也可以是第三方提供的组件(如 Windows 中 .dll文件)。语法很简单:

Set objectname=Server.CreateObject(ObjectGroup.ObjectName)Objectname: 代表建立的对象变量的名称ObjectGroup :代表对象库,它包含很多对象,也就是对象的总集合ObjectName :代表对象库中的一个对象

例如:<%Set db=Server.CreateObject(“ADODB.Connection”) %> ‘建立数据库实例

Page 45: 2.4   动态网页技术

45

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

(3)HTMLEncode方法 该方法功能是将特殊的符号进行编码,使得特殊符号可以正常显示于客户端的浏览器。(即用来输出为 ASCII形式的 HTML 代码),语法:

Server.HTMLEncode(“string | specialcharacter”) String 和 specialcharacter 代表想显示在浏览器中的字符串或特殊符号

常使用该方法的地方是访客留言板和聊天室。若要在客户端写入特殊符号,如 < > & 等符号或 HTML 标记,就可使用 Server.HTMLEncode方法对特殊符号进行编码,当客户端的浏览器收到这种经过编码的特殊符号时,会对它们进行译码,然后把译码的结果显示出来。

<% Response.Write Server.HTMLEncode (“<a href=http://www.sohu.com>搜狐 </a>”)%>

Page 46: 2.4   动态网页技术

HTMLEncode方法示例

<HTML><HEAD><TITLE> server 示例 </TITLE></HEAD><BODY>这是一个 Server 示例,用于显示特殊符号,网站地址全名等 <p><% = "<a href=http://www.sina.com.cn> 新浪 </a>" %><br><% = server.htmlencode("<a href=http://www.sina.com.cn>新浪 </a>")%><br>

<%=server.htmlencode(" 显示 HTML 标记 <h2></h2>")%><br><%=server.htmlencode(" 显示特殊符号 < > &") %></BODY></HTML>

server.asp

Page 47: 2.4   动态网页技术

47

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

(4) URLEncode方法 该方法根据 URL ( Uniform Resource Locatio

n )编码原则将字符串编码 , 用来转化字符串。语法如下:

Server.URLEncode(字符串 ) 例如:

<%=Server.URLEncode(“<a href=’http://www.sohu.com’>搜狐 </a>”)%>

输出:%3Ca+href%3D%27http%3A%2F%2Fwww%2Esohu%2Ecom%27%3E%CB%D1%BA%FC%3C%2Fa%3E

Page 48: 2.4   动态网页技术

48

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

(5) MapPath 方法 MapPath 方法将虚拟路径或相对路径转换为真实路径。语法如下:

Server.MapPath(URL虚拟相对路径字符串 )在何种情况下,需要将虚拟或相对路径转换成绝对路径呢?

在连接文件或数据库之前。 原因是 ASP规定我们在连接文件或数据库时,必须

指定文件(数据库)的实际路径,这时就必须调用 Server.MapPath方法。

Page 49: 2.4   动态网页技术

49

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

MapPath方法示例<HTML><HEAD><TITLE> server 示例 </TITLE></HEAD>

<BODY>这是一个 Server.MapPath 示例 <p><%=server.MapPath("server1.asp")%><br></BODY></HTML>

server1.asp

Page 50: 2.4   动态网页技术

50

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

(6)Execute方法 方法功能 :暂停执行当前网页 ,转到新的网页执行 , 执行完毕后返回原网页 ,继续执行 Execute 后的语句。语法如下:Server.Execute( 变量或字符串) 例: execute.asp

Redirect Execute

运行位置 客户端 服务器是否返回原网页 不返回 返回

传递环境变量 不能 能

转向对象 网页或其他网站 同一应用程序的其他文件

Page 51: 2.4   动态网页技术

51

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

(7)Transfer方法 功能停止执行 transfer 语句后的网页内容,转向显示所指向的网页内容。语法:Server.Execute(“变量或字符串” )例: Transfer.asp

Redirect

Execute Transfer

运行位置 客户端 服务器 服务器

是否返回原网页 不返回 返回 返回但不显示之后内容

传递环境变量 不能 能 能

转向对象 网页或其他网站

同一应用程序的其他文件

同一应用程序的其他文件

Page 52: 2.4   动态网页技术

例:注册表单页数据加入数据库表,并能显示表中记录

1 、利用 Server 对象 creatobject 方法连接数据库假设数据库名为 web.mdb连接数据库文件名: conn.asp ,其代码如下:

<% dim conndim connstrconnstr="Dbq="&Server.Mappath("qz.mdb")&";Driver={Microsoft Access Driver (*.mdb)}"set conn=server.CreateObject("ADODB.Connection")conn.Open connstr

%>

Page 53: 2.4   动态网页技术

2 、保存数据到数据表代码段 :<!--#Include file="conn.asp" --><%

name=Request("username")pass=Request("password") sex=Request("sex")tel=Request("tel")em=Request("email")adr=Request("address")

If name="" Or pass="" Or tel="" Or adr="" Then Response.Write" 对不起,您没有将数据填写完整! "&"<p>" Response.Write"<a href=reg.htm>回上一页 </a>" Response.EndEnd Ifsql="insert into user(username,password,sex,tel,email,address) values(' " &uname& " ',' " & pass & "','" & sex & "',' " & tel & " ','" & em & "',' "& adr & "' )"

conn.Execute sql%>

变量名

表单控件名

数据表字段名

数据表名

将表单中获取数据插入数据表中 (对数据表操

作 )变量名

Page 54: 2.4   动态网页技术

3 、显示数据表中数据功能块:<center> 要加入注册 ,<a href=reg.htm> 从此入 </a></center><table > <tr> <td width="91"> 用户名 </td> <td width="59"> 性别 </td> <td width="146">联系电话 </td> <td width="156">email</td> <td width="127">联系地址 </td> </tr> <% sqlcmd="select username,sex,tel,email,address from user"

set rs=conn.Execute(sqlcmd)Do While Not rs.EOF adn not rs.bof %>

<tr> <td><%=rs("username")%></td> <td><%=rs("sex")%></td> <td><%=rs("tel")%></td> <td><%=rs("email")%></td> <td><%=rs("address")%></td></tr>

<% rs.MoveNext Loop %> </table>

从数据表记录对应字段中取出值显示在表格单元格中

Page 55: 2.4   动态网页技术

55

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

ASP 中常用的内置对象和控件 4 ) Application 对象:是记载所有客户的公共信息。它是个应用程序级的对象,用来在所有用户间共享信息,并可以 Web 应用程序运行期间持久地保持数据。使用 Application 对象可以使所有用户一起使用该对象,达到共享信息的目的。最典型的是聊天室。大家的发言都存放到一个 Application 对象中,彼此就可以看到发言的内容了。同时如果不加以限制,所有客户都可以访问这个对象。 例:一个简易访问计数器 eg3_5_2.asp;

Page 56: 2.4   动态网页技术

4 ) Application对象 Application 对象没有有效期限制,直到应用程序停止前它是一直存在的。

变量和Applicatio

n

对象的生命周期

的比较

Page 57: 2.4   动态网页技术

57

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

4 ) Application对象

Application 对象的方法有两个: Lock——锁定 Application对象;Unlock——解除锁定的 Application对象。

Application 对象事件有两个 :Application_OnStart——Application “开始前”就调用该

程序;Application_OnEnd——Application “结束后”才调用该程

序。Application 对象的语法格式如下:

Application("Application名字 ")= 变量或字符串信息

Page 58: 2.4   动态网页技术

利用 Application 存储信息(在当前网页中显示留言)

<% Option Explicit %><html><head>

<title> Application 对象用法示例 </title></head><body>

<form action="" method="post" name="form1">请发言: <input type="text" name="pronunciation" size="30"><input type="submit" VALUE=" 确 定 "></form>

<%If trim(request("pronunciation"))<>"" Then '如果有发言内容,就加到 Application 中Application.Lock '先锁定Application("show")= request("pronunciation") & "<br>" & Application("show")Application.Unlock '解除锁定

End ifResponse.Write Application("show") '显示聊天内容 %>

</body> </html>

Trim()去掉字符串前后空格

前面的留言内容2.asp留言

Page 59: 2.4   动态网页技术

59

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

ASP 中常用的内置对象和控件 5) Session 对象: Session 对象可以存储每一位用户客户端的信息。

可以用来记录不同客户端独立的数据变量 ,当上网者在应用程序的各个网页间跳转时 , 存储在 session对象中的变量将不会丢失。访问同一网站,不同客户使用的是不同的 session对象记载。

ASP 服务器系默认的信息保留时间一般为 20分钟,如果客户端超出 20分钟不再向服务器提出请求或刷新Web 页面,该 Session 信息就会自动结束。

访问同一网站,不同客户使用的是不同的 session对象记载,它为每个访问者提供一个标识;可以跟踪访问者的的习惯。在购物网站中, Session 常用于创建购物车( Shopping Cart )。

练习实验 1

Page 60: 2.4   动态网页技术

60

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

示例 1 :查询书籍 ( p82.asp )<html> <head> <title>图书目录 </title></head><body> <form name="form1" method="post" action=“p82.asp" > 查找图书 :<input type="text" name="t0"><br> <input type="submit"> </form><% x=Request("t0")if x<>"" then set book_db=server.createobject("adodb.connection") book_db.open "DSN=book" '数据源名字为 book set rsbookrec=server.createobject("ADODB.recordset") y="SELECT * FROM tab1 where book_name like '%" & x & "%'" 'tab1 为表的名字 rsbookrec.open y,book_db do while not rsbookrec.EOF%><p><td><%=rsbookrec("book_name") %></td><td><%=rsbookrec("Author")%></td><% rsbookrec.movenext loop

book_db.close set book_db=nothingend if

%></body></html>

2.5.2 ASP

Page 61: 2.4   动态网页技术

61

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

2.5.2 ASP

说明运行 p82.asp时,需要先在 Access 中创建一个数据库文件 book.mdb ,它具有一个数据表 tab1 ,内含字段 Book_name 、 author ;同时需要在“控制面板”窗口中建立一个名为 book的数据源,该数据源对应数据库 book.mdb 。将p82.asp拷贝到 IIS 服务器的根目录 inetpub\wwwroot 下,在浏览器的地址栏中输入 http://127.0.0.1/p82.asp即可进行测试

Page 62: 2.4   动态网页技术

62

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

2.5.3 JSP JSP ( Java Service Pages )是由 Sun 公司于 1999年 6月推

出的基于 Java Servlet 以及整个 java 体系的 Web开发技术。利用这一技术可以建立先进、安全和跨平台的动态网站 ;

JSP 和 ASP 有许多相似之处。两者都提供动态网页的技术运行环境,都能实现网页与组件的分离,都能替代 CGI ,使得动态网页的制作变得简单与快捷。但两者来源于不同的技术规范与组织,相比只能运行于 Windows 平台下的 ASP , JSP 可以不加修改地运行在大都数的服务器平台上,这其中也包括Windows 系统,符合“write once , run anywhere”(一次编写,多平台运行) , 可以到处运行;执行速度快;的 java标准,能很好地实现平台和服务器的独立性。

JSP 代码的执行,需要在 Web 服务器上安装 JSP 引擎,可从www.java.sun.com 下载 JSWDK(Java Server Web Development Kit) 并安装,安装之后只需执行 startserver 命令即可启动 JSP 服务,输入 http://localhost:8080可打开默认页面。当然,有的应用服务器直接支持 JSP ,如 WebLogic Application Server , Apache Tomcat , Allarie , Jrun 等 。

Page 63: 2.4   动态网页技术

2.5.3 JSP JSP : Java Server Pages 。

后台: Unix/Linux/Windows NT/2000 /window98均可 (安装 JSP 服务器引擎软件);前台:网页浏览器 Browser

JSP文件:在普通 HTML文件中嵌入 Java 程序片段 (Scriptlet) 。在 JSP 中,脚本在服务器端运行,技术核心是 Servlet (服务器端执行的 java 程序),服务器处理 JSP 页面第一次请求时,先将文件转换成 Servlet ,再编译成 Java字节码,再由 Java虚拟机( JVM )执行,以后的请求就不用再编译。即一次编译多次调用注意: ASP每次请求均需翻译

组件模型与 ASP 不同ASP使用 COM+ , JSP采用 JavaBean 和 Enterprise JavaBean 标准

访问数据库与 ASP 不同ASP使用 ADO,通过 ODBC 连接,并要求服务器建立数据源,数据库带有 ODBC驱动,一般数据库都支持JSP使用 JDBC 连接访问数据库。不必在服务器建立机器数据源,但数据库须带 JDBC驱动程序,目前许多无免费 JDBC驱动

Page 64: 2.4   动态网页技术

64

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

2.5.3 JSP 优点:

多平台支持; 编译后运行,执行效率高;JSP采用 Java 技术,而 Java 作为一个成熟的跨平台的程序设计语言,几乎可以实现任何想要实现的功能。可访问 JavaBean 组件和 EJB 组件可以建立先进、安全和跨平台的动态网站

缺点:开发运行环境比 ASP 复杂;相对 ASP 的 VBScript 而言, Java稍难

Page 65: 2.4   动态网页技术

66

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

1. 运行 .jsp 文件需配置环境变量 安装 jdk1.4 和 tomcat ,设分别安装目录为: c:\jdk1.4, c:\to

mcat 我的电脑属性高级环境变量,设置以下变量

tomcat_home 值为 c:\tomcatjava_home 值为: c:\jdk1.4Classpath 值为: c:\jdk1.4\lib\tools.jar;c:\tomcat\classes;c:\tomca

t\lib;c:\jdk1.4\lib\dt.jar;Path 值为: c:\jdk1.4;c:\jdk1.4\bin

运行: c:\tomcat\bin\startup.bat 出现如图窗口,即表示 tomcat已安装成功

在 IE地址栏中输入 http://localhost:8080能出现画面,即说明 JSP环境成功配置好了。

将编辑的 .jsp文件放置到 tomcat\webapps\ROOT 目录下, http://localhost:8080/.jsp文件名编译的 .class 和 .java 文件放在 \tomcat\work\localhost\的新文件夹中

Page 66: 2.4   动态网页技术

67

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

2.5.3 JSP

JSP 的基本语法与内部对象

Page 67: 2.4   动态网页技术

2 、 JSP 语法变量声明

格式: <% !声明语句; %> 如 hello1.jsp可以在一个声明语句里声明任意多个变量和方法,中间用(;)分隔。如

<%!int i=1;int a,b;double c;Circle a=new circle(2.0);%>

脚本代码:嵌入在 <% %>之间,一段任意长代码可以声明各种变量与方法、使用表达式、使用常量进行编程和使用 JavaBean 中的对象等功能,但 HTML 标签和 JSP 语法标识必须在脚本之外。

如: hello1_1.jsp表达式

格式 : <%=Java 表达式%> 如 hello2.jsp( 代码见备注)表达式的末尾不能使用分号结束符,可以是任何适合 Java 语言规范的表达式。如: <%=i%> <%=“Hello”%> <%=a+b+c >

<%=new java.util.Date() %>

//hello1.jsp<html><head><title>Hello</title></head><body><%!String test="Hello How are you!";%><% out.println(test);%></body></html>

// hello1_1.jsp 代码<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %><%!String test="Hello World";%><html><head><title>Hello</title></head><body><% for(int i=1;i<=4;i++){ %><H<%=i%>><%=test%></H<%=i%>><br><%}%>今天是 <%=new java.util.Date() %></body></html>

Page 68: 2.4   动态网页技术

69

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

2 、 JSP 语法 注释(有两类)

显式类型:指 JSP 文件被服务器解释后传送到用户端,用户通过“查看页面源代码”方式可以看到这些注释。 JSP 的注释可使用表达式,但与普通 HTML 不同,因表达式中的内容是动态的,即使同一注释,页面的每次读取和刷新都有可能表现不同的内容。语法格式:

<!– 注释 [<%= 表达式%>]--> 例: hello2_1.jsp( 代码见备注)

隐式类型 : 在客户端查看源代码是看不到的 . 格式 :

<%-- 注释 --%> 例: hello2_2.jsp

Page 69: 2.4   动态网页技术

2 、 JSP 语法 指示符:提供 JSP 引擎使用,不产生任何可见输出

格式: <%@ directive %>主要指示符有

包含指令 : 用来将网页中相同的部分直接在 JSP 文件中调入 , 可大量的减少重复设计的时间 . 在 JSP 中包含的网页可以是一静态的 HTML文件 , 也可以是 JSP 文件 ,但不能同时包含两类文件 .

格式: <%@ include file=“被包含文件名” %> 如 :<%@ include file=hello2.jsp %><%@ include file=eg3_3.htm %>

例 char2\eg3_6.jsp 页面指令 : 用来指定当前 JSP 页面的属性 。“ page”指令

利用 import 语句导入类:格式: <%@ page import=“java.util.*,java.lang.*” %>

JSP出错处理 <%@ page errorPage=“error.jsp” %> Session管理 <%@ page session=“true” %> 缓冲处理设置 <%@ page isAutoFlush “true” %> 设定页面 MIME类型

<%@ page contentType=“text/html;charset=gb2312” %> 自定义指令 : 可以象使用其他标签使用用户自己定制标签库( Tagli

b) <%@ taglib url=“标签库的链接” prefix=“标签前缀“ %>

// eg3_6.jsp 代码 :<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %> <%@ include file="eg3_3.htm" %> <html><head><title>test include</title></head><body><font color="red" size=10px face="楷体 _GB2312"><% out.print(" 这是本页的内容 "); %></font><br> </body></html> <%@ include file="dom.htm" %>

Page 70: 2.4   动态网页技术

2 、 JSP 语法 JSP文件是由标准的 HTML 代码、嵌入的语法标签和

JAVA 代码共同混合编制而成的。例 eg3_7.jsp<!-- 一个 JSP文件示例 --><%@ page contentType="text/html; charset=gb2312"

language="java" import="java.util.*" session="true" errorPage="" %>

<%!String test="Hello World"; %> <html><head><title><%=test%></title></head><body> <p align="center"><% out.print("这是本页的内容 "); %><font color="red" size=10px face="楷体 _GB2312"><br><% out.print("Hello World!");%></font> </body></html>

Page 71: 2.4   动态网页技术

72

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

3. JSP 内部隐含对象 Request :包含客户端所有传送到服务器上的请求信息

其常用方法有: getMethod(): 返回客户端向服务器端传送数据的方法,一般为 get post或 pu

t等 getRequestURL() :返回请求页面的 URL地址 getProtocol() :返回客户端向服务器端传送数据的协议名称,如 HTTP/1.1 getServletPath(): 返回客户端请求 Servlet 的 URL地址 getQueryString() :返回客户端向服务器端传送的查询字符串 getServerName() :返回服务器的名字 getSewrverPort() :返回服务器提供服务的端口号 getRemoteAddr() :返回远程用户的 IP地址 getRemoteHost() :返回远程用户的电脑名称或 IP地址 getAuthType() :返回客户端的认证方式 getHeader(String name) :返回 HTTP协议的文件头信息 getHeader(String name) :返回指定名字的 request header 的所有值。类举 getContentType() :获得 HTTP头中定义的数据 MIME类型 getParameter(String name) :返回客户端传送给服务器端的指定参数的值 GetCookies() :获得客户端保存的 cookie对象例 char2\eg3_8.jsp( 代码见备注) p91.jsp

Page 72: 2.4   动态网页技术

3. JSP 内部隐含对象 Response 用于服务器端向客户端发送响应信息

Response对象常用方法 addCookie(cookie cookie)

添加一个 Cookie保存在客户端 addHeader(String name, String value)

添加指定的值到 HTTP头中,若同名的 header 存在,则覆盖 setHeader(String name,String value)

设置指定的 HTTP头的值,若同名的 header 存在,则覆盖 sendRedirect(URL url)

将当前用户访问重定向到指定 URL setContentType(ContentType contenttype)

设置 HTTP头中的 ContentType sendError(int err)

向客户端发送指定的错误代码信息。如: 404 代表找不到网页的错误,505代表服务器内部错误

例:利用 response对象设置并使用 cookie ,在客户端设置一个 Cookie “myCookie”。 eg3_8_1.jsp

Page 73: 2.4   动态网页技术

74

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

3. JSP 内部隐含对象 out : 主要用于动态向客户端输出数据

常用方法 Print(parameter) 在屏幕中输出数据,但不换行 Println(paramenter) 在屏幕中输出数据后,自动换行,下一输出语句在下一行输出

newLine() 输出一个换行符,类似 HTML 中 <br> getBufferSize()获得缓冲区的大小 clearBuffer() 清除缓冲区的数据,并输出到客户端 getRemaining() 获得没有使用的缓冲区空间的大小 Clear() 清除缓冲区的数据,但不输出到客户端 Flush() 输出缓冲区中的数据 isAutoFlush() 是否打开缓冲区。返回成功与否的逻辑量 Close() 关闭输出流

Page 74: 2.4   动态网页技术

3. JSP 内部隐含对象 session 用于保存用户的各种信息,直到它的生存期(一般为 900s)超时或被人为释放为止。

常用方法 getValue(String name) 获得存在于 Session 中的指定名称的变量

(或对象)的值,若不存在,则返回 null getValueNames()返回全部存在于 Session对象中的变量(或对象),

返回值是一个 Enumeration对象的实例 getId() 每个 Session对象在服务端都有一独一无二的编号,利用 getId() 可返回当前编号

getCreationTime() 返回当前 Session创建的时长 getLastAccessedTime() 返回当前 Session 最后一次被访问到现在

的时长,时间以毫秒计算 getMaxInactiveInterval() 返回 Session自创建以来的生存时间 removeValue(String name) 删除 Session 中指定的值 putValue(String name,Object value) 将指定的变量(或对象)值保存在 Session对象中.

一个 session 例 :char2\eg3_9.htm eg3_9_1.jsp eg3_9_2.jsp

Page 75: 2.4   动态网页技术

说明: 在使用进行编程过程,部会碰到一些汉字无法正常被处理与显示的问题,一般有二种情况:

中文参数传递问题 在该例中,在 eg3_9.htm 中输入中文,就出现如图所示现象数据通信中文的显示与修改问题

利用 JDBC-ODBC 桥连接 Access数据库的 JSP 程序,程序顺利执行结束,插入记录正确,但打开数据库,则发现中文记录未被正确插入也显示乱码

分析从 JSP 显示结果的过程:

JSPJava 源代码 (Servlet)Java字节码虚拟机操作系统显示设备 JSPJava 源代码 : 服务器端以 Unicode编码方式将其转化为 Java 源代码 ,此时能正常显

示的汉字GB2312编码被变成乱码 ( 可在 .java 文件中查看到 ) Java 源代码 Java字节码 :使用默认字符集 , 如中文平台为 GB2312,英文为 ISO_8859_1,

系统将以GB2312编码形式编译此 java 文件形成 java字节码 .class 。可看到汉字编码正常 Java字节码虚拟机操作系统显示设备: .class字节码文件在虚拟机上执行后 , 将转换编译后的字符显示到客户端浏览器上 ,此时可以用 <%@ page contentType=“text/html;charset=gb2312”%> 定义输出字符集。

程序中已有中文,将以GB2312编码,但对于参数中汉字,由于 JDK中 Servlet 处理的 BUG只会以 ISO——8859——1编码,而后被统一转换为 Unicode编码。输出至客户端时,因指定了输出字符集, Unicode 将被自动轮换为 GB2312 。对于GB2312UnicodeGB2312 能正常显示,而对于 ISO_8859_1UnicodeGB2312 是非正常转换过程,故显示不正常。

解决办法:在说明符中省去 charset=“gb2312”或将其设为 charset=8859_1

Page 76: 2.4   动态网页技术

77

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

3. JSP 内部隐含对象 application 与 session 类似 , 用来保存信息 , 实现不同页面的参数传递 . 它是所有用户共享的 ,任何用户都可访问 , 而 session 是私有的。

常用方法 getAttribute(String name) 返回存在于 application对象中的

指定名称的变量或对象值,若不存在,则返回 null getAttributeNames() 返回全部存在于 application对象

中的变量值 getInitParameter(String name) 返回存在于 application对象中指定名称的变量或对象的初始值

getServerInfo() 返回当前使用的 servlet编译器的版本 setAttribute(String name, Object value) 将指定的变量

(或对象)的值保存在 application对象中

Page 77: 2.4   动态网页技术

80

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

4 、 JSP 动态网页实例 4 :一个简单的乘法练习器

char2\p88.jsp<%@page language="java" contentType="text/html; charset=

gb2312" %><html><head><title> 一个简单的乘法器 </title></head><body bgcolor="#ffffff"><h1>请输入内容并计算方法:</h1><form action="p88.jsp" method="post"> <input type="text" name="x" value="">× <input type="text" name="y" value="">= <input type="text" name="result" value

=""><br> <input name="submit" type="submit" val

ue="检查结果 " ></form><br>

<% String strx=request.getParameter("x") ; if(strx==null) strx="0"; int intx=Integer.valueOf(strx).intValue() ; String stry=request.getParameter("y"); if(stry==null) stry="0"; int inty=Integer.valueOf(stry).intValue() ; String strresult=request.getParameter("result"); if(strresult==null) strresult="0"; int intresult=Integer.valueOf(strresult).intValue() ; if (intx*inty==intresult) { out.print("Answer: Right"); } else out.print("Answer:Not Right"); %></body></html>

Page 78: 2.4   动态网页技术

83

第二章 商务表达层及其技术第二章 商务表达层及其技术 ( 下 )

习题与思考试用 Javascript编写一个简单的交互应用网页。试用 Applet编写一个简单的动态网页。ASP 脚本与 JSP 脚本最大区别是什么 ?试用 ASP或 PHP编写一个简单的 Web 应用程序,并将它布置到服务器中去。试用 JSP编写一个简单的动态网页