新書推薦:
《
成吉思汗传:看历代帝王将相谋略 修炼安身成事之根本
》
售價:NT$
280.0
《
爱丁堡古罗马史-罗马城的起源和共和国的崛起
》
售價:NT$
349.0
《
人生解忧:佛学入门四十讲
》
售價:NT$
490.0
《
浪潮将至
》
售價:NT$
395.0
《
在虚无时代:与马克斯·韦伯共同思考
》
售價:NT$
260.0
《
日内交易与波段交易的资金风险管理
》
售價:NT$
390.0
《
自然信息图:一目了然的万物奇观
》
售價:NT$
640.0
《
女性史:古代卷(真正意义上的女性大历史)
》
售價:NT$
560.0
編輯推薦:
本书将JSP知识与实用案例有机地结合起来,做到知识与案例相辅相成,这既有助于学生理解知识点,也能够突出重点、难点。此外,每章配有实训练习,可以锻炼学生的项目设计和编写代码能力;实训强调实用,它使知识讲解更加全面、系统,同时,也有助于指导学生实践。每章*后附有精心编写的"练习与提高",有助于学生对知识点的理解和巩固,也可以检验学生对知识的掌握程度。
本书共包括9章:第1章为JSP概述;第2章介绍JSP基础知识;第3章介绍JSP中的指令与动作;第4章介绍JSP的内置对象;第5章介绍JavaBean技术;第6章介绍JSP中数据库的使用;第7章介绍Servlet技术;第8章介绍表达式语言;第9章为综合应用实训。
本书所有例题和相关代码都已经调试通过,提供资源下载。对于每章的练习与提高,均给出了参考答案。同时,制作了相关的多媒体课件,提供给教师做参考。
本书适合作为普通高等学校计算机及相关专业"Web程序设计"、"Java Web应用基础"、"JSP程序设计"、"动态网站制作"、"JSP开发与Web应用"等课程的教材;同时,也适合JSP初学者及网站开发人员参考。
內容簡介:
本书作为JSP相关课程的教材,从教学和实用的角度出发,详细介绍了JSP在Web应用开发中的运用。本教材从JSP基础知识入手,在强调使学生全面掌握JSP基本操作的基础上,把知识点与应用实例相结合,使学生学习起来有的放矢,操作时也更加得心应手。同时结合JSP内部知识体系,按照循序渐进的原则,由浅入深地介绍了如何用JSP进行Web动态网站的开发和应用。 本书所有知识都结合具体实例进行介绍,详略得当,使读者能够快速掌握开发动态网站的方法。 本书既可以作为普通高等院校计算机及相关专业的本科教材,同时,也适合JSP初学者及网站开发人员参考使用。
目錄 :
目录
第1章JSP概述1
1.1BS结构2
1.1.1BS结构的原理2
1.1.2BS结构的特点3
1.1.3常见的BS结构动态网页5
1.2JSP的技术特征6
1.2.1JSP的特点6
1.2.2JSP的工作流程7
1.2.3JSP页面的组成8
1.3JSP中各种技术的关系8
1.3.1JSP与HTML语言8
1.3.2JSP与Java应用程序8
1.3.3JSP与JavaApplet程序9
1.3.4JSP与JavaScript语言9
1.3.5JSP与Servlet技术9
1.4JSP运行环境的配置10
1.4.1JSP的运行环境10
1.4.2JDK的安装与配置11
1.4.3Tomcat的安装与启动13
1.4.4Eclipse的安装与使用16
1.5实训一:JSP实验环境配置及JSP
页面测试21
1.6本章小结24
练习与提高一24
第2章JSP基础知识27
2.1HTML基础28
2.1.1HTML概述28
2.1.2HTML文件的结构29
2.1.3HTML的基本元素与属性29
2.1.4表格30
2.1.5表单32
2.2JSP脚本标识34
2.2.1声明34
2.2.2代码段37
2.2.3表达式38
2.2.4注释39
2.3JSP程序开发模式43
2.3.1单纯的JSP编程43
2.3.2JSP JavaBean编程43
2.3.3JSP JavaBean Servlet编程44
2.3.4MVC模式45
2.4运行JSP时常见的出错信息及处理46
2.5实训二:简单JSP页面的运行及
调试47
2.6本章小结48
练习与提高二49
第3章JSP中的指令和动作51
3.1JSP中的指令52
3.1.1page指令52
3.1.2include指令57
3.2JSP中的动作60
3.2.1include动作标记60
3.2.2param动作标记62
3.2.3forward动作标记64
3.2.4plugin动作标记66
3.2.5useBean动作标记68
3.2.6setProperty动作标记71
3.2.7getProperty动作标记72
3.3实训三:JSP指令与动作的运用74
3.4本章小结78
练习与提高三78
第4章JSP的内置对象83
4.1内置对象概述84
4.2request对象86
4.2.1获取客户信息87
4.2.2获取请求参数88
4.2.3获取查询字符串90
4.2.4在作用域中管理属性91
4.2.5获取Cookie92
4.2.6访问安全信息93
4.2.7访问国际化信息94
4.3response对象94
4.3.1动态设置响应的类型95
4.3.2重定向网页96
4.3.3设置页面自动刷新以及
定时跳转97
4.3.4配置缓冲区98
4.4out对象99
4.4.1向客户端输出数据100
4.4.2管理输出缓冲区100
4.5session对象101
4.5.1创建及获取客户会话属性102
4.5.2从会话中移除指定的对象103
4.5.3设置会话时限104
4.6application对象105
4.6.1查找Servlet有关的属性
信息105
4.6.2管理应用程序属性106
4.7其他内置对象107
4.7.1pageContext对象107
4.7.2page对象109
4.7.3config对象110
4.8实训四:简易购物网站111
4.9本章小结117
练习与提高四117
第5章JavaBean技术121
5.1JavaBean概述122
5.1.1JavaBean简介122
5.1.2JavaBean的种类122
5.1.3JavaBean规范123
5.2JavaBean的使用124
5.2.1创建JavaBean124
5.2.2值JavaBean的使用127
5.2.3工具JavaBean的使用132
5.3实训五:用JavaBean实现购物车135
5.4本章小结144
练习与提高五145
第6章JSP中数据库的使用147
6.1JDBC技术148
6.1.1JDBC概述148
6.1.2JDBC驱动程序149
6.2JDBC的使用步骤151
6.2.1加载JDBC驱动程序151
6.2.2创建数据库连接153
6.2.3创建Statement实例155
6.2.4执行SQL语句、获得结果156
6.2.5关闭连接158
6.3数据库操作技术159
6.3.1SQL常用命令159
6.3.2创建数据库162
6.3.3查询操作165
6.3.4更新操作175
6.3.5添加操作179
6.3.6删除操作182
6.3.7访问Excel文件183
6.4实训六:用户管理系统185
6.5本章小结194
练习与提高六194
第7章Servlet技术199
7.1Servlet基础200
7.1.1Servlet简介200
7.1.2Servlet的生命周期201
7.1.3Servlet类和方法202
7.1.4简单的Servlet程序203
7.2Servlet跳转205
7.2.1客户端跳转205
7.2.2服务器跳转206
7.3Servlet的使用207
7.3.1获取客户端信息207
7.3.2过滤器210
7.3.3监听器214
7.4实训七:Servlet应用218
7.5本章小结223
练习与提高七223
第8章表达式语言225
8.1EL表达式的语法226
8.1.1EL简介226
8.1.2运算符227
8.1.3变量与常量233
8.1.4保留字236
8.2EL数据访问237
8.2.1对象的作用域238
8.2.2访问JavaBean240
8.2.3访问集合242
8.3其他内置对象243
8.3.1param和paramValues对象243
8.3.2cookie对象245
8.3.3initParam对象246
8.4实训八:用EL表达式实现数据
传递247
8.5本章小结250
练习与提高八250
第9章综合应用实训251
9.1简易的留言管理程序252
9.1.1需求分析252
9.1.2总体设计253
9.1.3系统实现254
9.2MVC模式留言管理程序265
9.2.1需求分析265
9.2.2总体设计266
9.2.3系统实现266
9.3本章小结287
参考文献289
內容試閱 :
前言 随着网络技术的发展,Web应用程序开发空前活跃,其中尤其以Java领域的发展最为迅速,JSPJava Server Pages就是以Java语言为基础的Web应用程序开发技术。
第2章 JSP基础知识
本章要点
本章介绍网页制作基础语言HTML,以及JSP基本语法知识、JSP页面运行及调试方法,还有JSP程序开发模式等。通过对本章的学习,读者可以做出网页与程序交互的界面,也能了解JSP程序的运行原理。
学习目标
1. 掌握HTML基础。
2. 掌握JSP基本语法。
3. 掌握JSP运行调试时常见的出错信息及处理。
2.1 HTML基础
2.1.1 HTML概述
HTMLHypertext Marked Language,超文本标记语言是一种用来制作超文本文档的简单标记语言。超文本传输协议规定了浏览器在运行HTML文档时所遵循的规则和进行的操作。协议的制订使浏览器在运行超文本时有了统一的规则和标准。用HTML编写的超文本文档称为HTML文档,而能独立于各种操作系统平台。自1990年以来,HTML就一直被用作WWWWorld Wide Web,万维网的信息表示语言,使用HTML语言描述的文件,需要通过Web浏览器显示出效果。
所谓超文本,是因为它可以加入图片、声音、动画、影视等内容。事实上,每一个 HTML文档都是一种静态的网页文件,这个文件里面包含了HTML指令代码,这些指令代码并不是一种程序语言,它只是一种确定网页中资料排版显示方式的标记语言,易学易懂、非常简单。HTML的普遍应用带来了超文本技术,即通过单击鼠标,可以从一个主题跳转到另一个主题,从一个页面跳转到另一个页面,实现与世界各地主机的文件链接。
HTML的一些应用如下所示。
1 通过HTML,可以表现出丰富多彩的设计风格。
* 图片调用:
* 文字格式:文字
2 通过HTML可以实现页面之间的跳转。
* 页面跳转:
3 通过HTML可以展现多媒体的效果。
* 音频:
* 视频:
由此可以看到HTML超文本文件中需要用到的一些标记。在HTML中,每个用作标记的符号都是一条命令,它告诉浏览器如何显示文本。这些标记均由""符号以及一个字符串组成。而浏览器的功能,是对这些标记进行解释,以显示出文字、图像、动画,播放声音或视频。这些标记符号以""的格式来表示。
HTML只是一个纯文本文件。创建一个HTML文档时,只需要两个工具,一个是HTML编辑器,一个Web浏览器。HTML编辑器是用于生成和保存HTML文档的应用程序。Web浏览器是用来打开Web网页文件,让我们可以查看Web资源的客户端程序。
2.1.2 HTML文件的结构
元素是HTML语言的基本成分。元素大部分是成对出现的,即有开始标记和结束标记。元素的标记要用一对尖括号括起来,并且结束标记的形式总是在开始标记前加一个斜杠,如开始标记为,结束标记为。但也有一些标记只要求使用单一的标记符号,如
。
HTML文件的基本结构如下:
头部信息
正文
2.1.3 HTML的基本元素与属性
1.HEAD元素
HEAD元素出现在文档的开头部分。与之间的内容不会在浏览器的文档窗口中显示,但是其间的元素具有特殊重要的意义。
头部标记内容如表2-1所示。
表2-1 头部标记的内容
头部元素
描 述
关于文档本身的信息
文档的标题信息
文档的URL
设定基准的文字字体、字号和颜色
设定外部文件的链接
设定文档中的脚本程序
设置CSS样式表的内容
2.BODY元素
BODY元素是HTML文档的主体部分。在与之间,放置的是页面显示的所有内容,BODY元素会有很多的内置属性,这些属性可以规定HTML文档主体部分的显示特征。
BODY元素的属性如表2-2所示。
表2-2 BODY元素的属性
属 性
描 述
Bgcolor
设置网页的背景颜色
Background
设置网页的背景图片
Text
设置网页文字的颜色
Link
设置网页未访问过的链接颜色
Alink
设置网页链接正在被单击时的颜色
Vlink
设置网页链接访问过后的颜色
Topmargin
设置网页的上边框
Leftmargin
设置网页的左边框
Marginwidth
设置网页的空白宽度
Marginheight
设置网页的空白高度
【例2-1】演示如何使用HTML头元素和主体元素:
我是标题!
我是主体!
运行结果如图2-1所示。
图2-1 使用HTML头元素和主体元素
2.1.4 表格
表格是由标记来定义的。每个表格均有若干行,由标记定义,每行被分割为若干单元格,由标记定义。
字母td指表格数据table data,即数据单元格的内容。数据单元格可以包含文本、图片、列表、段落、表单、水平线、表格等。
表格的基本结构如下:
定义表格
定义表头<th
表格的属性如表2-3所示。
表2-3 表格的属性
属 性
描 述
Width
指定表格或某一个表格单元格的宽度,单位可以是%或者像素
Height
指定表格或某一个表格单元格的高度,单位可以是%或者像素
Border
表格边框的粗细
Bgcolor
指定表格或某一个单元格的背景颜色
Background
指定表格或某一个单元格的背景图片。其属性指向一个URL地址
Bordercolor
指定表格或某一个单元格的边框颜色
Bordercolorlight
表格亮边框的颜色
Bordercolordark
表格暗边框的颜色
Align
指定表格或某一个单元格中内容的对齐方式
Cellspacing
单元格的间距
Cellpadding
单元格的边距
【例2-2】在HTML文档中定义学生成绩表:
表格示例
学生考试成绩单
姓名
语文
数学
英语
琦琦
89
92
97
宁宁
93
86
80
婷婷
85
86
90
运行结果如图2-2所示。
图2-2 在HTML中显示学生成绩单
2.1.5 表单
HTML表单用于搜集不同类型的用户输入。
表单是一个包含表单元素的区域。表单元素例如文本框、下拉列表、单选按钮、复选框等是允许用户在表单中输入信息的元素。
表单使用表单标记来定义。
表单的结构如下:
...
FORM元素的属性如表2-4所示。表单标记如表2-5所示。
多数情况下,被用到的表单标记是输入标记。输入类型是由类型属性TYPE定义的。常用到的输入类型有文本域TEXT、密码域PASSWORD、按钮BUTTON、单选按钮RADIO、复选框CHECKBOX、提交按钮SUBMIT、重置按钮RESET。
表2-4 FORM元素的属性
属 性
描 述
Name
表单的名称
Action
用来定义表单处理程序的位置相对地址或绝对地址
Method
定义表单的提交方式:GET、POST
Enctype
定义表单内容的编码方式
Target
定义返回信息的显示方式
注意:GET有数据量限制,POST无以上限制,以文件形式传输。
表2-5 表单标记
标 记
描 述
定义供用户输入的表单
定义输入域
定义文本域一个多行的输入控件
定义一个控件的标签
定义域
定义域的标题
定义一个选择列表
定义选项组
定义下拉列表中的选项
定义一个按钮
【例2-3】使用表单的文本域:
First name:
Last name:
运行结果如图2-3所示。
【例2-4】使用表单的单选按钮:
Male
Female
运行结果如图2-4所示。
图2-3 表单的文本域 图2-4 表单的单选按钮
【例2-5】使用表单的动作属性action:
Username:
运行结果如图2-5所示。
图2-5 使用表单的动作属性
2.2 JSP脚本标识
2.2.1 声明
在JSP页面中可以声明变量、方法和类,其声明格式为:
特别要注意,在"1.声明变量
在""标记之间声明变量,即在""之间放置Java的变量声明语句。变量的类型可以是Java语言允许的任何数据类型。我们将这些变量称为JSP页面的成员变量。
【例2-6】声明变量:
int x, y=100, z;
String tom=null, jery="Love JSP";
Date date;
%
这里,""之间声明的变量在整个JSP页面内都有效,因为JSP引擎将JSP页面转译成Java文件时,将这些变量作为类的成员变量,这些变量的内存空间直到服务器关闭才被释放。当多个客户请求一个JSP页面时,JSP引擎为每个客户启动一个线程,这些线程由JSP引擎服务器来管理。这些线程共享JSP页面的成员变量,因此任何一个用户对JSP页面成员变量操作的结果,都会影响到其他用户。
2.方法声明
在""标记之间声明方法,其方法在整个JSP页面有效,但是,方法内定义的变量只在方法内有效。
【例2-7】声明方法:
int num = 0; 声明一个计数变量
synchronized void add { 该方法实现访问次数的累加操作
num;
}
%
您是第位访问该页面的游客!
运行结果如图2-6所示。
图2-6 使用方法的声明
示例中声明了一个num变量和add方法。add方法对num变量进行累加操作,synchronized修饰符可以使多个同时访问add方法的线程排队进行调用。
当第一个用户访问该页面后,变量num被初始化,服务器执行小脚本程序,从而add方法被调用,num变为1。当第二个用户访问时,变量num不再被重新初始化,而使用前一个用户访问后num的值,之后调用add方法,num值变为2。
3.声明类
可以在""之间声明一个类。该类在JSP页面内有效,即在JSP页面的Java程序段部分可以使用该类创建对象。下例中,定义了一个Circle类,该类的对象负责求圆的面积。当客户向服务器提交圆的半径后,该对象计算圆的面积。
【例2-8】使用类的声明:
请输入圆的半径:
public class Circle
{
double r;
Circledouble r
{
this.r = r;
}
double 求面积
{
return Math.PI*r*r;
}
}
%
String str = request.getParameter"cat";
double r;
ifstr != null
{
r = Double.parseDoublestr;
}
else
{
r = 1;
}
Circle circle = new Circler;
%
圆的面积是:
运行结果如图2-7所示。
图2-7 使用类声明
2.2.2 代码段
JSP允许在""之间插入Java程序段。一个JSP页面可以有许多程序段,这些程序段将被JSP引擎按顺序执行。
在一个程序段中声明的变量叫作JSP页面的局部变量,它们在JSP页面内的相关程序段以及表达式内都有效。这是因为JSP引擎将JSP页面转译成Java文件时,将各个程序段的这些变量作为类中某个方法的变量,即局部变量。
利用程序段的这个性质,有时可以将一个程序段分割成几个更小的程序段,然后在这些小的程序段之间再插入JSP页面的一些其他标记元素。
当程序段被调用执行时,这些变量被分配内存空间,当所有的程序段调用完毕后,这些变量即可释放所占的内存。
当多个客户请求一个JSP页面时,JSP引擎为每个客户启动一个线程,一个客户的局部变量和另一个客户的局部变量被分配不同的内存空间。因此,一个客户对JSP页面局部变量操作的结果,不会影响到其他客户的这个局部变量。
【例2-9】下面的程序段可以计算1到100的和:
long continueSumint n
{
int sum = 0;
forint i=1; i{
sum = sum i;
}
return sum;
}
%
1到100的连续和:
long sum;
sum = continueSum100;
out.print" " sum;
%
运行结果如图2-8所示。
图2-8 在JSP中使用Java代码段
2.2.3 表达式
表达式用于向页面中输出信息,其使用格式为:
特别要注意,"JSP表达式在页面被转换为Servlet后,变成了out.print方法。所以,JSP表达式与JSP页面中嵌入到小脚本程序中的out.print方法实现的功能相同。如果通过JSP表达式输出一个对象,则该对象的toString方法会被自动调用,表达式将输出toString方法返回的内容。
JSP表达式可以应用到以下几种情况。
1向页面输出内容,例如下面的代码。
【例2-10】向页面输出内容:
用户名:
上述代码将生成如下运行结果:
用户名:www.xxx.com
2生成动态的链接地址,例如下面的代码。
【例2-11】生成动态的链接地址:
"链接到welcome.jsp
上述代码将生成如下的HTML代码:
链接到welcome.jsp
3动态指定Form表单处理页面,例如下面的代码。
【例2-12】动态指定Form表单处理页面:
"
上述代码将生成如下HTML代码:
4为通过循环语句生成的元素命名,例如下面的代码。
【例2-13】为通过循环语句生成的元素命名:
forint i=1; i%
file:"
}
%
上述代码将生成如下HTML代码:
file1:
file2:
2.2.4 注释
在JSP页面中可以使用多种注释,如HTML中的注释、Java中的注释和在严格意义说属于JSP页面自己的注释--带有JSP表达式和隐藏的注释。在JSP规范中,它们都属于JSP中的注释,并且它们的语法规则和运行的效果有所不同。本小节将向读者介绍JSP中的各种注释。
1HTML中的注释。JSP文件是由HTML标记和嵌入的Java程序段组成的,所以在HTML中的注释同样可以在JSP文件中使用。注释格式如下:
【例2-14】HTML中的注释:
欢迎访问!
使用该方法注释的内容在客户端浏览器中是看不到的,但可以通过查看HTML源代码看到这些注释内容。
访问该页面后,将会在客户端浏览器中输出以下内容:
欢迎访问!
通过查看HTML源代码,将会看到如下内容:
欢迎访问!
2带有JSP表达式的注释。在HTML注释中可以嵌入JSP表达式,注释格式如下:
--
包含该注释语句的JSP页面被请求后,服务器能够识别注释中的JSP表达式,从而来执行该表达式,而对注释中的其他内容不做任何操作。
当服务器将执行结果返回给客户端后,客户端浏览器会识别该注释语句,所以被注释的内容不会显示在浏览器中。
【例2-15】使用带有JSP表达式的注释:
--
欢迎登录:
访问该页面后,将会在客户端浏览器中输出以下内容:
欢迎登录:YXQ
通过查看HTML源代码,将会看到以下内容:
--
欢迎登录:YXQ
3隐藏注释。前面已经介绍了如何使用HTML中的注释,这种注释虽然在客户端浏览页面时不会看见,但它却存在于源代码中,可通过在客户端查看源代码看到被注释的内容。所以严格来说,这种注释并不安全。这里将介绍一种隐藏注释,注释格式如下:
用该方法注释的内容,不仅在客户端浏览时看不到,而且即使在客户端查看HTML源代码,也不会看到,所以安全性较高。
【例2-16】使用隐藏注释:
当前时间为:
访问该页面后,将会在客户端浏览器中输出以下内容:
当前时间为:2015-12-20 13:37:30
通过查看HTML源代码,将会看到以下内容:
当前时间为:2015-12-20 13:37:30
4脚本程序Scriptlet中的注释。在脚本程序中所包含的是一段Java代码,所以在脚本程序中的注释与在Java中的注释是相同的。
脚本程序中包括下面3种注释方法。
①单行注释。
单行注释的格式如下:
注释内容
该方法进行单行注释,符号""后面的所有内容为注释的内容,服务器对该内容不进行任何操作。因为脚本程序在客户端通过查看源代码是不可见的,所以在脚本程序中通过该方法被注释的内容也是不可见的,并且在后面将要提到的通过多行注释和提示文档进行注释的内容都是不可见的。
【例2-17】在JSP文件中包含以下代码:
int count = 1; 定义一个计数变量
%
计数变量count的当前值为:
访问该页面后,将会在客户端浏览器中输出以下内容:
计数变量count的当前值为:1
通过查看HTML源代码,将会看到以下内容:
计数变量count的当前值为:1
因为服务器不会对注释的内容进行处理,所以可以通过该注释来暂时地删除某一行代码。例如下面的代码。
【例2-18】使用单行注释暂时删除一行代码:
String name = "YXQ";
name = "YXQ2015";
%
用户名:
包含上述代码的JSP文件被执行后,将输出如下结果:
用户名:YXQ
②多行注释。
多行注释是通过"*"与"*"符号进行标记的,它们必须成对出现,在它们之间输入的注释内容可以换行。注释格式如下:
*
注释内容1
注释内容2
*
为了程序界面的美观,开发员习惯上在每行的注释内容前面加入一个"*"号,构成如下所示的注释格式:
*
* 注释内容1
* 注释内容2
*
与单行注释一样,在"*"与"*"之间被注释的所有内容,即使是JSP表达式或其他的脚本程序,服务器都不会做任何处理,并且多行注释的开始标记和结束标记可以不在同一个脚本程序中同时出现。
【例2-19】在JSP文件中包含以下代码:
String state = "0";
* ifstate.equals"0" { equals方法用来判断两个对象是否相等
state = "版主";
%
将变量state赋值为"版主"。
}
*
%
变量state的值为:
包含上述代码的JSP文件被执行后,将输出如图2-9所示的结果。
若去掉代码中的"*"和"*"符号,则将输出如图2-10所示的结果。
图2-9 多行注释一 图2-10 多行注释二
③文档注释。
该种注释会被Javadoc文档工具在生成文档时读取,文档是对代码结构和功能的描述。
注释格式如下:
**
提示信息l
提示信息2
*
该注释方法与上面介绍的多行注释很相似,但细心的读者会发现,它是以"**"符号作为注释的开始标记,而不是"*"。与多行注释一样,对于被注释的所有内容,服务器都不会做任何处理。
【例2-20】在Eclipse开发工具中,向创建的JSP文件输入下面的代码:
int i = 0;
**
@作者:YXQ
@功能:该方法用来实现一个简单的计数器
*
synchronized void add {
i;
}
%
当前访问次数:
将鼠标指针移动到代码上,将出现如图2-11所示的提示信息。
图2-11 提示文档注释
2.3 JSP程序开发模式
2.3.1 单纯的JSP编程
在该模式下,通过应用JSP中的脚本标志,可直接在JSP页面中实现各种功能。虽然这种模式很容易实现,但是,其缺点也非常明显。因为将大部分的Java代码与HTML代码混淆在一起,会给程序的维护和调试带来很多困难,而且难于理清完整的程序结构。
这就好比规划管理一个大的企业,如果将负责不同任务的所有员工都安排在一起工作,势必会造成公司秩序混乱、不易管理等许多的隐患。所以说,单纯的JSP页面编程模式是无法应用到大型、中型甚至小型的JSP Web应用程序开发中的。
2.3.2 JSP JavaBean编程
该模式是JSP程序开发经典设计模式之一,适合小型或中型网站的开发。
利用JavaBean技术,可以很容易地完成一些业务逻辑上的操作,例如数据库的连接、用户登录与注销等。JavaBean是一个遵循了一定规则的Java类,在程序的开发中,将要进行的业务逻辑封装到这个类中,在JSP页面中,通过动作标签来调用这个类,从而执行这个业务逻辑。此时的JSP除了负责部分流程的控制外,大部分用来进行页面的显示,而JavaBean则负责业务逻辑的处理。可以看出,该模式具有一个比较清晰的程序结构,在JSP技术的起步阶段,JSP JavaBean设计模式曾被广泛应用。
图2-12表示了该模式对客户端的请求进行处理的过程,相关的说明如下。
1 用户通过客户端浏览器请求服务器。
2 服务器接收用户请求后调用JSP页面。
3 在JSP页面中调用JavaBean。
4 在JavaBean中连接及操作数据库,或实现其他业务逻辑。
5 JavaBean将执行的结果返回JSP页面。
6 服务器读取JSP页面中的内容将页面中的静态与动态内容相结合。
7 服务器将最终的结果返回给客户端浏览器进行显示。
图2-12 JSP JavaBean设计模式
2.3.3 JSP JavaBean Servlet编程
JSP JavaBean设计模式虽然已经对网站的业务逻辑和显示页面进行了分离,但这种模式下的JSP不但要进行程序中大部分的流程控制,而且还要负责页面的显示,所以仍然不是一种理想的设计模式。
在JSP JavaBean设计模式的基础上加入Servlet来实现程序中的控制层,是一个很好的选择。在这种模式中,由Servlet来执行业务逻辑并负责程序的流程控制,JavaBean组件实现业务逻辑,充当着模型的角色,JSP用于页面的显示。可以看出,这种模式使得程序中的层次关系更明显,各组件的分工也非常明确。图2-13表示了该模式对客户端的请求进行处理的过程。
图2-13 JSP JavaBean Servlet设计模式
图2-13所示的模式中,各步骤的说明如下。
1 用户通过客户端浏览器请求服务器。
2 服务器接收用户请求后调用Servlet。
3 Servlet根据用户请求调用JavaBean处理业务。
4 在JavaBean中连接及操作数据库,或实现其他业务逻辑。
5 JavaBean将结果返回Servlet,在Servlet中将结果保存到请求对象中。
6 由Servlet转发请求到JSP页面。
7 服务器读取JSP页面中的内容将页面中的静态内容与动态内容结合。
8 服务器将最终的结果返回给客户端浏览器进行显示。
但JSP JavaBean Servlet模式同样也存在缺点。该模式遵循了MVC设计模式,MVC只是一个抽象的设计概念,它将待开发的应用程序分解为三个独立的部分:模型Model、视图View和控制器Controller。虽然用来实现MVC设计模式的技术可能都是相同的,但各公司都有自己的MVC架构。也就是说,这些公司用来实现自己的MVC架构所应用的技术可能都是JSP、Servlet与JavaBean,但它们的流程及设计却是不同的,所以工程师需要花更多的时间去了解。从项目开发的观点上来说,因为需要设计MVC各对象之间的数据交换格式与方法,所以会需要花费更多的时间在系统的设计上。
使用JSP JavaBean Servlet模式进行项目开发时,可以选择一个实现了MVC模式的现成的框架,在此框架下进行开发,能够大大节省开发时间,会取得事半功倍的效果。目前,已有很多可以使用的现成的MVC框架,例如Struts框架。
2.3.4 MVC模式
MVCModel-View-Controller,模型-视图-控制器是一种程序设计概念,它同时适用于简单的和复杂的程序。使用该模式,可将待开发的应用程序分解为3个独立的部分:模型、视图和控制器。
提出这种设计模式主要是因为应用程序中用来完成任务的代码模型,也称为"业务逻辑"通常是程序中相对稳定的部分,并且会被重复使用,而程序与用户进行交互的页面视图,却是经常改变的。如果因需要更新页面而不得不对业务逻辑代码进行改动,或者要在不同的模块中应用到相同的功能时重复地编写业务逻辑代码,不仅会降低整体程序开发的进程,而且会使程序变得难以维护。因此,将业务逻辑代码与外观呈现分离,将会更容易地根据需求的改变来改进程序。MVC模式的模型如图2-14所示。
图2-14 MVC模式的模型
Model模型:MVC模式中的Model模型指的是业务逻辑的代码,是应用程序中真正用来完成任务的部分。
View视图:视图实际上就是程序与用户进行交互的界面,用户可以看到它的存在。视图可以具备一定的功能,并应遵守对其所做的约束。在视图中,不应包含对数据处理的代码,即业务逻辑代码。
Controller控制器:控制器主要用于控制用户请求并做出响应。它根据用户的请求,选择模型或修改模型,并决定返回怎样的视图。
2.4 运行JSP时常见的出错信息及处理
1页面显示500错误,错误信息为:
An error occurred at line: 6 in the generated java file
Syntax error on token ";", import expected after this token
错误原因见如下代码:
pageEncoding="GBK"
此处,import中的分隔符应该是逗号,不能用分号。
2页面显示500错误,错误信息:
org.apache.jasper.JasperException: Unable to compile class for JSP:
An error occurred at line: 6 in the generated Java file
Syntax error on tokens, delete these tokens
此类信息都是页面的编写出现了语法错误。
例如,指令中出现了错误字符,或者使用了错误的属性名,或者有错误的属性值。
3页面显示500错误,错误信息:
org.apache.jasper.JasperException: index.jsp1,1 Unterminated
%@ page tag
该信息告诉用户:指令标签有错误。
4页面显示中文为乱码。例如:
???????JSP??---?????
原因见如下代码:
这里,contentType="texthtml, charset=GBK"分隔符用的是逗号,而此处只能用分号。
5错误:ClassNotFoundException。代表类没有被找到的异常。
原因:通常是出现在JDBC连接代码中,对应的驱动JAR包没有导入,或sqljdbc.jar对应的Class.forName类名中的类名写错了。
6错误信息:主机TCPIP连接失败。
原因:SQL Server配置管理器中,未将对应的SQL Server服务的TCPIP协议启用。或SQL Server服务器没有开启服务;或连接字符串中的localhost写错了;或启用的服务是开发版的SQL Server,即启用了SQL Express服务;或端口号写成了localhost:8080。
7出错信息:数据库连接失败。
①检查JAR包导入。
②检查连接字符串和驱动类字符串要避免使用SQL Server 2000的连接字符串,例如"databasename=数据库名"写成了"datebasename=数据库名",或"localhost:1433"写成了"localhost:8080"。
2.5 实训二:简单JSP页面的运行及调试
本实训只包含一个index.jsp页面。在该页面中,首先获取当前用户的访问时间,然后再对获取的时间进行分析,最后根据分析结果向页面中输出指定的信息。图2-15所示为实例的运行结果。
图2-15 实例的运行结果
这是一个动态的Web应用,因为程序会根据当前用户的访问时间来显示对应的消息,但这仍然是事先人为地编写出各种情况,然后由计算机来根据条件进行判断和选择。
1创建一个名为SecondJSP的Web项目。
2创建了项目后,在目录下新建一个index.jsp页面文件,并对该文件进行如下编码:
获取当前日期
Date nowday = new Date;
获取日期中的小时
int hour = nowday.getHours;
定义和使用日期格式化对象
SimpleDateFormat format = new SimpleDateFormat"yyyy-MM-dd HH:mm:ss";
String time = format.formatnowday;
%
第二个JSP应用
温馨提示!
现在时间为:
ifhour=24 && hourout.print"现在是凌晨!时间还很早,再睡会吧!";
else ifhour=5 && hourout.print"早上好!新的一天即将开始,您准备好了吗?";
else ifhour=10 && hourout.print"午休时间!正午好时光!";
else ifhour=13 && hourout.print"下午继续努力工作吧!";
else ifhour=18 && hourout.print"晚上好!自由时间!";
else ifhour=21 && hourout.print"已经是深夜,注意休息!";
%
从上述代码中可以很直观地看出,JSP页面是由HTML代码、JSP元素和嵌入到HTML代码中的Java代码构成的。当用户请求该页面时,服务器就加载该页面,并且会执行页面中的JSP元素和Java代码。最后将执行的结果与HTML代码一起返回给客户端,由客户端浏览器进行显示。
2.6 本 章 小 结
本章首先介绍了HTML语言中文件的结构、基本结构中所包含的元素和对应的元素属性等相关知识;对JSP语法知识进行了基本的讲解;给出了JSP运行调试时常见的出错信息及处理意见;最后通过实训,强化练习了JSP页面运行及调试的具体过程。
练习与提高二
1.选择题
1 标记中的内容是 。
A.script脚本B.JSP程序片段
C.JSP声明D.JSP表达式
2 下列不属于表单组件的是 。
A.选项列表B.表格
C.按钮D.文本域
3 在HTML标记中的注释方式是 。
A.B.注释内容
C.* 注释内容 *D.** 注释内容 **
4 JSP隐藏注释 。
A.浏览器端可见、服务器端可见
B.浏览器端不可见、服务器端可见
C.浏览器端可见、服务器端不可见
D.浏览器端不可见、服务器端不可见
5 在定义表格时,用于对表格进行行设置的标记是 。
A.B.
C.D.
6 能在浏览器的地址栏中看到提交数据的表单的提交方式是 。
A.submitB.get
C.postD.out
2.填空题
1 在JSP中,函数的定义必须放在 中,关键字 用于从函数中进行返回。
2 和标记的 属性可用于设置跨行单元格, 属性可用于设置跨列单元格。
3是一切网页实现的基础。
4 表单标记中的 属性用于指定处理表单数据程序的URL地址。
3.简答题
1 JSP文件中包含哪几种注释,它们之间的区别是什么?
2 一个JSP页面可由哪些元素组成?
4.实训题
1 编写HTML文件,实现3秒钟自动跳转到哈尔滨金融学院网站的首页。
2 制作如图2-16所示的注册页面。
图2-16 注册页面
3 制作如图2-17所示的网页设计大赛登记表。
图2-17 网页设计大赛登记表页面