图书简介:
目 录
第1篇 JSP基本技术
第1章 JSP运行环境 1
1.1 动态网页技术 1
1.1.1 Web发展的三个阶段 1
1.1.2 Web应用程序开发的三个阶段 2
1.1.3 HTTP请求地址——URL 3
1.1.4 HTTP状态码 3
1.1.5 JSP动态网页的处理过程 5
1.2 Tomcat服务器的安装与配置 5
1.2.1 安装Java SE 5
1.2.2 安装Tomcat 7
1.2.3 Tomcat服务器的目录结构 9
1.2.4 Tomcat服务器的配置文件 9
1.3 JSP Web应用程序的目录结构与
发布 11
本章小结 15
思考题 15
第2章 JSP基本语法 16
2.1 JSP的构成 16
2.2 指令元素 16
2.2.1 page指令 17
2.2.2 include指令 20
2.2.3 taglib指令 21
2.3 脚本元素 21
2.3.1 Scriptlet 22
2.3.2 表达式 22
2.3.3 声明 23
2.4 动作元素 26
2.4.1 <jsp:include> 26
2.4.2 <jsp:param> 28
2.4.3 <jsp:forward> 28
2.4.4 <jsp:plugin> 29
本章小结 31
思考题 31
第3章 JSP内置对象 32
3.1 out 32
3.2 request 33
3.3 response 38
3.4 Cookie 40
3.5 session 42
3.6 application 45
3.7 pageContext 46
3.8 page 48
3.9 JSP作用域 49
3.10 config 49
3.11 exception 50
3.12 内置对象综合例程 50
本章小结 53
思考题 53
第4章 Servlet 54
4.1 Servlet技术 54
4.1.1 Servlet技术概述 54
4.1.2 Servlet的特点 54
4.1.3 Servlet的生命周期 54
4.2 Servlet接口 56
4.2.1 Servlet实现相关 57
4.2.2 Servlet配置相关 59
4.2.3 请求和响应相关 60
4.2.4 会话相关 61
4.2.5 Servlet上下文相关 61
4.2.6 Servlet协作相关 61
4.2.7 过滤器相关 62
4.2.8 Servlet异常相关 62
4.3 Servlet设计与配置 63
4.3.1 Servlet的开发流程 63
4.3.2 JSP的配置路径 69
4.3.3 Servlet的注解配置 70
4.4 JSP Web应用程序的开发模式 72
本章小结 73
思考题 74
第5章 Java Bean 75
5.1 Java Bean简介 75
5.1.1 Java Bean的特性 75
5.1.2 Java Bean的属性 75
5.1.3 Java Bean的编写 76
5.2 JSP中使用Java Bean 77
5.2.1 <jsp:useBean> 78
5.2.2 <jsp:getProperty> 79
5.2.3 <jsp:setProperty> 79
本章小结 83
思考题 83
第6章 JDBC 84
6.1 JDBC介绍 84
6.2 JDBC API 85
6.2.1 Driver接口 85
6.2.2 DriverManager类 85
6.2.3 Connection接口 86
6.2.4 Statement接口 86
6.2.5 ResultSet接口 87
6.3 JDBC访问数据库 88
6.3.1 使用JDBC-ODBC桥访问
数据库 90
6.3.2 使用All-Java JDBC Driver
访问数据库 98
6.3.3 通过Java Bean访问数据库 107
6.3.4 JDBC的其他操作 125
6.4 数据分页显示 131
6.5 数据库连接池 143
6.6 JSP数据库开发实例 145
本章小结 159
思考题 160
第7章 Eclipse 161
7.1 Eclipse开发环境的建立 161
7.1.1 Eclipse的下载安装 161
7.1.2 插件安装 162
7.2 Eclipse的界面与参数设置 165
7.2.1 Eclipse的界面 165
7.2.2 Eclipse的参数设置 167
7.3 使用Eclipse开发JSP 171
7.3.1 动态Web项目的建立 171
7.3.2 Eclipse内嵌Web服务器 173
7.3.3 增强的代码编辑功能 177
7.4 Eclipse项目管理 183
7.4.1 项目导出 183
7.4.2 导入项目 184
本章小结 186
思考题 186
第2篇 JSP应用开发专题
第8章 页面之间数据的传递 187
8.1 同一个会话页面间数据的传递 187
8.2 不同会话页面间数据的传递 192
本章小结 193
思考题 193
第9章 JSP中文问题 194
9.1 字符编码 194
9.2 Java语言中的编码 196
9.2.1 Java程序处理中的编码转换 196
9.2.2 JSP程序处理过程中的
编码转换 197
9.2.3 JSP中文处理 199
9.2.4 数据库中文问题 203
本章小结 207
思考题 207
第10章 JSP应用程序的安全性 208
10.1 安全配置元素 208
10.2 Tomcat安全域 211
10.3 安全控制实例 213
本章小结 215
思考题 216
第3篇 JSP高级技术
第11章 Servlet监听器 217
11.1 Servlet事件监听相关的API 217
11.1.1 ServletContext监听API 217
11.1.2 HttpSession监听API 218
11.1.3 ServletRequest监听API 219
11.2 监听器程序的开发 219
11.2.1 监听器的设计与配置 220
11.2.2 Servlet上下文监听程序
实例 222
11.2.3 会话监听程序实例 223
11.2.4 请求监听程序实例 228
本章小结 231
思考题 231
第12章 Servlet过滤器 232
12.1 Servlet中与过滤器相关的API 232
12.1.1 Filter接口 232
12.1.2 FilterChain接口 233
12.1.3 FilterConfig接口 233
12.2 过滤器程序的开发 234
12.2.1 过滤器的设计与配置 234
12.2.2 简单的过滤器实例 237
12.2.3 处理参数的过滤器实例 239
12.2.4 过滤器的简单应用 241
本章小结 242
思考题 243
第13章 表达式语言 244
13.1 表达式语言的语法 244
13.1.1 EL保留字 244
13.1.2 EL字面量(Literals) 244
13.1.3 EL默认值与自动类型
转换 244
13.1.4 表达式语言中的设置 245
13.2 表达式语言中的普通运算 246
13.3 表达式语言中的Java Bean 248
13.4 表达式语言中的隐式对象 249
13.5 EL函数 251
本章小结 253
思考题 253
第14章 自定义标签 254
14.1 自定义标签简介 254
14.1.1 自定义标签的优点 254
14.1.2 自定义标签的特点 254
14.1.3 自定义标签的设计过程 254
14.1.4 taglib指令 254
14.1.5 自定义标签的类型 255
14.1.6 自定义标签的接口与类 255
14.2 经典标签 255
14.2.1 Tag接口 256
14.2.2 tld文件 260
14.2.3 自定义标签的属性 263
14.2.4 IterationTag接口 265
14.2.5 BodyTag接口 268
14.2.6 标签的嵌套 271
14.3 简单标签 272
14.4 标签文件 274
本章小结 281
思考题 281
第15章 标准标签库 282
15.1 JSTL简介 282
15.1.1 JSTL的安装配置 282
15.1.2 JSTL的优点 282
15.1.3 JSTL标签库 282
15.2 核心标签库 283
15.2.1 c:out 283
15.2.2 c:set 285
15.2.3 c:if 288
15.2.4 c:choose、c:when、
c:otherwise 288
15.2.5 c:forEach 289
15.2.6 c:forToken 291
15.2.7 c:import 292
15.2.8 c:url 293
15.2.9 c:redirect 294
15.2.10 c:param 294
15.2.11 c:catch 295
15.3 SQL标签库 295
15.3.1 sql:setDataSource 295
15.3.2 sql:query 296
15.3.3 sql:param 299
15.3.4 sql: update 301
15.4 国际化与标准化标签库 302
15.4.1 <fmt:setLocale> 303
15.4.2 <fmt:bundle>、
<fmt:setBundle> 303
15.4.3 <fmt:message> 304
15.4.4 <fmt:param> 305
15.4.5 <fmt:requestEncoding> 306
15.4.6 <fmt:timeZone>、
<fmt:setTimeZone> 306
15.4.7 <fmt:formatNumber> 306
15.4.8 <fmt:parseNumber> 307
15.4.9 <fmt:formatDate> 308
15.4.10 <fmt:parseDate> 309
本章小结 312
思考题 312
第4篇 JSP常用组件
第16章 文件上传和下载组件 313
16.1 jspSmartUpload API 313
16.1.1 File类 313
16.1.2 Files类 314
16.1.3 Request类 315
16.1.4 SmartUpload类 315
16.2 文件上传 318
16.3 文件下载 322
本章小结 323
思考题 323
第17章 日志组件 324
17.1 Log4j 324
17.1.1 Log4j API 324
17.1.2 Log4j的配置 328
17.1.3 Log4j的使用 329
17.2 commons-logging 333
17.2.1 commons-logging API 333
17.2.2 commons-logging的使用 335
本章小结 335
思考题 336
附 录
附录A Tomcat版本简介 337
附录B MySQL使用说明 337
附录C 实验指导书 337
附录D 实验参考答案 337
参考文献 338
展开
第2版前言
自本书出版以来,Java Web界发生了一些重要的事件。Oracle公司于2010年完成了对SUN公司的收购;2014年发布了变更较大的JSDK8,其中取消了对JDBC-ODBC桥驱动的支持;Apache Software Foundation于2010年首次发布Tomcat 7,Tomcat 7支持Java EE 6,实现了Servlet 3.0/ JSP 2.2规范,新增的注解功能,简化了 Servlet、过滤器(Filter)和监听器(Listener)的配置,精简了部署描述文件web.xml。由于JSP技术在不断地更新发展,本书有必要进行修订再版。
本书第2版在第1版的基础上修订编写而成,主要修改了1.2节JSDK与Tomcat下载安装的内容;重写了第6章JDBC,增加了使用Access JDBC驱动访问Access数据库的内容,增加了JDBC访问SQL Server 2005的注意事项,以及JDBC访问更高版本SQL Server数据库的问题,简化了6.4节数据分页部分;在相关的章节增加了运用Annotation配置Servlet、Filter、Listener的内容;各章之后新增了本章小结和思考题;重写了附录A;修改了附录C的实验3;重写了附录C的实验5;书中的例程组织为一个网站,提供Eclipse项目,供读者学习参考。
The Eclipse Foundation于2007年Eclipse3.3 Eruopa版开始,发布集成了Java Web开发插件的Eclipse IDE for Java EE Developers工具,使得Java Web开发者无须再安装配置众多的Java Web插件,或者依赖于庞大的MyEclipse商业软件,就能轻松、方便地使用功能强大的Eclipse IDE来进行Java Web开发。为使本书的知识体系更加完善,第2版补充一章介绍Eclipse的使用,以Eclipse4.4 Luna版的Eclipse IDE for Java EE Developers为基础。
本书第2版秉承第1版的特点,力求克服以往教材的不足,减少与相关课程知识的重叠;吸取多年来的教学经验,注重反映Web应用程序开发技术的最新成果;按照知识关联和循序渐进的学习路线,构建更加完善和清晰的知识体系;对JSP技术进行了系统、深入的介绍。本书的结构经过精心编排设计,讲解深入细致,例程精练典型,主要特点如下。
(1)对JSP的各种技术进行了简练的、实质性的解释。指令是对JSP解析器环境的设置;动作是服务器端的动态标记,JSP解析器调用特定的方法处理相应的动作标记;内置对象是服务器提供的API类库;Servlet是一个实现了特定接口,运行在服务器环境中的特殊Java类;监听器是Web方式的Java事件处理机制;过滤器是对HTTP请求的预处理和后处理;分页显示是对数据的二次选择。
(2)对JSP语法中容易混淆且较难理解的概念进行了解释和辨析。如page指令中有关页面编码的contentType属性与pageEncoding属性,声明中的变量定义与Scriplet中变量的定义,include指令与include动作,forward动作转向与response内置对象sendRedirect方法转向,request内置对象的getParameter方法与getAttribute方法等。
(3)对各类程序的开发过程进行了总结。包括Servlet的开发步骤,JDBC访问数据库的步骤,Web监听器的设计步骤,过滤器的设计步骤,EL函数的应用步骤,自定义标签的设计步骤。
(4)对JDBC访问各类数据库的注意事项进行了详细总结。
(5)附录实验指导书中采用程序填空的方式进行代码设计的训练,并对每个实验的注意事项进行了说明,对实验程序填空、上机作业、实验思考题给出了参考答案。
(6)本书只专注于JSP技术的介绍。不讲HTML、CSS、JavaScript,不讲Java,不讲XML,不讲数据库原理,这些知识应从前置课程中系统地学习;也不讲Structs、Spring、Hibernate或iBatis,这些MVC和数据访问框架是后续的进阶课程。
(7)本书包含配套教学PPT及相关资源,读者可登录华信教育资源网(www.hxedu.com.cn)注册后免费下载。
使用本书作为教材,64学时(不包括实验学时)可讲完全书大部分内容;课时为32学时,建议讲授第1篇JSP基本技术的7章,其余部分可供学生自学、参考。第7章Eclipse可提前讲授,也可在各章节中穿插讲解应用。
本书得到山东省高校精品课程基金项目的支持,基金编号为2013BK106。杨占胜编写了本书中的第1章至第14章、第17章与附录部分;王海峰与杨占胜共同编写了第15章;王鸽编写了第16章。孙琳、刘士彩参与了部分习题的编写,并对部分章节提出了许多宝贵的意见和建议;全书由杨占胜统稿。感谢电子工业出版社的鼎力支持和通力合作,由于戴晨辰编辑和其他工作人员付出的辛勤劳动,使得本书得以尽快出版,以应教学之需。
这次修订再版希望能反映一些最新的Java Web技术,并使本书更加严谨完善,但这并非易事,敬请广大读者们批评指正,特别是使用本教程的各位教师和同学,如果有什么问题和建议,欢迎大家随时向作者提出,作者E-mail:670418190@qq.com。
作 者
2017年8月于临沂
第1版前言
程序设计可分为系统程序设计和应用程序设计,系统程序如操作系统、编译程序、数据库管理系统、驱动程序等。应用程序按应用范围有:多媒体程序、网络程序、数据库程序等;按其运行方式有:命令方式程序、图形用户界面(窗口)程序、Web应用程序、手机及PDA程序等。命令方式程序是我们在学习C、C++、汇编、Java等各种计算机语言时常遇到的例子和练习程序,这类程序通过在命令方式下的输入/输出与用户进行交互,人机界面单一,设计较为简单,实际应用中已很少将其作为单独的一类程序使用。图形用户界面(GUI)程序是我们最常见的,因为Windows是一个图形用户界面的操作系统,其中的大部分程序都是图形界面的。这类程序是事件驱动的,以菜单、工具栏、对话框等窗体元素作为人机交互的界面。如果单纯使用操作系统的API,用任何一种语言设计一个图形界面的程序都是很复杂、很低效的,即使用面向对象的程序设计语言,再辅以类库也还是有一定的复杂性。所幸的是组件技术的出现,大大地降低了窗口程序的设计难度;再加上功能强大的集成开发环境(IDE),使窗口程序设计达到了简单高效的地步。手机及PDA程序目前很热门,这类程序与一般的计算机程序原理基本一致,只是运行环境受限,比如CPU的运算速度、存储器的容量等,一般使用专有类库及API进行设计。Internet的迅速普及,电子商务的广泛应用,促使Web应用程序爆炸式发展,Web程序已经成为企业应用的主要形式。在Web应用程序流行之前,有一种基于客户机/服务器(C/S)的网络程序,这类程序都有一个专用的服务器程序和一个客户端程序,双方通过底层的TCP/IP协议通信。编程时主要使用Socket技术,Socket是操作系统TCP/IP API的高层抽象。C/S程序的缺点是每个客户端必须安装专用的客户程序,在使用的方便性和安全性方面存在很大的问题,使用底层的传输协议,常被防火墙拦截,在安全性要求高的领域不能应用。Web应用程序也是基于客户机/服务器模式的,但它的服务器统一为Web服务器,客户机统一为浏览器,所以又称为B/S(Browser/Server)结构的程序。B/S程序使用HTTP协议进行通信,利用Web服务器和浏览器的安全机制,克服了C/S程序的缺点。Web应用程序是一个服务器端动态的网站,它通过浏览器与用户交互,最终返回给用户的是一个HTML文档,所以学习Web应用程序开发,需要“Web技术基础”知识:HTML、JavaScript、CSS;JSP Web应用程序使用Java语言编写服务器端动态程序,所以又需要“Java语言程序设计”方面的知识;Web应用程序通常要访问数据库,数据库访问是Web应用程序设计的重点和难点,所以还需要“数据库基础与应用”方面的知识,如结构化查询语言(SQL)、数据库的安全机制与权限设置等,JSP中的大量配置文件都使用XML格式,所以也需要“XML基础与应用”方面的知识。本书介绍的JSP Web应用程序开发技术是以上述先修课程的知识为基础的。
JSP应用开发涉及的软件技术多,综合性强。JSP技术本身的知识也较繁杂,各知识点之间相互关联,如自定义标签中会用到表达式语言(EL),而EL函数又会用到自定义标签中的标签库描述。要系统地介绍JSP技术体系,合理地组织和编排JSP的知识结构很重要。在JSP技术的发展过程中,是先有Servlet,后有JSP的。介绍JSP技术的教材主要有两种顺序,一种是先介绍JSP基本语法,然后介绍Servlet;另一种是先介绍Servlet,后引入JSP。鉴于Servlet的复杂性和几年来的教学实践,本书在结构安排上,从动态网页的发展入手引入JSP,然后介绍Servlet,但将Servlet提到Java Bean之前。在JSP高级技术部分,由于表达式语言较为简单,标准标签库(JSTL)使用到了表达式语言,而自定义标签与JSTL应有连贯性,所以将表达式语言提到了自定义标签之前。在内容方面,本书力求对各种技术进行简练、实质性的解释,如指令是对JSP解析器环境的设置;动作是服务器端的动态标记,JSP解析器调用特定的方法处理相应的动作标记;内置对象是服务器提供的API类库;Servlet是一个实现了特定接口,运行在服务器环境中的特殊Java类;监听器是Web方式的Java事件处理机制;过滤器是对HTTP请求的预处理和后处理;分页显示是对数据的再次选择。JSP语法中有些概念容易混淆且较难理解,如page指令中有关页面编码的contentType属性与pageEncoding属性;声明中的变量定义与Scriptlet中变量的定义;include指令与include动作;forward动作转向与response内置对象sendRedirect方法转向;request内置对象的getParameter方法与getAttribute方法,本书都进行了详细的辨析。对于JSP技术中的两大难点,数据库访问和自定义标签,本书重点进行了讲解。数据库访问部分按访问方式和要访问的数据库类型,分别进行了大量示例,并对各种可能出现的问题列出了注意事项。阐述自定义标签中的属性时,提出了属性在何处声明、何处定义、何处赋值、何处使用几个问题来帮助理解。其中数据分页、中文乱码、容器可控安全性等章节写得较有新意。书中的例程主要来源于教学实践,在本书的写作过程中,又重新进行了选择设计,尽可能使每个程序都很典型。阅读源代码是学习程序设计语言的最有效途径,为了鼓励和方便读者阅读源程序,对于书中各个例程所代表的知识点都做了详细的注释。所有的程序都在Tomcat6.0中进行了调试运行。本书所附光盘包含了书中所有例程的源代码,以及支持软件。总之,本书在结构安排上,内容讲解方面力求有所特色和创新,但作者水平有限、编写时间仓促,不足之处在所难免,希望阅读本书的师生多提宝贵意见,E-mail:zsyoung@sohu.com。
本书按照21世纪高等学校计算机规划教材及计算机实用软件应用系列教材的要求编写。杨占胜编写了第1章至第14章、第16章与附录部分,刘士彩与王鸽共同编写了第15章,山东科技大学信息学院与临沂师范学院信息学院Java Web应用程序开发课程团队的其他老师参与了部分实验思考题的编写,并对部分章节提出了许多宝贵的意见和建议。全书由杨占胜统稿,临沂师范学院信息学院党委书记赵铭建教授对本书的编写给予了高度的关心和热情的帮助,并对全书进行了审核。
最后,衷心感谢出版社的编辑,是他们的辛勤劳动,使本书得以顺利出版。此外,本书参考了许多国内外同行的著作、博文,引用了其中的观点、数据和结论,在此一并表示感谢。
作 者
2009年8月
展开