本书采用“任务驱动”的编写模式,由浅入深、循序渐进、全面系统地介绍了Java Web开发的相关知识。全书通过实际应用案例,帮助读者巩固所学的知识,以便更好地进行Java Web开发实践。
本书共15章,内容涵盖了Java Web开发基础知识、Servlet接收GET请求数据、Servlet接收POST请求数据、Servlet生成HTTP响应数据、异步请求和异步响应、会话控制技术(Cookie与Session)、过滤器和监听器、MVC和JSTL、个人笔记系统的数据库设计与实现、MySQL事务机制和JDBC的使用、layui和CKEditor的使用,以及个人笔记系统首页模块的设计与实现、用户管理模块的设计与实现、笔记管理模块的设计与实现、其他功能模块的设计与实现等项目实训。
本书内容丰富、讲解深入,适合初、中级Java Web开发人员阅读,可以作为各类院校计算机相关专业的教材,也可作为广大Java Web开发爱好者的实用参考书。
【对于学生】
1.入门容易、讲解细致、便于自学
为了方便读者理解晦涩难懂的知识点,编者亲手绘制了大量图片对相关知识点进行形象化表达。
2.循序渐进、由浅入深、知识详尽
全书内容编排循序渐进、由浅入深、知识详尽。学完本书的内容后,读者可以掌握与Java Web相关的大部分知识,例如可以掌握Java Web三大组件知识、HTTP知识、异步请求与响应知识、JSP+JSTL知识、数据库设计知识、事务管理知识、UI前端框架layui知识、CKEditor知识及MVC知识等。
3.理论知识和实践操作充分融合,助力读者理论落地
本书力求将Java Web理论知识融入实践任务中,读者完成实践任务后,在获得阶段性学习成果的同时,也掌握了Java Web理论知识。
4.实践任务目的明确、环境清晰、步骤详细
本书将实践任务分解成若干个子任务,将各子任务又分解成若干场景,将场景又分解成若干步骤,读者按照步骤执行即可自行完成实践任务;换言之,本书可以很大程度助力读者动手实践,提升实战技能。
5.项目案例精心定制,激发读者学习兴趣
本书将Java Web理论知识充分融入精心定制的项目案例,读者按照步骤执行即可快速完成项目案例的实际开发,这可以使读者获得充足的学习成就感,激发读者的学习兴趣。
【对于教师】
1.帮助教师从简单、机械、重复率高的体力劳动中解脱出来
对于学习过程、上机过程中简单、机械、重复率高的问题,教师可以建议学生在书中寻找答案,从而在提升学生自学能力的同时,帮助教师从简单、机械、重复率高的劳动中解脱出来。
2.便于教师考核学生
教师可将第11~15章的内容用于课程设计或者期末考试,无须讲解、无须指导,学生只须按照步骤执行,即可自行完成项目案例。这样的内容安排既可以提升学生的自学能力,又可以节省教师的教学时间。教师可以根据学生完成项目案例的情况,考查学生的学习效果。学生的成绩核定基本原则如下(仅供参考)。
(1)坚持“底线思维”
面向所有学生设置“底线任务”,即制作出项目案例。只有制作出项目案例,才能算考核合格。简而言之,参与考核的学生可以“过”,但不可“不及”。
(2)拓展项目案例的功能,发掘优秀学生
学有余力的学生可以对项目案例自行增加“拓展性功能”;教师可以根据学生完成的“拓展性功能”的难易程度和UI设计效果,对其进行成绩核定,从而发掘优秀学生。
3.充分考虑软件的兼容性问题
学生的个人计算机可能使用64位操作系统,但教师教学环境的计算机可能使用32位操作系统。
孔祥盛:
副教授,精通Java、JavaScript、PHP、Python等编程语言,熟悉Web开发、爬虫、自动化测试、数据分析与数据挖掘、数据可视化、数据库等技术,擅长将抽象的理论知识具体化、生活化,善于将综合知识融会贯通于项目案例,主编多部教材,其中,教材《PHP基础与实例教程》 重印20余次,并获河南省普通高等教育“十四五”规划教材立项、河南省优秀教材二等奖;教材《MySQL数据库基础与实例教程》重印近20次。
【章名目录】
第 1章 Java Web开发基础知识 1
第 2章 Servlet接收GET请求数据 18
第3章 Servlet接收POST请求数据 48
第4章 Servlet生成HTTP响应数据 74
第5章 异步请求和异步响应 94
第6章 会话控制技术:Cookie与Session 114
第7章 过滤器和监听器 140
第8章 MVC和JSTL 154
第9章 个人笔记系统的数据库设计与实现 179
第 10章 MySQL事务机制和JDBC的使用 206
第 11章 layui和CKEditor的使用 233
第 12章 项目实训:个人笔记系统首页模块的设计与实现 256
第 13章 项目实训:个人笔记系统用户管理模块的设计与实现 270
第 14章 项目实训:个人笔记系统笔记管理模块的设计与实现 289
第 15章 项目实训:个人笔记系统其他功能模块的设计与实现 311
【详细目录】
第 1章 Java Web开发基础知识 1
1.1 B/S概述 1
1.1.1 浏览器 1
1.1.2 服务器 1
1.2 静态代码和动态代码 1
1.2.1 HTML和静态代码 2
1.2.2 服务器端脚本语言和动态代码 2
1.2.3 Servlet容器和动态代码之间的关系 3
1.2.4 Web服务器上资源文件的分类 3
1.3 HTTP概述 4
1.3.1 浏览器与Web服务器之间的交互 4
1.3.2 HTTP的本质 5
1.3.3 HTTP请求/HTTP响应的详细过程 5
1.4 Java Web开发环境的部署 6
1.4.1 JDK的版本选择和安装 6
1.4.2 Tomcat的版本选择和安装 6
1.4.3 启动和停止运行Tomcat 6
1.4.4 本机的“左右互搏之术” 8
1.4.5 Tomcat端口占用问题 9
1.4.6 有趣的实验 9
实践任务 Java Web开发基础知识 11
第 2章 Servlet接收GET请求数据 18
2.1 使用Eclipse开发Java Web程序 18
2.1.1 Eclipse的安装和启动 18
2.1.2 启动Eclipse的注意事项 18
2.1.3 认识Eclipse工作空间 19
2.1.4 小露身手:使用Eclipse创建动态Web项目 19
2.1.5 Eclipse的View和Perspective 21
2.1.6 小露身手:使用Eclipse创建第 一个Servlet程序 21
2.1.7 Eclipse中Servlet的URL Mappings和Servlet的urlPatterns 25
2.1.8 Servlet程序的生命周期 25
2.1.9 小露身手:使用Eclipse创建JSP程序 26
2.2 字符编码 28
2.2.1 JSP文件的字符编码与pageEncoding 28
2.2.2 MIME和字符编码 29
2.2.3 JSP文件、pageEncoding和charset的字符编码之间的关系 31
2.3 URL路径 32
2.4 过程分析:浏览器发送GET请求数据和Web服务器接收GET请求数据 33
2.4.1 过程分析:浏览器向Web服务器发送GET请求数据 33
2.4.2 GET请求数据的构成 33
2.4.3 过程分析:Web服务器接收GET请求数据 35
2.5 request请求对象获取GET请求数据 37
2.5.1 获取路径信息 37
2.5.2 获取GET请求参数信息 37
2.5.3 获取GET请求行信息 38
2.5.4 获取GET请求头信息 38
2.5.5 获取Web服务器主机和浏览器主机信息 38
2.5.6 获取URL Mappings信息的方法 38
2.6 request请求对象的请求派发功能 39
2.6.1 RequestDispatcher 39
2.6.2 请求派发的请求转发 39
2.6.3 请求转发的实现 40
2.6.4 请求转发之间Servlet程序的数据共享 40
2.6.5 request请求对象的属性和参数区别 41
实践任务 Servlet接收GET请求数据 42
第3章 Servlet接收POST请求数据 48
3.1 FORM表单 48
3.1.1 表单标签 48
3.1.2 表单控件 48
3.1.3 表单按钮 51
3.1.4 小露身手:利用FORM表单模拟发送GET请求数据 52
3.2 URL路径定位方法 53
3.2.1 URL绝对路径 54
3.2.2 URL相对路径 54
3.2.3 page-relative路径的技巧 56
3.2.4 小露身手:URL路径定位方法 57
3.3 过程分析:浏览器发送POST请求数据和Web服务器接收POST请求数据 59
3.3.1 准备工作 59
3.3.2 过程分析:浏览器向Web服务器发送POST请求数据 60
3.3.3 POST请求数据的构成 60
3.3.4 POST与GET请求数据对比 61
3.3.5 过程分析:Web服务器接收POST请求数据 62
3.4 小露身手:request请求对象接收application/x-www-form-urlencoded格式的POST请求数据 62
3.5 小露身手:向Servlet程序添加multipart/form-data支持 66
3.5.1 application/x-www-form-urlencoded与multipart/form-data的比较 68
3.5.2 理解multipart/form-data内容格式中的片段 69
3.5.3 request请求对象获取multipart/form-data请求体中的片段 70
实践任务 Servlet接收POST请求数据 72
第4章 Servlet生成HTTP响应数据 74
4.1 HTTP响应数据与HttpServletResponse之间的关系 74
4.2 HTTP响应行 75
4.2.1 响应状态码 75
4.2.2 使用response响应对象设置响应状态码 75
4.3 HTTP响应头列表 76
4.3.1 常见的响应头 76
4.3.2 使用response响应对象设置、添加响应头 78
4.3.3 重定向、定时刷新和请求转发的比较 79
4.4 使用response响应对象生成HTTP响应体 81
4.4.1 response响应对象的缓存 81
4.4.2 向response缓存添加文本型数据 82
4.4.3 向response缓存添加字节数据 82
4.4.4 response响应对象“一石三鸟”的代码 83
实践任务 Servlet生成HTTP响应数据 84
第5章 异步请求和异步响应 94
5.1 Web前端技术 94
5.1.1 HTML简介 94
5.1.2 HTML元素的属性 94
5.1.3 CSS简介 95
5.1.4 小露身手:理解CSS中层叠的含义 96
5.1.5 JavaScript简介 97
5.2 JavaScript入门 97
5.2.1 JavaScript基础知识 97
5.2.2 小露身手:演示HTML元素和JavaScript呈现的顺序 99
5.2.3 通过JavaScript的document对象操作HTML元素 99
5.2.4 小露身手:通过JavaScript的document对象操作HTML元素内容 101
5.3 异步请求和异步响应 102
5.3.1 异步请求和同步请求概述 102
5.3.2 XMLHttpRequest异步请求对象 103
5.3.3 小露身手:了解GET异步请求和异步响应的执行流程 106
5.3.4 小露身手:使用XMLHttpRequest发送异步的POST请求 109
5.3.5 小露身手:使用XMLHttpRequest和FormData异步上传、显示图片 110
实践任务 异步请求和异步响应 113
第6章 会话控制技术:Cookie与Session 114
6.1 会话控制技术概述 114
6.2 Cookie会话控制技术 114
6.2.1 Cookie的工作原理 114
6.2.2 Cookie的本质与核心 116
6.2.3 创建Cookie 116
6.2.4 将cookie对象添加到HTTP响应头列表中 118
6.2.5 读取Cookie 118
6.2.6 使Cookie手动失效 119
6.2.7 小露身手:Cookie的综合运用 119
6.2.8 重定向和请求转发关于Cookie使用的区别 123
6.3 Session会话控制技术 124
6.3.1 Session的工作原理 124
6.3.2 Session的本质与核心 126
6.3.3 开启Session和获取已有的session对象 126
6.3.4 Servlet开启Session和JSP开启Session的区别 127
6.3.5 session对象的使用 127
6.3.6 删除Session或者使Session失效 127
6.3.7 小露身手:Session的综合使用 128
实践任务 会话控制技术:Cookie与Session 139
第7章 过滤器和监听器 140
7.1 过滤器 140
7.1.1 小露身手:创建最简单的过滤器ABCFilter 141
7.1.2 过滤器总结 143
7.1.3 小露身手:过滤器链的使用 144
7.1.4 过滤器的综合应用1:URL级别的权限访问控制 145
7.1.5 小露身手:使用过滤器实现URL级别的权限访问控制 145
7.1.6 过滤器的综合应用2:使用过滤器实现表单验证 147
7.1.7 小露身手:使用过滤器实现表单验证 148
7.2 监听器 148
7.2.1 小露身手:演示Java Web 状态监听器和属性监听器 149
7.2.2 小露身手:利用HttpSessionListener统计在线人数 152
实践任务 过滤器和监听器 153
第8章 MVC和JSTL 154
8.1 MVC 154
8.1.1 MVC的历史与简介 154
8.1.2 MVC与Web开发的关系 155
8.1.3 MVC与Java Web的关系 155
8.1.4 理解Service和DAO的关系 157
8.2 JavaBean 158
8.2.1 JavaBean简介 158
8.2.2 JavaBean代码编写规范 158
8.2.3 JavaBean命名属性的特殊情况 159
8.2.4 小露身手:在Eclipse中创建数据模型JavaBean和业务逻辑Service 160
8.2.5 JavaBean的分类 162
8.3 JSP的内置对象 163
8.3.1 内置对象out 163
8.3.2 内置对象application和Servlet中的ServletContext 164
8.3.3 内置对象pageContext 165
8.4 EL 165
8.4.1 EL简介 166
8.4.2 EL的功能和优点 166
8.4.3 EL的内置对象 167
8.4.4 小露身手:EL的使用 167
8.5 JSTL 173
8.5.1 JSTL核心标签库的准备工作 173
8.5.2 JSTL核心标签库的使用 174
8.5.3 小露身手:JSTL核心标签库的使用 174
实践任务 MVC和JSTL 178
第9章 个人笔记系统的数据库设计与实现 179
9.1 数据库概述 179
9.1.1 数据库管理系统和数据库 179
9.1.2 表结构和表记录 180
9.1.3 SQL 180
9.2 个人笔记系统数据库的设计 180
9.2.1 构建个人笔记系统的必要性 181
9.2.2 个人笔记系统的功能需求分析 181
9.2.3 E-R图简介 182
9.2.4 个人笔记系统E-R图的设计 185
9.2.5 个人笔记系统表结构的设计 186
9.3 MySQL安装和配置 188
9.3.1 小露身手:在Windows中安装MySQL ZIP压缩文件 188
9.3.2 小露身手:将MySQL服务注册为Windows服务 190
9.4 数据库的管理 191
9.5 表结构的管理 192
9.5.1 创建表结构的准备工作 192
9.5.2 创建表结构 194
9.5.3 查看表和查看表结构 195
9.5.4 删除表结构 195
9.5.5 小露身手:创建个人笔记系统的数据库和数据库表 196
9.6 表记录的更新 197
9.6.1 添加表记录 197
9.6.2 修改表记录 198
9.6.3 删除表记录 198
9.6.4 检索表的所有记录 198
9.6.5 小露身手:向个人笔记系统的数据库添加测试数据 198
9.6.6 小露身手:更新表记录时,不能违反表之间的外键约束条件 200
9.7 表记录的检索 200
9.7.1 使用select子句指定字段列表 201
9.7.2 distinct和limit 201
9.7.3 表和表之间的连接 202
9.7.4 使用where子句过滤结果集 202
9.7.5 使用order by子句对结果集排序 203
9.7.6 使用聚合函数汇总结果集 204
9.7.7 使用group by子句对记录分组统计 204
9.7.8 小露身手:个人笔记系统的综合查询 204
实践任务 个人笔记系统的数据库设计与实现 205
第 10章 MySQL事务机制和JDBC的使用 206
10.1 MySQL事务机制 206
10.1.1 个人笔记系统中事务机制的必要性 206
10.1.2 事务机制中同一个数据库连接的必要性 207
10.1.3 事务机制中关闭数据库连接自动提交模式的必要性 207
10.1.4 个人笔记系统的事务实现 208
10.2 JDBC概述 209
10.2.1 Java程序通过JDBC访问数据库 的步骤 209
10.2.2 部署数据库驱动程序 210
10.2.3 加载数据库驱动程序 210
10.2.4 创建数据库连接对象con 211
10.2.5 关闭con对象的自动提交模式 212
10.2.6 使用con对象准备预处理SQL 语句 212
10.2.7 初始化预处理SQL语句的 参数 212
10.2.8 执行预处理SQL语句 213
10.2.9 遍历结果集 213
10.2.10 结束事务 215
10.2.11 关闭资源 215
10.2.12 获取insert语句的自增型字段的值 215
10.2.13 异常总结和其他建议 216
10.2.14 小露身手:使用JDBC访问MySQL数据库 216
10.2.15 小露身手:设计工具类DBUtil 217
10.2.16 小露身手:个人笔记系统中事务的必要性 221
10.3 基于MVC的Java Web开发中的事务管理 222
10.3.1 多个DAO共用一个数据库连接对象的解决方案 222
10.3.2 使用过滤器管理数据库连接对象和事务 225
10.3.3 借助ThreadLocal工具类共享参数 225
10.3.4 小露身手:借助ThreadLocal工具类共享参数 226
10.3.5 小露身手:使用过滤器和ThreadLocal管理事务 227
实践任务 MySQL事务机制和JDBC的使用 232
第 11章 layui和CKEditor的使用 233
11.1 layui的使用 233
11.1.1 小露身手:快速上手layui 233
11.1.2 小露身手:layui中的页面元素 237
11.1.3 layui的栅格布局 241
11.1.4 小露身手:layui中常用的容器 242
11.1.5 小露身手:layui中常用的内置JavaScript模块 245
11.1.6 layui知识补充 247
11.1.7 小露身手:layui扩展知识 247
11.2 CKEditor 5的使用 252
11.2.1 经典模式编辑器的下载和安装 252
11.2.2 小露身手:CKEditor的基本使用 252
实践任务 layui和CKEditor的使用 255
第 12章 项目实训:个人笔记系统首页模块的设计与实现 256
12.1 个人笔记系统首页模块的设计与分析 256
12.1.1 个人笔记系统首页模块的视图层设计 256
12.1.2 个人笔记系统首页模块的逻辑分析 257
12.1.3 个人笔记系统首页模块的数据分析 258
12.2 个人笔记系统URL级别的权限访问控制的设计 259
12.3 个人笔记系统Java类的目录设置 260
12.4 个人笔记系统类名和方法名的命名规则 260
12.5 个人笔记系统静态资源文件的目录设置 260
实践任务 个人笔记系统首页模块的设计与实现 261
第 13章 项目实训:个人笔记系统用户管理模块的设计与实现 270
13.1 用户注册功能的实现 270
13.2 用户登录和注销功能的实现 271
实践任务1 用户注册功能的实现 272
实践任务2 用户登录和注销功能的实现 280
实践任务3 个人简介的维护 283
实践任务4 使用过滤器实现个人笔记系统URL级别的权限访问控制 287
第 14章 项目实训:个人笔记系统笔记管理模块的设计与实现 289
实践任务1 查询所有笔记功能的开发 289
实践任务2 后台管理面板author.jsp程序的开发 291
实践任务3 添加笔记页面和保存笔记功能的开发 291
实践任务4 查看笔记全文功能的开发 298
实践任务5 编辑笔记和更新笔记功能的开发 304
实践任务6 删除笔记功能的开发 308
实践任务7 对笔记的标题和内容进行模糊查询功能的开发 309
第 15章 项目实训:个人笔记系统其他功能模块的设计与实现 311
实践任务1 对笔记发表评论功能的开发 311
实践任务2 查看某个用户发表的评论功能的开发 313
实践任务3 笔记类别名称管理模块的开发 315
实践任务4 笔记标签名称管理模块的开发 318
实践任务5 向首页添加layui固定块 321
附录 322