A. Tomcat与JavaWeb开发技术详解的目录
第1篇 Java Web开发技术详解
依据SUN的Java Servlet规范和JSP规范,深入介绍了开发Java Web应用的各种技术。
第1章 Web运作原理探析 3
利用Java套接字(Socket)实现了一个简单的基于HTTP协议的客户程序和服务器程序。
1.1 Web的概念 3
1.2 HTML简介 4
1.3 URL简介 7
1.4 HTTP协议简介 7
1.4.1 HTTP请求格式 9
1.4.2 HTTP响应格式 11
1.4.3 正文部分的MIME类型 13
1.5 用Java套接字创建HTTP客户与服务器程序 14
1.5.1 演示异构系统之间用HTTP协议通信 17
1.5.2 演示对网页中的超级链接的处理过程 19
1.5.3 演示对网页中的图片的处理过程 20
1.6 Web发展历程 21
1.6.1 发布静态HTML文档 21
1.6.2 发布静态多媒体信息 22
1.6.3 提供浏览器端与用户的动态交互功能 22
1.6.4 提供服务器端与用户的动态交互功能 24
1.6.5 发布Web应用 29
1.6.6 发布Web服务 30
1.6.7 Web 2.0:全民共建的Web 32
1.7 处理HTTP请求参数及HTML表单 33
1.8 客户端向服务器端上传文件 36
1.9 小结 41
1.10 思考题 42
第2章 Tomcat简介 45
Tomcat除了能够充当运行Servlet的容器,还提供了作为Web服务器的一些实用功能,如Tomcat管理和控制平台、安全域管理和Tomcat阀等。Tomcat已成为目前开发企业JavaWeb应用的最佳Servlet容器选择之一。
2.1 Tomcat概述 46
2.2 Tomcat作为Servlet容器的基本功能 47
2.3 Tomcat的组成结构 48
2.4 Tomcat的工作模式 50
2.5 Tomcat的版本 52
2.6 安装和配置Tomcat所需的资源 53
2.7 安装Tomcat 55
2.8 启动Tomcat并测试Tomcat的安装 57
2.9 Tomcat的运行脚本 58
2.10 小结 59
2.11 思考题 60
第3章 第一个JavaWeb应用 63
以一个简单的helloapp应用为例,让初学者迅速获得开发JavaWeb应用的实际经验。
3.1 JavaWeb应用简介 63
3.2 创建JavaWeb应用 64
3.2.1 JavaWeb应用的目录结构 64
3.2.2 创建HTML文件 65
3.2.3 创建Servlet类 66
3.2.4 创建JSP文件 67
3.2.5 创建web.xml文件 68
3.3 在Tomcat中发布JavaWeb应用 70
3.3.1 Tomcat的目录结构 70
3.3.2 按照默认方式发布JavaWeb应用 71
3.3.3 Web组件的URL 72
3.3.4 配置Tomcat的元素 75
3.3.5 配置Tomcat的虚拟主机 78
3.4 创建、配置和使用自定义JSP标签 80
3.5 用批处理文件或ANT编译范例 84
3.6 小结 85
3.7 思考题 86
第4章 Servlet技术(上) 89
要想精通Servlet编程,不仅要了解Servlet自身的用法,还要了解容器为它提供的十八般武器的用法。
4.1 Servlet API 90
4.1.1 Servlet接口 90
4.1.2 GenericServlet抽象类 91
4.1.3 HttpServlet抽象类 93
4.1.4 ServletRequest接口 96
4.1.5 HttpServletRequest接口 97
4.1.6 ServletResponse接口 100
4.1.7 HttpServletResponse接口 101
4.1.8 ServletConfig接口 104
4.1.9 ServletContext接口 105
4.2 JavaWeb应用的生命周期 108
4.2.1 启动阶段 108
4.2.2 运行时阶段 109
4.2.3 终止阶段 109
4.2.4 用Tomcat的管理平台管理Web应用的生命周期 109
4.3 Servlet的生命周期 111
4.3.1 初始化阶段 111
4.3.2 运行时阶段 112
4.3.3 销毁阶段 112
4.3.4 演示Servlet的生命周期的范例 113
4.4 ServletContext与Web应用范围 115
4.4.1 在Web应用范围内存放共享数据的范例 116
4.4.2 使用ServletContextListener监听器 119
4.5 Servlet的服务方法抛出异常 121
4.6 防止页面被客户端缓存 122
4.7 小结 123
4.8 思考题 124
第5章 Servlet技术(下) 129
进一步介绍Servlet的一些高级用法。
5.1 下载文件 129
5.2 上传文件 130
5.3 动态生成图像 136
5.4 读写Cookie 139
5.5 访问Web应用的工作目录 145
5.6 转发和包含 147
5.6.1 请求转发 148
5.6.2 包含 152
5.6.3 请求范围 154
5.7 重定向 155
5.8 访问Servlet容器内的其他Web应用 158
5.9 避免并发问题 160
5.9.1 合理决定在Servlet中定义的变量的作用域类型 162
5.9.2 使用Java同步机制对多线程同步 164
5.9.3 被废弃的SingleThreadModel接口 165
5.10 小结 166
5.11 思考题 169
第6章 JSP技术 171
包括JSP的运行机制和语法、JSP包含其他Web组件的方法、把请求转发给其他Web组件的方法,以及JSP的异常处理。
6.1 比较HTML、Servlet和JSP 171
6.1.1 静态HTML文件 171
6.1.2 用Servlet动态生成HTML页面 171
6.1.3 用JSP动态生成HTML页面 173
6.2 JSP语法 177
6.2.1 JSP指令(Directive) 178
6.2.2 JSP声明 180
6.2.3 Java程序片段(Scriptlet) 181
6.2.4 Java表达式 182
6.2.5 隐含对象 184
6.3 JSP的生命周期 185
6.4 请求转发 188
6.5 包含 190
6.5.1 静态包含 190
6.5.2 动态包含 192
6.5.3 混合使用静态包含和动态包含 194
6.6 JSP异常处理 200
6.7 再谈发布JSP 202
6.8 预编译JSP 203
6.9 PageContext抽象类 204
6.10 JSP技术的发展趋势 206
6.11 小结 207
6.12 思考题 207
第7章 bookstore应用简介 211
介绍bookstore应用的软件结构、各个JSP网页的功能,以及部分Web组件的实现。
7.1 bookstore应用的软件结构 211
7.1.1 Web服务器层 211
7.1.2 数据库层 212
7.2 浏览bookstore应用的JSP网页 212
7.3 JavaBean和实用类 217
7.3.1 实体类 218
7.3.2 购物车的实现 219
7.4 发布bookstore应用 222
7.5 小结 223
第8章 访问数据库 225
介绍通过JDBC API访问数据库、在Tomcat中配置数据源,以及在Web应用中通过数据源连接数据库的方法。
8.1 安装和配置MySQL数据库 225
8.2 JDBC简介 228
8.2.1 java.sql包中的接口和类 230
8.2.2 编写访问数据库程序的步骤 234
8.2.3 事务处理 236
8.3 通过JDBC API访问数据库的JSP范例程序 237
8.4 bookstore应用通过JDBC API访问数据库 239
8.5 数据源(DataSource)简介 243
8.6 配置数据源 244
8.6.1 在context.xml中加入元素 244
8.6.2 在web.xml中加入元素 245
8.7 程序中访问数据源 246
8.7.1 通过数据源连接数据库的JSP范例程序 246
8.7.2 bookstore应用通过数据源连接数据库 248
8.8 处理中文编码 251
8.9 分页显示批量数据 252
8.10 小结 256
8.11 思考题 257
第9章 HTTP会话的使用与管理 259
介绍如何通过会话来实现服务器对客户的状态的跟踪。
9.1 会话简介 259
9.2 HttpSession的生命周期及会话范围 263
9.3 使用会话的JSP范例程序 265
9.4 使用会话的Servlet范例程序 269
9.5 通过重写URL来跟踪会话 273
9.6 会话的持久化 277
9.6.1 标准会话管理器StandardManager 279
9.6.2 持久化会话管理器PersistentManager 280
9.7 会话的监听 284
9.7.1 用HttpSessionListener统计在线用户人数 289
9.7.2 用HttpSessionBindingListener统计在线用户人数 291
9.8 小结 294
9.9 思考题 295
第10章 JSP访问JavaBean 299
介绍JavaBean的概念和创建方法, JSP访问JavaBean的语法,JavaBean在Web应用中的4种存在范围,如何在bookstore应用中运用JavaBean。
10.1 JavaBean简介 299
10.2 JSP访问JavaBean的语法 300
10.3 JavaBean的范围 302
10.3.1 JavaBean在页面(page)范围内 302
10.3.2 JavaBean在请求(request)范围内 305
10.3.3 JavaBean在会话(session)范围内 306
10.3.4 JavaBean在Web应用(application)范围内 307
10.4 在bookstore应用中访问JavaBean 308
10.4.1 访问BookDB类 308
10.4.2 访问ShoppingCart类 309
10.5 小结 313
10.6 思考题 314
第11章 开发JavaMail Web应用 317
介绍了一个JavaMail Web应用,通过它,客户可以访问邮件服务器上的邮件账号、收发邮件和管理邮件夹。
11.1 E-mail协议简介 317
11.1.1 SMTP简单邮件传输协议 317
11.1.2 POP3邮局协议 318
11.1.3 接收邮件的新协议IMAP 318
11.2 JavaMail API简介 319
11.3 建立JavaMail应用程序的开发环境 321
11.3.1 获得JavaMail API的类库 321
11.3.2 安装和配置邮件服务器 321
11.4 创建JavaMail应用程序 324
11.5 JavaMail Web应用简介 328
11.6 JavaMail Web应用的程序结构 328
11.6.1 重新封装Message数据 329
11.6.2 用于保存邮件账号信息的JavaBean 332
11.6.3 定义所有JSP文件的相同内容 334
11.6.4 登录IMAP服务器上的邮件账号 336
11.6.5 管理邮件夹 339
11.6.6 查看邮件夹中的邮件信息 342
11.6.7 查看邮件内容 345
11.6.8 创建和发送邮件 346
11.6.9 退出邮件系统 348
11.7 在Tomcat中配置邮件会话(Mail Session) 349
11.7.1 在context.xml中配置Mail Session资源 349
11.7.2 在web.xml中加入对JNDI Mail Session资源的引用 350
11.7.3 在javamail应用中获取JNDI Mail Session资源 350
11.8 发布和运行javamail应用 352
11.9 小结 352
11.10 思考题 353
第12章 EL表达式语言 355
EL(Expression Language)表达式语言是在JSP 2.0版本中引入的新特性,它用于JSP文件中的数据访问。
12.1 基本语法 355
12.1.1 访问对象的属性及数组的元素 356
12.1.2 EL运算符 356
12.1.3 隐含对象 357
12.1.4 命名变量 359
12.2 使用EL表达式的JSP范例 360
12.2.1 关于基本语法的例子 360
12.2.2 读取HTML表单数据的例子 362
12.2.3 访问命名变量的例子 363
12.3 定义和使用EL函数 363
12.4 小结 366
12.5 思考题 367
第13章 自定义JSP标签 369
结合具体的范例,进一步介绍自定义标签的创建过程,以及它在JSP文件中的使用方法。
13.1 自定义JSP标签简介 369
13.2 JSP Tag API 370
13.2.1 JspTag接口 370
13.2.2 Tag接口 371
13.2.3 IterationTag接口 373
13.2.4 BodyTag接口 374
13.2.5 TagSupport类和BodyTagSupport类 376
13.3 创建和使用message标签(访问标签属性) 380
13.3.1 创建message标签的处理类MessageTag 382
13.3.2 创建标签库描述文件 385
13.3.3 在Web应用中使用标签 388
13.3.4 发布支持中、英文版本的helloapp应用 390
13.4 创建和使用iterate标签(重复执行标签主体) 391
13.5 创建和使用greet标签(访问标签主体内容) 395
13.6 小结 399
13.7 思考题 400
第14章 采用模板设计网上书店应用 403
以bookstore应用为例,介绍如何通过自定义JSP标签来为网站设计模板,从而使所有在客户端展示的网页都通过模板来生成。
14.1 如何设计网站的模板 403
14.2 创建负责流程控制的Servlet 404
14.3 创建模板标签和模板JSP文件 406
14.3.1 标签和其处理类 408
14.3.2 标签和处理类 411
14.3.3 标签和处理类 413
14.3.4 标签和处理类 417
14.4 修改JSP文件 419
14.5 发布采用模板设计的bookstore应用 420
14.6 小结 423
第15章 JSTL Core标签库 425
本章对JSTL做了概要介绍,并且着重介绍了JSTL中的Core标签库的用法。
15.1 使用第三方提供的标签库的步骤 425
15.2 JSTL标签库简介 426
15.3 一般用途的标签 427
15.3.1 标签 427
15.3.2 标签 428
15.3.3 标签 430
15.3.4 标签 430
15.4 条件标签 431
15.4.1 标签 431
15.4.2 、和标签 432
15.5 迭代标签 433
15.5.1 标签 433
15.5.2 标签 437
15.6 URL相关的标签 437
15.6.1 标签 437
15.6.2 标签 438
15.6.3 标签 440
15.7 小结 440
15.8 思考题 441
第16章 JSTL I18N标签库 443
I18N标签库主要用于编写国际化的Web应用,本章对I18N标签库进行了详细介绍。
16.1 国际化的概念 443
16.2 Java对I18N的支持 444
16.2.1 Locale类 444
16.2.2 ResourceBundle类 448
16.2.3 MessageFormat类和复合消息 449
16.3 国际化标签 452
16.3.1 标签 452
16.3.2 标签 453
16.3.3 标签 453
16.3.4 标签 454
16.3.5 标签 455
16.3.6 标签 455
16.4 创建国际化的Web应用 456
16.4.1 创建支持国际化的网页 456
16.4.2 创建资源文件 459
16.5 格式化标签 460
16.5.1 标签 460
16.5.2 标签 461
16.5.3 标签 461
16.5.4 标签 462
16.5.5 标签 463
16.5.6 标签 465
16.6 小结 465
16.7 思考题 466
第17章 JSTL SQL标签库 469
在JSP中直接通过Java程序代码来访问数据库,会降低JSP页面的可读性和可维护性,为了解决这一问题,可以在JSP中通过JSTL SQL标签库中的标签来访问数据库。
17.1 标签 469
17.2 标签 470
17.2.1 设置数据源 470
17.2.2 设置select查询语句 470
17.2.3 控制实际取出的记录 471
17.2.4 访问查询结果 471
17.2.5 使用标签的范例 472
17.3 标签 474
17.4 标签 475
17.5 标签 475
17.6 标签 476
17.7 小结 478
17.8 思考题 478
第18章 JSTL Functions标签库 481
介绍Functions标签库中常用的16个函数的用法。
18.1 fn:contains函数 481
18.2 fn:containsIgnoreCase函数 481
18.3 fn:startsWith函数 482
18.4 fn:endsWith函数 482
18.5 fn:indexOf函数 482
18.6 fn:replace函数 483
18.7 fn:substring函数 483
18.8 fn:substringBefore函数 483
18.9 fn:substringAfter函数 484
18.10 fn:split函数 484
18.11 fn:join函数 485
18.12 fn:toLowerCase函数 485
18.13 fn:toUpperCase函数 485
18.14 fn:trim函数 486
18.15 fn:escapeXml函数 486
18.16 fn:length函数 487
18.17 小结 488
18.18 思考题 489
第19章 简单标签和标签文件 491
为了简化开发标签的过程,JSP 2.0引入了一种新的标签扩展机制,称为“简单标签扩展”。
19.1 实现SimpleTag接口 491
19.1.1 创建和使用简单标签 493
19.1.2 创建和使用带属性和标签主体的简单标签 494
19.1.3 创建和使用带动态属性的简单标签 495
19.2 使用标签文件 497
19.2.1 标签文件的隐含对象 500
19.2.2 标签文件的指令 501
19.2.3 标签文件的和动作元素 503
19.2.4 创建和使用带属性和标签主体的display标签文件 503
19.2.5 创建和使用带属性和标签主体的welcome标签文件 505
19.2.6 创建和使用带变量的precode标签文件 506
19.3 小结 507
19.4 思考题 507
第20章 过滤器 509
如果在多个Web组件中编写完成同样操作的程序代码,显然会导致重复编码,从而降低开发效率和软件的可维护性,为了解决上述问题,过滤器应运而生。
20.1 过滤器简介 509
20.2 创建过滤器 510
20.3 发布过滤器 513
20.4 串联过滤器 518
20.4.1 包装设计模式简介 519
20.4.2 ServletOutputStream的包装类 521
20.4.3 HttpServletResponse的包装类 524
20.4.4 创建对响应结果进行字符串替换的过滤器 525
20.4.5 ReplaceTextFilter过滤器工作的UML时序图 527
20.4.6 发布和运行包含ReplaceTextFilter过滤器的Web应用 528
20.5 小结 531
20.6 思考题 532
第21章 在Web应用中访问EJB组件 535
首先介绍JavaEE的体系结构;然后以bookstore应用为例,介绍开发EJB组件的过程;最后讲解如何在JBoss服务器上发布JavaEE应用。
21.1 JavaEE体系结构简介 535
21.2 安装和配置JBoss服务器 537
21.3 创建EJB组件 538
21.3.1 编写Remote接口 539
21.3.2 编写Home接口 539
21.3.3 编写Enterprise Java Bean
类 540
21.4 在Web应用中访问EJB组件 543
21.5 发布JavaEE应用 544
21.5.1 在JBoss上发布EJB组件 545
21.5.2 在JBoss上发布Web应用 547
21.5.3 在JBoss上发布JavaEE应用 549
21.6 小结 550
21.7 思考题 551
第22章 在Web应用中访问Web服务 553
介绍利用AXIS来创建SOAP服务和SOAP客户程序的方法,还介绍了在bookstore应用中访问SOAP服务的方法。
22.1 SOAP简介 553
22.2 建立Apache AXIS环境 555
22.3 在Tomcat上发布
Apache-AXIS Web应用 556
22.4 创建SOAP服务 557
22.4.1 创建提供SOAP服务的Java类 557
22.4.2 创建SOAP服务的发布描述符文件 557
22.5 管理SOAP服务 558
22.5.1 发布SOAP服务 558
22.5.2 删除SOAP服务 559
22.6 创建和运行SOAP客户程序 560
22.7 发布JWS服务 563
22.8 在bookstore应用中访问SOAP服务 563
22.8.1 创建BookDB服务类及
BookDBDelegate代理类 564
22.8.2 发布bookdbservice服务和bookstore应用 573
22.9 小结 574
22.10 思考题 575
第23章 Web应用的MVC设计模式 577
首先介绍了MVC设计模式的结构和优点;接着介绍了SUN公司提出的在Java Web开发领域的两种设计模式:JSP Model1和JSP Molde2;然后介绍了Struts实现MVC的机制;最后以helloapp应用为例,简要介绍了在Web应用中使用Struts 2.0的方法。
23.1 MVC设计模式简介 577
23.2 JSP Model 1和
JSP Model 2 579
23.3 Struts概述 581
23.3.1 Struts实现MVC的机制 581
23.3.2 Struts的工作流程 582
23.4 创建采用Struts的Web应用 583
23.4.1 建立Struts的环境 583
23.4.2 创建视图 584
23.4.3 创建模型 585
23.4.4 创建Action类 585
23.4.5 创建web.xml文件和struts.xml文件 586
23.5 运行helloapp应用 587
23.5.1 服务器端装载login.htm的流程 587
23.5.2 用户验证的流程 587
23.6 小结 589
23.7 思考题 589
第2篇 Tomcat配置及第三方实用软件的用法
介绍Tomcat服务器的基本配置和高级配置,从而为Java Web应用创建高效的运行环境;介绍在Java Web应用中运用第三方提供的实用软件(如Velocity和Log4J)的方法。
第24章 Tomcat的控制平台和管理平台 593
Tomcat提供了基于Web方式的管理平台和控制平台,用户通过浏览器,就可以很方便地配置Tomcat服务器,还可以管理运行在Tomcat服务器上的Web应用,如发布、启动、停止或删除Web应用,以及查看Web应用状态。
24.1 访问Tomcat的控制平台和管理平台 593
24.2 Tomcat的控制平台 595
24.2.1 Tomcat控制平台的功能 595
24.2.2 配置元素 597
24.3 Tomcat的管理平台 598
24.4 小结 600
第25章 安全域 601
主要介绍如何通过Tomcat提供的安全域来保护Web应用的资源。
25.1 安全域概述 601
25.2 为Web资源设置安全约束 602
25.2.1 在web.xml中加入元素 603
25.2.2 在web.xml中加入元素 605
25.2.3 在web.xml中加入元素 608
25.3 内存域 608
25.4 JDBC域 610
25.4.1 用户数据库的结构 610
25.4.2 在MySQL中创建和配置用户数据库 611
25.4.3 配置元素 611
25.5 DataSource域 612
25.6 在Web应用中访问用户信息 614
25.7 小结 614
25.8 思考题 615
第26章 Tomcat与其他HTTP 服务器集成 617
首先讨论Tomcat与HTTP服务器集成的一般原理,然后介绍Tomcat与Apache服务器及IIS集成的详细步骤,最后介绍把由多个Tomcat服务器构成的集群系统与Apache服务器集成的方法。
26.1 Tomcat与HTTP服务器集成的原理 617
26.1.1 JK插件 618
26.1.2 AJP协议 618
26.2 在Windows下Tomcat与
Apache服务器集成 618
26.3 在Linux下Tomcat与Apache
服务器集成 621
26.4 Tomcat与IIS服务器集成 623
26.4.1 准备相关文件 624
26.4.2 编辑注册表 624
26.4.3 在IIS中加入“jakarta”虚拟目录 626
26.4.4 把JK插件作为ISAPI筛选器加入到IIS中 627
26.4.5 测试配置 628
26.5 Tomcat集群 628
26.5.1 配置集群系统的负载平衡器 629
26.5.2 配置集群管理器 631
26.6 小结 635
26.7 思考题 636
第27章 在Tomcat中配置SSI 637
首先介绍了SSI的概念及SSI指令的用法,然后介绍了在Tomcat中配置SSI的方法。
27.1 SSI简介 637
27.1.1 #echo指令 638
27.1.2 #include指令 640
27.1.3 #flastmod指令 641
27.1.4 #fsize指令 641
27.1.5 #exec指令 641
27.1.6 #config指令 641
27.1.7 #if、#elif、#else和#endif指令 643
27.2 在Tomcat中配置对SSI的支持 643
27.3 小结 645
27.4 思考题 645
第28章 Tomcat阀 647
介绍Tomcat阀的种类,还将详细介绍各种Tomcat阀的功能和使用方法。
28.1 Tomcat阀简介 647
28.2 客户访问日志阀 648
28.3 远程地址过滤器 650
28.4 远程主机过滤器 651
28.5 客户请求记录器 652
28.6 小结 653
28.7 思考题 653
第29章 在Tomcat中配置SSL 655
SSL(Server Socket Layer)协议,旨在达到在开放网络(Internet)上安全、保密地传输信息的目的,这种协议在Web上获得了广泛的应用。
29.1 SSL简介 655
29.1.1 加密通信 656
29.1.2 安全证书 656
29.1.3 SSL握手 657
29.2 在Tomcat中使用SSL 658
29.2.1 准备安全证书 658
29.2.2 配置SSL连接器 659
29.2.3 访问支持SSL的Web站点 660
29.3 小结 661
29.4 思考题 662
第30章 用ANT工具管理Web应用 663
介绍了ANT的安装和配置,并以bookstore应用为例,介绍了ANT的使用方法。
30.1 安装配置ANT 663
30.2 创建build.xml文件 663
30.3 运行ANT 668
30.4 小结 669
30.5 思考题 669
第31章 使用Log4J进行日志操作 671
首先介绍Log4J的组成,接着介绍如何在程序中使用Log4J,最后介绍如何在Web应用中通过Log4J生成日志。
31.1 Log4J简介 671
31.1.1 Logger组件 672
31.1.2 Appender组件 673
31.1.3 Layout组件 673
31.1.4 Logger组件的继承性 674
31.2 Log4J的基本使用方法 675
31.2.1 定义配置文件 675
31.2.2 在程序中使用Log4J 677
31.3 在helloapp应用中使用Log4J 680
31.3.1 创建用于配置Log4J环境的Servlet 680
31.3.2 在login.jsp中输出日志 681
31.3.3 发布和运行使用Log4J的helloapp应用 681
31.4 小结 683
31.5 思考题 683
第32章 Velocity模板语言 685
首先通过一个简单的Velocity例子来讲解创建基于Velocity的Web应用的步骤,然后详细介绍Velocity模板语言的各个要素。
32.1 安装Velocity 685
32.2 Velocity的简单例子 685
32.2.1 创建Velocity模板 685
32.2.2 创建扩展VelocityServlet的Servlet类 686
32.2.3 发布和运行基于Velocity的Web应用 688
32.3 注释 689
32.4 引用 689
32.4.1 变量引用 689
32.4.2 属性引用 690
32.4.3 方法引用 692
32.4.4 正式引用符 693
32.4.5 安静引用符 693
32.4.6 转义符 694
32.4.7 大小写替换 694
32.5 指令 695
32.5.1 #set指令 695
32.5.2 字面字符串 696
32.5.3 #if指令 697
32.5.4 比较运算 697
32.5.5 #foreach循环指令 698
32.5.6 #include指令 700
32.5.7 #parse指令 700
32.5.8 #macro指令 701
32.5.9 转义VTL指令 702
32.5.10 VTL的格式 702
32.6 其他特征 703
32.6.1 数学运算 703
32.6.2 范围操作符 703
32.6.3 字符串的连接 704
32.7 小结 705
32.8 思考题 705
第33章 创建嵌入式Tomcat服务器 707
介绍如何把Tomcat嵌入到Java应用程序中,以及在程序中配置Tomcat的组件,并控制Tomcat服务器的启动和关闭。
33.1 将Tomcat嵌入到Java应用中 707
33.2 创建嵌入了Tomcat的
Java示范程序 708
33.3 运行嵌入式Tomcat
服务器 711
33.4 小结 713
附录A server.xml文件 715
对server.xml文件的一些常用的元素进行了介绍。
A.1 配置Server元素 716
A.2 配置Service元素 717
A.3 配置Engine元素 717
A.4 配置Host元素 718
A.5 配置Context元素 718
A.6 配置Connector元素 719
附录B web.xml文件 721
介绍了Web应用的配置文件web.xml文件。
B.1 配置过滤器 723
B.2 配置Servlet 724
B.3 配置Servlet映射 725
B.4 配置Session 725
B.5 配置Welcome文件清单 725
B.6 配置Tag Library 726
B.7 配置资源引用 726
B.8 配置安全约束 727
B.9 配置安全验证登录界面 727
B.10 配置对安全验证角色的引用 728
附录C XML简介 729
XML,即可扩展标记语言(Extensible Markup Language),是一种可以用来创建自定义标记的标记语言。
C.1 SGML、HTML 与XML的比较 729
C.2 DTD文档类型定义 730
C.3 有效XML文档以及简化格式的XML文档 731
C.4 XML中的常用术语 732
C.4.1 URL、URN和URI 733
C.4.2 XML命名空间 733
附录D 书中涉及软件获取途径 735
为了便于读者在本地机器上搭建运行范例的环境,列出了书中涉及的软件的获取途径。
……
B. 求一个购物车项目设计源代码
using System;using System.Data;using System.Configuration;using System.Collections;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System.Collections;public partial class AddCar : System.Web.UI.Page{ DataAccess db = new DataAccess(); protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { string id = Request.QueryString["id"].ToString(); if (Session["car"] != null) { Hashtable hash = Session["car"] as Hashtable; if (!hash.ContainsKey(id)) { hash.Add(id, 1); } else { hash[id] = int.Parse(hash[id].ToString()) + 1; } Session["car"] = hash; } else { Hashtable hash = new Hashtable(); hash.Add(id, 1); Session["car"] = hash; } Hashtable k = Session["car"] as Hashtable; DataColumn dc0 = new DataColumn("id", typeof(string)); DataColumn dc1 = new DataColumn("商品名", typeof(string)); DataColumn dc2 = new DataColumn("价格", typeof(float)); DataColumn dc3 = new DataColumn("数量", typeof(int)); DataColumn dc4 = new DataColumn("总价格", typeof(float)); DataTable dt = new DataTable(); dt.Columns.Add(dc0); dt.Columns.Add(dc1); dt.Columns.Add(dc2); dt.Columns.Add(dc3); dt.Columns.Add(dc4); foreach (DictionaryEntry i in k) { //Response.Write(i.Key+" "+i.Value+"<br>"); DataRow dr = dt.NewRow(); DataSet ds = db.QueryDataSet("select * from proct where p_id=" + i.Key); dr["id"] = ds.Tables[0].Rows[0]["p_id"].ToString(); dr["商品名"] = ds.Tables[0].Rows[0]["p_name"].ToString(); dr["价格"] = ds.Tables[0].Rows[0]["p_price"].ToString(); dr["数量"] = int.Parse(k[i.Key].ToString()); dr["总价格"] = int.Parse(k[i.Key].ToString()) * double.Parse(ds.Tables[0].Rows[0]["p_price"].ToString()); dt.Rows.Add(dr); } GridView1.DataSource = dt; GridView1.DataBind(); } } protected void Button1_Click(object sender, EventArgs e) { Response.Redirect("default2.aspx"); } protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) { string id = GridView1.DataKeys[e.RowIndex].Value.ToString(); Hashtable k = Session["car"] as Hashtable; Session["car"] = k; k.Remove(id); DataColumn dc0 = new DataColumn("id", typeof(string)); DataColumn dc1 = new DataColumn("商品名", typeof(string)); DataColumn dc2 = new DataColumn("价格", typeof(float)); DataColumn dc3 = new DataColumn("数量", typeof(int)); DataColumn dc4 = new DataColumn("总价格", typeof(float)); DataTable dt = new DataTable(); dt.Columns.Add(dc0); dt.Columns.Add(dc1); dt.Columns.Add(dc2); dt.Columns.Add(dc3); dt.Columns.Add(dc4); foreach (DictionaryEntry i in k) { //Response.Write(i.Key+" "+i.Value+"<br>"); DataRow dr = dt.NewRow(); DataSet ds = db.QueryDataSet("select * from proct where p_id=" + i.Key); dr["id"] = ds.Tables[0].Rows[0]["p_id"].ToString(); dr["商品名"] = ds.Tables[0].Rows[0]["p_name"].ToString(); dr["价格"] = ds.Tables[0].Rows[0]["p_price"].ToString(); dr["数量"] = int.Parse(k[i.Key].ToString()); dr["总价格"] = int.Parse(k[i.Key].ToString()) * double.Parse(ds.Tables[0].Rows[0]["p_price"].ToString()); dt.Rows.Add(dr); } GridView1.DataSource = dt; GridView1.DataBind(); } protected void Button2_Click(object sender, EventArgs e) { Hashtable k = Session["car"] as Hashtable; string code = DateTime.Now.Ticks.ToString() + new Random().Next(); db.ExecuteNonQuery("insert into OrderList values('"+code+"')"); foreach(DictionaryEntry i in k) { db.ExecuteNonQuery("insert into DetailsList values('"+code+"',"+Session["u_id"].ToString()+","+i.Key+","+i.Value+")"); } }}自己慢慢领悟把%D%A
C. 怎样理解MVC三层架构
‘一个良好的JSP页面不能出现“<%……%>”’
并不是这样的,只是能不过多的出现而已。这是不同专的。
JSP中,“<%…属…%>”里面的java代码是可以有一些业务逻辑的,而三层架构正是要将业务逻辑从页面中分离出来,因些不要过多的使用“<%……%>”,但根据实际情况,适量的添加一些是可以的。
而MVC呢,实际上其实是一种架构模式,而不应该归入设计模式了,设计模式是在代码层面上说的:你的类都是什么样子的。
MVC,是架构层面是的:你的项目框架是怎么设计的。
D. 模型-视图-控制器模式就是把业务逻辑从什么中抽取出来,放在模型中.
m代表model模型v代表view视图c代表controller控制器m包含写业务逻辑取数据模型v代表显示视图c控制mv间关系mvc运行原理基本没同mvc框架实现技术吧接我给考段网别看;
模型-视图-控制器(MVC)Xerox PARC八十代编程语言Smalltalk-80发明种软件设计模式至今已广泛使用近几推荐Sun公司J2EE平台设计模式并且受越越使用 ColdFusion PHP 发者欢迎模型-视图-控制器模式用工具箱处些缺点
MVC何工作
MVC设计模式强制性使应用程序输入、处理输使用MVC应用程序三核部件:模型、视图、控制器各自处理自任务
视图
视图用户看并与交互界面式Web应用程序说视图由HTML元素组界面新式Web应用程序HTML依旧视图扮演着重要角色些新技术已层穷包括Macromedia Flash象XHTMLXML/XSLWML等些标识语言Web services.
何处理应用程序界面变越越挑战性MVC处能应用程序处理同视图视图其实没真处理发管些数据联机存储雇员列表作视图讲作种输数据并允许用户操纵式
模型
模型表示企业数据业务规则MVC三部件模型拥处理任务例能用象EJBsColdFusion Components构件象处理数据库模型返数据立说模型与数据格式关模型能视图提供数据由于应用于模型代码需写视图重用所减少代码重复性
控制器
控制器接受用户输入并调用模型视图完用户需求所单击Web页面超链接发送HTML表单控制器本身输任何东西做任何处理接收请求并决定调用哪模型构件处理请求用确定用哪视图显示模型处理返数据
现我总结MVC处理程首先控制器接收用户请求并决定应该调用哪模型进行处理模型用业务逻辑处理用户请求并返数据控制器用相应视图格式化模型返数据并通表示层呈现给用户
要使用 MVC
部Web应用程序都用像ASPPHP或者CFML程化语言创建像数据库查询语句数据层代码像HTML表示层代码混起经验比较丰富发者数据表示层离通容易做需要精计划断尝试MVC根本强制性尽管构造MVC应用程序需要些额外工作给我带处庸质疑
首先重要点视图能共享模型我所提及现需要用越越式访问应用程序其解决道使用MVC论用户想要Flash界面或 WAP 界面;用模型能处理由于已经数据业务规则表示层所化重用代码
由于模型返数据没进行格式化所同构件能同界面使用例数据能用HTML表示能要用Macromedia FlashWAP表示模型状态管理数据持久性处理功能例基于购物车电商务程能Flash网站或者线联网应用程序所重用
模型自包含并且与控制器视图相离所容易改变应用程序数据层业务规则想数据库MySQL移植Oracle或者改变基于RDBMS数据源LDAP需改变模型即旦确实现模型管数据自数据库或LDAP服务器视图确显示由于运用MVC应用程序三部件相互立改变其影响其两所依据种设计思想能构造良松偶合构件
我说控制器提供处使用控制器联接同模型视图完用户需求控制器构造应用程序提供强力手段给定些重用模型视图控制器根据用户需求选择模型进行处理选择视图处理结显示给用户
MVC缺点
MVC缺点由于没明确定义所完全理解MVC并容易使用MVC需要精计划由于内部原理比较复杂所需要花费些间思考
花费相观间考虑何MVC运用应用程序同由于模型视图要严格离给调试应用程序定困难每构件使用前都需要经彻底测试旦构件经测试毫顾忌重用
根据我经验由于我应用程序三部件所使用MVC同意味着要管理比前更文件点显易见像我工作量增加请记住比起所能带给我处值提
MVC并适合型甚至等规模应用程序花费量间MVC应用规模并应用程序通偿失
MVC条创建软件途径
MVC设计模式创建软件途径所提倡些原则像内容显示互相离能比较理解要隔离模型、视图控制器构件能需要重新思考应用程序尤其应用程序构架面肯接受MVC并且能力应付所带额外工作复杂性MVC使软件健壮性代码重用结构面新台阶
Java发Web Application几种符合MVC设计模式发式
1:Jsp+Servlet+JavaBean(EJB)
2:Jsp+JavaBean(Controller)+JavaBean(EJB)(Model)
3:TDK(TurbineVelocity...)
4:Xsp
5:Jsp+Struts+JavaBean(EJB)
附:
三层架构即表现层业务层持久化层表现层实现代表作品Struts框架业务层实现代表作品Spring持久层实现代表作品Hibernate
举例
持久层持久库取-10
业务层按照定逻辑(我举例取温度逻辑)翻译-10摄氏度
表示层显现给用户哎呀今冷
层相于黑盒我用知道内部实现需要知道何调用行每层与相邻两层打交道层内部由于技术变迁发变化要接口变其层用做任何改变层灵性提高便于团队工发
呵呵写详细吧希望帮助
E. 写出MVC的工作原理
1.当用户在浏览器中点击一个链接或者提交一个表单时,那么就会产生一个请求(request)。当请求离开浏览器时,它会携带用户请求的信息。
2.请求的第一站到达的是Spring的DispatcherServlet,它是一个前端控制器,工作是将用户的请求委托给其他的组件(这里是交给Spring MVC的控制器)去处理。
这里DispatcherServlet要决定将请求传给哪一个控制器(Controller)去处理,那么这时就需要处理器映射(Handler Mapping)了。
处理器映射会看请求的URL信息,然后决定将请求交给哪一个控制器去处理。比如说有两个控制器ControllerA和ControllerB,分别处理后缀名为.html和.jsp送来的请求,那么当请求者的后缀名为.html时,那么DispatcherServlet就将请求交给ControllerA进行处理。
C代表Controller,负责用户界面和业务逻辑层的通信控制,一方面解释来自用户界面的输入,识别用户动作(如点击按钮等),调用相应Model中的方法,另一方面处理来自Model的事件和返回的执行结果,调用适当的View显示给用户,Controller主要由Servlet完成。
M代表Model,负责整个解决方案的业务逻辑实现,底层的数据库也由Model访问和操作;
V代表View,负责系统向用户的展示,主要由HTML及JSP等完成;
拓展资料:
MVC组件说明:
以下组件通常使用框架提供实现:
DispatcherServlet:作为前端控制器,整个流程控制的中心,控制其它组件执行,统一调度,降低组件之间的耦合性,提高每个组件的扩展性。
HandlerMapping:通过扩展处理器映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。
HandlAdapter:通过扩展处理器适配器,支持更多类型的处理器。
ViewResolver:通过扩展视图解析器,支持更多类型的视图解析,例如:jsp、freemarker、pdf、excel等。
组件:
1、前端控制器DispatcherServlet(不需要工程师开发),由框架提供
作用:接收请求,响应结果,相当于转发器,中央处理器。有了dispatcherServlet减少了其它组件之间的耦合度。
用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中心,由它调用其它组件处理用户的请求,dispatcherServlet的存在降低了组件之间的耦合性。
2、处理器映射器HandlerMapping(不需要工程师开发),由框架提供
作用:根据请求的url查找Handler
HandlerMapping负责根据用户请求找到Handler即处理器,springmvc提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。
3、处理器适配器HandlerAdapter
作用:按照特定规则(HandlerAdapter要求的规则)去执行Handler
通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。
4、处理器Handler(需要工程师开发)
注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler
Handler 是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。
由于Handler涉及到具体的用户业务请求,所以一般情况需要工程师根据业务需求开发Handler。
5、视图解析器View resolver(不需要工程师开发),由框架提供
作用:进行视图解析,根据逻辑视图名解析成真正的视图(view)
View Resolver负责将处理结果生成View视图,View Resolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。
springmvc框架提供了很多的View视图类型,包括:jstlView、freemarkerView、pdfView等。
一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由工程师根据业务需求开发具体的页面。
6、视图View(需要工程师开发jsp...)
View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf...)
参考资料:网络-MVC
F. 什么是MVC(三层架构)
MVC和三层架构有什么区别就是MVC是最流行的三层架构中的一种框架,就是模型-视图专-控制器三者分离。
MVC模式(Model–view–controller)是软属件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。
MVC模式最早由Trygve Reenskaug在1978年提出[1],是施乐帕罗奥多研究中心(Xerox PARC)在20世纪80年代为程序语言Smalltalk发明的一种软件架构。MVC模式的目的是实现一种动态的程式设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除此之外,此模式通过对复杂度的简化,使程序结构更加直观。软件系统通过对自身基本部分分离的同时也赋予了各个基本部分应有的功能。专业人员可以通过自身的专长分组:
控制器(Controller)- 负责转发请求,对请求进行处理。
视图(View) - 界面设计人员进行图形界面设计。
模型(Model) - 程序员编写程序应有的功能(实现算法等等)、数据库专家进行数据管理和数据库设计(可以实现具体的功能)。
G. MVC模式中的Model的理解
MVC(Model/View/Controller)模式是国外用得比较多的一种设计模式,好象最早是在Smaltalk中出现。MVC包括三类对象。Model是应用对象,View是它在屏幕上的表示,Controller定义用户界面对用户输入的响应方式。
模型-视图-控制器(MVC)是80年代Smalltalk-80出现的一种软件设计模式,现在已经被广泛的使用。
1、模型(Model)
模型是应用程序的主体部分。模型表示业务数据,或者业务逻辑.
2、视图(View)
视图是应用程序中用户界面相关的部分,是用户看到并与之交互的界面。
3、控制器(controller)
控制器工作就是根据用户的输入,控制用户界面数据显示和更新model对象状态。
MVC 式的出现不仅实现了功能模块和显示模块的分离,同时它还提高了应用系统的可维护性、可扩展性、可移植性和组件的可复用性
早期的程序中,如果不注意对数功能和显示的解耦合,常常会导致程序的复杂及难以维护。很多VB,Delphi等RAD程序都有这种问题。甚至现在的C#,Java有时候也会出现把业务逻辑写在显示模块中的现象
管MVC设计模式很早就提出,但在Web项目的开发中引入MVC却是步履维艰。主要原因:一是在早期的Web项目的开发中,程序语言和HTML的分离一直难以实现。CGI程序以字符串输出的形式动态地生成HTML内容。后来随着脚本语言的出现,前面的方式又被倒了过来,改成将脚本语言书写的程序嵌入在HTML内容中。这两种方式有一个相同的不足之处即它们总是无法将程序语言和HTML分离。二是脚本语言的功能相对较弱,缺乏支持MVC设计模式的一些必要的技术基础。直到基于J2EE的JSP Model 2问世时才得以改观。它用JSP技术实现视图的功能,用Servlet技术实现控制器的功能,用JavaBean技术实现模型的功能
JSP Model 1 与 JSP Model 2
SUN在JSP出现早期制定了两种规范,称为Model1和Model2。虽然Model2在一定程度上实现了MVC,但是它的应用用并不尽如人意
JSP Model 1
JSP Model 2
model2 容易使系统出现多个Controller,并且对页面导航的处理比较复杂
有些人觉得model2仍不够好,于是Craig R. McClanahan 2000年5月提交了一个WEB framework给Java Community.这就是后来的Struts.
2001年7月,Struts1.0,正式发布。该项目也成为了Apache Jakarta的子项目之一
Struts 质上就是在Model2的基础上实现的一个MVC架构。它只有一个中心控制器,他采用XML定制转向的URL。采用Action来处理逻辑
H. web前端学习分哪些阶段
您好,web前端学习分为8个阶段:
阶段1.前端核心基础
HTML +_CSS核心、JavaScript基础语法、JavaScript面向对象、版JavaScript DOM和
BOM编程、jQuery框架权
阶段2.HTML5 + CSS3 + 移动端核心
HTML5新特性、Canvas专列、CSS3新特性、CSS3进阶、CSS3实例演练
阶段3.移动端
移动端核心、移动端适配、移动端特效
阶段4.服务器端
服务器端开发、数据库操作、前后端交互核心、微信公众号开发
阶段5.JavaScript高级
JavaScript基础深入剖析、JavaScript面向对象深入讲解、JavaScript异步编程、
JavaScript函数式编程JavaScript设计模式
阶段6.前端必备
性能优化、版本控制工具、模块化、项目构建工具
阶段7.高级框架
React框架基本使用、React框架进阶、Vue框架基本使用、Vue框架进阶、Vue源码分析
阶段8.小程序
原生小程序入门、原生小程序API使用、小程序框架Mpvue
web前端学习有哪些阶段
这个学习路线图不管是自学还是参加培训班都是可以的,希望可以帮助到你。
I. 袁可可的JSP技术中使用mvc模式实现web购物车是硕士论文嘛
你是要找这类参考文献吗?你可以看看(计算机科学与应用)刊物上的文献吧,都是免费查阅的
J. JavaWeb学习路线
JavaWeb核心框架
持久层框架:Hibernate、iBATIS
表现层框架:Struts1、Struts2
业务层框架:Spring
java学习路线图:
1、Hibernate:ORM
Hibernate是一个Java ORM开发框架
ORM是Object Relation Mapping的缩写,顾名思义,即对象关系映射。
ORM是一种以面向对象的方式来进行数据库操作的技术。Web开发中常用的语言,都会有对应的ORM框架。而Hibernate就是Java开发中一种常用ORM框架,另一个现在流行的ORM框架是Mybatis。
为什么需要ORM框架?
简单地理解,通过Java进行数据库访问的正常流程可以分为以下几步:
准备好SQL语句
调用JDBC的API传入SQL语句,设置参数
解析JDBC返回的结果
这个过程实际上非常麻烦,比如:
在Java代码中拼接SQL非常麻烦,而且易于出错
JDBC的代码调用有很多重复性的代码
从JDBC返回的结果转换成领域模型的Java对象很繁琐
而使用ORM框架,则可以让我们用面向对象的方式来操作数据库,比如通过一个简单的函数调用就完成上面整个流程,直接返回映射为Java对象的结果。这个流程中很大一部分工作其实可以交给ORM自动化地帮我们执行。对,类似MVC框架,ORM框架会帮你处理好相关的繁琐事情!
2. Struts:MVC
Struts是一个Java Web MVC开发框架。MVC早在1978年就作为Smalltalk的一种设计模式被提出来了,引用到Web应用中来时:
模型Model用于封装与业务逻辑相关的数据和数据处理方法
视图View是数据的HTML展现
控制器Controller负责响应请求,协调Model和View
Model,View和Controller的分开,是一种典型的关注点分离的思想,不仅使得代码复用性和组织性更好,使得Web应用的配置性和灵活性更好。
MVC开发模式下,Java Web开发会遇到URL路由、模板渲染、表单绑定/提交/验证、Session封装、权限验证、国际化等一系列通用的问题,而MVC框架会将这些通用问题都封装进框架中,你在应用中根据自己的场景进行简单的配置和编码即可,MVC框架就能帮你处理好一切,可以极大地简化代码。
3.Spring:DI/AOP
Spring对应的关键词是DI(依赖注入)与AOP(面向切面编程),可以认为是一个以DI和AOP为核心Java Web一站式的集成(粘合)框架。
其中DI也称为IoC(控制发转)用于管理Java对象之间的依赖关系(一定要说DI是IoC实现方式的童鞋们见评论区),AOP用于解耦业务代码和公共服务代码(如日志,安全,事务等)。DI和AOP能够让代码更加简单,具有良好的松耦合特性和可测试性,极大地简化开发。理解这两者是使用Spring框架的基础。
Spring框架对Java企业应用开发中的各类通用问题都进行了良好的抽象,因此也能够把应用各个层次所涉及的特定的功能和开发框架(如接下来要说的MVC框架、ORM框架)方便得组合到一起(这也得益于依赖注入和面向切面编程带来的强大功能)。Spring是一个极其优秀的一站式的Full-Stack集成框架,因此基于Spring核心,对Java应用开发中的各类通用问题几乎都提供了针对性的开发框架,比如你耳熟能详(如果你对这个问题感兴趣的话)的Spring MVC,Spring Data。
Java曾经有另外一个类似的一站式框架粘合框架Seam,这是Hibernate的作者、脾气火爆的大神Gavin King的作品,核心是基于依赖注入来黏合JSF和EJB,不过推出时Spring已经大杀四方,Seam基本已经退出历史舞台了。记得Seam提过一个我认为很不错的概念:“双向注入”,类似现在前端框架中的双向绑定,当时来说还是很超前的。