第一篇 Web框架入门 2
第1章 运筹帷幄:Web框架的核心思想 2
1.1 MVC模式 2
1.1.1 MVC模式概述 2
1.1.2 MVC模式的结构 3
1.1.3 MVC模式的设计思想 4
1.1.4 MVC模式的处理过程 5
1.2 Model规范 5
1.2.1 Model 1规范 6
1.2.2 Model 2规范 6
1.3 使用MVC的优缺点 7
1.3.1 使用MVC模式的优点 7
1.3.2 使用MVC模式的不足 8
1.4 如何构建一个基于MVC的Web框架 8
1.4.1 Web框架的设计流程 9
1.4.2 View(视图)层的设计 9
1.4.3 Controller(控制)层的设计 10
1.4.4 Model(模型)层的设计 10
1.5 网络上的资源 11
1.6 小结 12
第2章 未雨绸缪:快速准备Web框架的开发环境 13
2.1 快速建立Java的开发环境 13
2.1.1 下载JDK 13
2.1.2 安装JDK 14
2.1.3 设定PATH与CLASSPATH 15
2.1.4 验证JDK是否安装成功 16
2.1.5 下载Eclipse 17
2.1.6 配置Eclipse 18
2.2 快速建立Web框架的运行环境 18
2.2.1 下载Tomcat 18
2.2.2 设定TOMCAT_HOME 19
2.2.3 下载Eclipse的Tomcat插件 19
2.2.4 为Eclipse配置Tomcat插件 20
2.2.5 验证为Eclipse配置Tomcat是否成功 21
2.2.6 在Eclipse中建立工程项目myApp 22
2.3 第一个使用JSP实现HelloWorld的例子 24
2.3.1 编写输出HelloWorld的JSP文件HelloWorld.jsp 25
2.3.2 运行JSP并查看输出结果 26
2.4 使用Servlet实现HelloWorld的例子 26
2.4.1 编写输出HelloWorld的Servlet文件HelloWorld.java 26
2.4.2 编写配置文件web.xml 27
2.4.3 运行Servlet并查看输出结果 27
2.5 小结 28
第3章 温故知新:快速掌握开发Web框架的基础知识 29
3.1 JSP快速入门 29
3.1.1 什么是JSP 29
3.1.2 JSP的设计目标 29
3.2 JSP的一些重点语法 30
3.2.1 基本语句 30
3.2.2 数据类型和变量命名 30
3.2.3 转义字符 30
3.2.4 注释 30
3.2.5 get和post的区别 32
3.2.6 include和<jsp:include/>的区别 32
3.2.7 forward和sendRedirect的区别 34
3.3 JSP的内置对象 34
3.3.1 request对象 35
3.3.2 response对象 36
3.3.3 pageContext对象 37
3.3.4 session对象 38
3.3.5 application对象 38
3.3.6 out对象 39
3.4 Servlet快速入门 39
3.4.1 什么是Servlet 39
3.4.2 Servlet的特点 40
3.4.3 Servlet的生命周期 40
3.4.4 Filter技术 41
3.4.5 web.xml详解 44
3.5 JavaScript快速入门 47
3.5.1 什么是JavaScript 47
3.5.2 JavaScript的特点 47
3.6 JavaScript的基本语法 48
3.6.1 数据类型和变量命名 48
3.6.2 运算符和表达式 49
3.6.3 控制语句 49
3.6.4 自定义函数 50
3.6.5 系统内部函数 51
3.6.6 注释 51
3.7 用JavaScript实现网页拖动示例 51
3.7.1 功能演示 52
3.7.2 实现原理 54
3.7.3 示例源代码 58
3.8 小结 63
第二篇 构建自己的Web框架 66
第4章 力学笃行:快速实现自己的Web框架 66
4.1 使用MVC Model 2规范实现Web框架的示意图 66
4.2 视图层设计 67
4.2.1 使用JSP 67
4.2.2 数据的提交和获取方式 67
4.2.3 定义几个通用的JavaScript函数 69
4.2.4 一个较为完整的JSP示例 69
4.3 控制层设计 72
4.3.1 使用Servlet 72
4.3.2 获取从视图层传来的值 72
4.3.3 处理请求到模型层 73
4.3.4 返回视图层 74
4.3.5 定义web.xml文件 74
4.3.6 一个完整的控制层示例GdServlet.java 75
4.4 模型层设计 77
4.4.1 实现一个公用的接口Action.java 77
4.4.2 所有的模型层类都实现这个接口 77
4.4.3 一个完整的模型层示例 79
4.5 通过实现HelloWorld示例来验证框架 81
4.5.1 编写实现输出的页面index.jsp 81
4.5.2 编写业务逻辑HelloWorldAction.java 83
4.5.3 配置web.xml文件 84
4.5.4 运行并验证示例 84
4.6 通过实现用户登录示例来验证框架 85
4.6.1 编写实现登录的页面login.jsp 85
4.6.2 编写登录成功的页面success.jsp 87
4.6.3 编写业务逻辑LoginAction.java 89
4.6.4 配置web.xml文件 90
4.6.5 运行并验证示例 90
4.6.6 修改LoginAction.java自定义返回的页面 92
4.6.7 重新验证示例 93
4.7 让新的Web框架支持sendRedirect 94
4.7.1 为什么要支持sendRedirect 94
4.7.2 修改控制器中返回视图层的设计 94
4.7.3 增加实现接口Action的类GdAction.java 95
4.7.4 设计默认的欢迎页面welcome.jsp 96
4.7.5 验证是否支持sendRedirect 97
4.8 使用MVC Model 2规范实现Web框架的完整代码 97
4.8.1 视图层代码 97
4.8.2 控制器代码 99
4.8.3 模型层代码 102
4.8.4 将自己的Web框架打包成jar 103
4.9 使用打包好的jar开发一个实现用户注册的示例 104
4.9.1 在Eclipse中建立Tomcat工程项目myMVC并配置开发环境 104
4.9.2 编写实现用户注册的页面regedit.jsp 107
4.9.3 编写注册成功的页面success.jsp 108
4.9.4 编写修改用户密码的页面updatePassword.jsp 110
4.9.5 编写业务逻辑RegeditAction.java 112
4.9.6 配置web.xml文件 115
4.9.7 运行并验证示例 115
4.10 小结 118
第5章 穿壁引光:将自己的Web框架与Struts进行对比 119
5.1 Struts概述 119
5.1.1 Struts介绍 119
5.1.2 Struts的主要功能和特点 119
5.1.3 Struts的工作原理 120
5.2 使用Struts的环境配置 120
5.2.1 Struts下载 120
5.2.2 Struts环境配置 120
5.3 一个在JSP页面输出“HelloWorld”的Struts示例 123
5.3.1 配置web.xml文件 123
5.3.2 编写实现输出的JSP页面index.jsp 124
5.3.3 编写控制器HelloWorldAction.java 125
5.3.4 配置Struts文档struts-config.xml 125
5.3.5 运行并验证示例 126
5.4 对两种实现“HelloWorld”的示例进行分析 126
5.4.1 Struts和自己的Web框架的相同点 126
5.4.2 Struts和自己的Web框架的不同点 127
5.5 Struts的实现方式 127
5.5.1 ActionServlet(控制器) 127
5.5.2 Action(适配器) 130
5.5.3 ActionMapping(映射) 131
5.5.4 ActionForm(数据存储) 135
5.5.5 DispatchAction(多动作控制器) 138
5.6 用Struts实现用户登录的示例 141
5.6.1 编写实现登录的页面login.jsp 141
5.6.2 编写登录成功的页面success.jsp 142
5.6.3 编写ActionForm为User.java 142
5.6.4 编写业务逻辑LoginAction.java 143
5.6.5 配置Struts文档struts-config.xml 144
5.6.6 配置web.xml文件 144
5.6.7 运行并验证示例 145
5.7 比较Struts和自己的Web框架 145
5.7.1 体系结构的比较 145
5.7.2 ActionServlet和GdServlet进行比较 146
5.7.3 Struts的Action和自己框架的Action进行比较 154
5.7.4 对于返回页面的映射方式进行比较 163
5.7.5 对于表单的提交方式进行比较 165
5.7.6 对于多动作的处理方式进行比较 168
5.7.7 Struts和自己的Web框架对比总结 174
5.8 小结 174
第6章 循序渐进:逐步改善自己的Web框架 175
6.1 要改善的内容 175
6.1.1 对返回页面的映射方式的改善 175
6.1.2 对表单提交方式的改善 176
6.1.3 对多动作处理方式的改善 177
6.2 改善自己Web框架的包结构 178
6.3 改善返回页面的映射方式 178
6.3.1 在自己的Web框架中增加配置文件 178
6.3.2 Dom4j简介 179
6.3.3 解析XML 181
6.3.4 将解析方法与控制器进行整合 187
6.4 用改善后的Web框架实现“HelloWorld”的示例 194
6.4.1 在工程项目myApp中进行开发 195
6.4.2 配置web.xml文件 195
6.4.3 编写实现输出的jsp页面indexNew.jsp 195
6.4.4 编写控制器HelloWorldAction.java 197
6.4.5 配置config-servlet.xml 198
6.4.6 运行并验证示例 198
6.5 改善值的传递方式 200
6.5.1 从页面中获取值的方式 200
6.5.2 实现存放页面中获取值的接口InfoIn AndOut.java 201
6.5.3 实现存放页面中获取值的实现类GdInfoInAndOut.java 203
6.5.4 把值返回到页面的方式 209
6.5.5 将值的传递方式与控制器进行整合 210
6.5.6 验证将值的传递方式与控制器整合后的框架 216
6.6 用改善后的Web框架实现一个用户登录的示例 221
6.6.1 在工程项目myApp中进行开发 221
6.6.2 配置web.xml文件 221
6.6.3 编写登录页面login.jsp 222
6.6.4 编写显示成功登录的页面success.jsp 224
6.6.5 编写存放用户登录信息的User.java 225
6.6.6 编写用户登录逻辑LoginAction.java 226
6.6.7 编写配置文件config-servlet.xml 227
6.6.8 运行并验证示例 228
6.7 改善多动作的处理方式 229
6.7.1 通过配置文件实现多动作映射 229
6.7.2 修改控制器实现Java反射机制 229
6.7.3 修改配置文件的获取方式 230
6.8 用改善后的Web框架实现一个用户注册的示例 236
6.8.1 在工程项目myApp中进行开发 236
6.8.2 编写实现用户注册的页面regedit.jsp 236
6.8.3 编写注册成功的页面success.jsp 238
6.8.4 编写修改用户密码的页面updatePassword.jsp 240
6.8.5 编写业务逻辑RegeditAction.java 242
6.8.6 编写存放用户登录信息的User.java 244
6.8.7 编写配置文件config-servlet.xml 245
6.8.8 配置web.xml文件 245
6.8.9 运行并验证示例 246
6.9 增加VO的数据验证功能 247
6.9.1 在VO中增加validate()方法 248
6.9.2 建立异常处理的体系结构 248
6.9.3 增加是否验证在配置文件中配置的功能 249
6.9.4 修改负责解析XML的GdParseXml.java 250
6.9.5 在GdInfoInAndOut.java中实现VO数据验证异常时的处理方式 250
6.9.6 与控制器进行整合 259
6.10 增加VO数据验证功能后用户注册的示例 259
6.10.1 修改业务逻辑RegeditAction.java 259
6.10.2 修改存放用户登录信息的User.java 262
6.10.3 修改配置文件config-servlet.xml为验证VO 263
6.10.4 运行并验证示例 263
6.10.5 修改配置文件config-servlet.xml为不验证VO 264
6.10.6 运行并验证示例 265
6.11 改善Action的功能 265
6.11.1 修改接口Action.java 265
6.11.2 修改Action的实现类GdAction.java 266
6.11.3 修改负责解析XML的GdParseXml.java 267
6.11.4 使控制器在执行对应方法前能进行初始化 273
6.11.5 在GdAction的doInit方法中实现VO验证 275
6.11.6 与控制器进行整合 277
6.12 改善Action功能后用户注册的示例 279
6.12.1 编写业务逻辑RegeditActionNew.java 280
6.12.2 修改配置文件使用改善后的RegeditActionNew.java 282
6.12.3 运行并验证示例 282
6.12.4 修改配置文件使用原来的RegeditAction.java 283
6.12.5 运行并验证示例 284
6.13 改善后的基于MVC Model 2规范Web框架的整体结构 284
6.13.1 Web框架的包结构 284
6.13.2 控制器代码 285
6.13.3 将自己的Web框架打包成jar 291
6.14 小结 292
第7章 庖丁解牛:Web框架的持久层封装 293
7.1 JDBC数据访问技术 293
7.1.1 JDBC技术概述 293
7.1.2 JDBC的包结构 294
7.1.3 JDBC驱动程序 294
7.2 JDBC的主要对象和接口 295
7.2.1 Connection(数据库连接)接口 295
7.2.2 JDBC URL(统一资源定位符)协议 295
7.2.3 DriverManager(驱动管理)类 296
7.2.4 Statement(数据声明)接口 297
7.2.5 ResultSet(数据结果集)接口 298
7.2.6 ResultSetMetaData(数据结果集元数据)类 299
7.2.7 数据源和JNDI(Java命名和目录服务接口) 300
7.3 简述事务处理 302
7.3.1 事务处理概述 302
7.3.2 对事务处理特性的描述 303
7.4 在自己的Web框架中增加持久层处理 304
7.4.1 编写数据库连接的接口 304
7.4.2 编写数据库连接的实现类 305
7.4.3 编写数据库结果集的接口 307
7.4.4 编写数据库结果集的实现类 312
7.4.5 修改负责解析XML的类GdParseXml 333
7.5 持久层的使用方法 342
7.5.1 通过XAMPP来建立MySQL数据库 342
7.5.2 获取数据的使用方法 345
7.5.3 更新数据的使用方法 365
7.5.4 使用DAO来处理数据提取和存储 375
7.6 实现分页查询 382
7.6.1 编写实现分页功能的类GdPageCachedRowSet 382
7.6.2 编写将查询结果在页面中显示的管理类GdPage 386
7.7 实现分页查询的示例 393
7.7.1 向数据库表中新增多笔数据 393
7.7.2 编写显示分页查询数据的页面page.jsp 394
7.7.3 编写配置文件config-servlet.xml 397
7.7.4 运行并验证示例 397
7.8 小结 398
第8章 熟能生巧:自己动手写数据库连接池 400
8.1 数据库连接池概述 400
8.1.1 为什么要使用数据库连接池 400
8.1.2 数据库连接池的基本原理 400
8.1.3 数据库连接池的实现分析 401
8.2 数据库连接池的具体实现 402
8.2.1 实现创建连接池的接口 402
8.2.2 实现连接池的创建类 403
8.2.3 实现连接池的管理类 406
8.2.4 改写控制器 409
8.2.5 改写获取连接的方式 409
8.2.6 用数据库连接池实现用户注册的示例 410
8.2.7 比较使用数据库连接池前后的效率 411
8.3 使用Proxool连接池 416
8.3.1 Proxool的下载 416
8.3.2 Proxool的配置 418
8.3.3 Proxool的使用方法 418
8.3.4 查看数据库的运行状态 423
8.4 使用DBCP连接池 425
8.4.1 DBCP的下载 426
8.4.2 DBCP的配置 427
8.4.3 DBCP的使用方法 427
8.4.4 通过Tomcat使用DBCP的两种方式 431
8.5 使用c3p0连接池 435
8.5.1 c3p0的下载 436
8.5.2 c3p0的配置 437
8.5.3 c3p0的使用方法 437
8.6 小结 441
第9章 尽善尽美:自己动手写过滤器 442
9.1 过滤器概述 442
9.1.1 过滤器简介 442
9.1.2 过滤器的实现方式 443
9.1.3 过滤器的配置 443
9.2 编写访问记录的过滤器 444
9.2.1 编写访问记录过滤器 444
9.2.2 配置web.xml 450
9.2.3 示例验证 452
9.3 编写记录执行时间的过滤器 452
9.3.1 编写记录执行时间过滤器 452
9.3.2 配置web.xml 453
9.3.3 示例验证 455
9.4 编写设定编码的过滤器 455
9.4.1 编写设定编码过滤器 455
9.4.2 配置web.xml 457
9.4.3 示例验证 459
9.5 将GdServlet改为过滤器实现 459
9.5.1 编写解析配置文件的过滤器 459
9.5.2 编写数值转换的过滤器 462
9.5.3 编写方法调用的过滤器 464
9.5.4 编写返回页面的过滤器 467
9.5.5 配置web.xml 472
9.5.6 示例验证 475
9.6 小结 475
第三篇 Web框架与其他工具整合应用第10章 集思广益:将Web框架与Hibernate整合 478
10.1 Hibernate概述 478
10.1.1 下载Hibernate 478
10.1.2 配置Hibernate 479
10.2 使用Hibernate自动生成代码的工具 479
10.2.1 使用MiddleGen从数据库定义文件生成映射文件 479
10.2.2 使用hbm2java从映射文件生成POJO 488
10.3 Web框架整合Hibernate实现用户注册的示例 491
10.3.1 整合Hibernate环境的配置 491
10.3.2 编写web.xml文件 491
10.3.3 编写用户注册页面regedit.jsp 494
10.3.4 编写用户注册成功页面success.jsp 495
10.3.5 建立数据库表结构 497
10.3.6 根据数据库表生成映射文件User.hbm.xml 497
10.3.7 根据映射文件生成POJO 498
10.3.8 编写接口UserDAOHibernate.java 499
10.3.9 编写实现类UserDAOHibernateImpl.java 500
10.3.10 编写配置文件config-servlet.xml 501
10.3.11 编写Hibernate的配置文件hibernate.cfg.xml 502
10.3.12 编写控制器RegeditActionHibernate.java 502
10.3.13 运行并验证用户注册示例 504
10.4 小结 505
第11章 画龙点睛:在Web框架中使用Log4j 506
11.1 Log4j介绍 506
11.1.1 Log4j简介 506
11.1.2 Log4j的结构 506
11.2 Log4j的下载和配置 507
11.2.1 下载Log4j 507
11.2.2 配置Log4j 507
11.3 Log4j的使用方法 507
11.3.1 获取Logger 507
11.3.2 指定日志输出位置 508
11.3.3 指定日志输出格式 508
11.3.4 指定日志输出优先级 509
11.3.5 一个完整的配置文件示例 509
11.4 在自己写的Web框架中使用Log4j 510
11.4.1 在Eclipse中配置Log4j 510
11.4.2 验证Log4j 510
11.5 小结 513
第四篇 Web框架实例 516
第12章 学以致用:用Web框架实现内容管理系统 516
12.1 内容管理系统的介绍 516
12.2 配置环境 516
12.2.1 Java与Eclipse环境配置 516
12.2.2 Tomcat与Eclipse环境配置 517
12.2.3 Ant与Eclipse环境配置 519
12.3 在Eclipse下建立项目myContent 519
12.3.1 在Eclipse下建立项目myContent 519
12.3.2 将本书中最新的Web框架打包 521
12.3.3 配置myContent项目 523
12.3.4 编写本项目的Ant build文件 526
12.3.5 配置本项目的web.xml文件 527
12.4 分析并设计内容管理系统 530
12.4.1 获取内容管理系统的需求 531
12.4.2 设计内容管理系统的用例图 531
12.4.3 设计内容管理系统的界面原型 532
12.4.4 设计内容管理系统的控制层 547
12.4.5 设计内容管理系统的业务逻辑层 548
12.4.6 设计内容管理系统的持久层 548
12.4.7 通过MySQL建立数据库表 551
12.5 编写内容管理系统的JSP页面 559
12.5.1 编写用户注册页面regedit.jsp 559
12.5.2 编写用户登录页面login.jsp 561
12.5.3 编写登录成功页面success.jsp 563
12.5.4 编写设定内容类别页面type.jsp 565
12.5.5 编写内容编辑发布页面edit.jsp 568
12.5.6 编写首页页面index.jsp 571
12.6 编写内容管理系统的控制器类 576
12.6.1 编写注册控制器RegeditAction.java 576
12.6.2 编写登录控制器LoginAction.java 577
12.6.3 编写设定内容类别控制器SetTypeAction.java 578
12.6.4 编写内容编辑发布控制器EditAction.java 581
12.6.5 编写首页浏览控制器IndexAction.java 584
12.7 编写内容管理系统的业务逻辑类 585
12.7.1 编写用户登录接口Login.java 585
12.7.2 编写用户注册接口Regedit.java 586
12.7.3 编写设定内容类别接口SetContentType.java 586
12.7.4 编写内容编辑发布接口EditContent.java 587
12.7.5 编写用户登录实现类LoginImpl.java 587
12.7.6 编写用户注册实现类RegeditImpl.java 589
12.7.7 编写设定内容类别实现类SetContentTypeImpl.java 590
12.7.8 编写内容编辑发布实现类EditContentImpl.java 593
12.8 编写内容管理系统的持久层类 597
12.8.1 用户类User.java 597
12.8.2 内容类别类ContentType.java 598
12.8.3 内容类Content.java 600
12.8.4 用户DAO接口UserDAO.java 602
12.8.5 内容类别DAO接口ContentTypeDAO.java 603
12.8.6 内容DAO接口ContentDAO.java 605
12.8.7 用户DAO实现类UserDAOImpl.java 606
12.8.8 内容类别DAO实现类ContentTypeDAOImpl.java 608
12.8.9 内容DAO实现类ContentDAOImpl.java 611
12.9 编写配置文件myContent.xml 614
12.10 运行验证程序 615
12.10.1 验证用户注册的功能 615
12.10.2 验证用户登录的功能 617
12.10.3 验证设定内容类别的功能 618
12.10.4 验证发布内容的功能 619
12.10.5 验证浏览首页的功能 622
12.11 小结 623