第
1
章
XML
基础
..................................................................................................................
1
... 指点迷津:什么是配置文件
1.1 认知XML
............................................................................................................... 1
1.1.1 XML的起源与作用
......................................................................................... 1
1.1.2 XML文档结构
................................................................................................ 2
1.1.3 XML与HTML的比较
..................................................................................... 4
1.1.4 XML与数据库的比较
...................................................................................... 4
1.2 XML的基本语法
.................................................................................................... 5
1.2.1 文档声明
........................................................................................................ 5
...... 动手体验:加深对
encoding属性的理解
1.2.2 元素定义
........................................................................................................ 9
1.2.3 属性定义
...................................................................................................... 10
1.2.4 注释
............................................................................................................. 11
1.2.5 空格和换行的处理
........................................................................................ 11
1.2.6 CDATA区
...................................................................................................... 11
1.2.7 特殊字符
...................................................................................................... 12
... 动手体验:加深对特殊字符的了解
1.2.8 处理指令(processing instruction)
................................................................ 14
... 动手体验:使用CSS控制XML文档的显示
1.3 XML约束模式
...................................................................................................... 15
1.3.1 格式良好的(Well-formed)XML
................................................................... 15
1.3.2 XML的约束模式
........................................................................................... 15
1.3.3 XML约束模式语言
........................................................................................ 16
1.3.4 有效的(Valid)XML
..................................................................................... 17
1.4 DTD
..................................................................................................................... 17
1.4.1 初识DTD
..................................................................................................... 17
1.4.2 在XML文档中引入外部DTD文件
............................................................... 18
1.4.3 在XML文档中直接嵌入DTD定义语句
........................................................ 20
1.5 DTD的语法细节
................................................................................................... 21
1.5.1 元素定义
...................................................................................................... 21
1.5.2 属性定义
...................................................................................................... 22
1.5.3 实体定义
...................................................................................................... 27
... 动手体验:加深对引用实体的了解
1.6 XML Schema
......................................................................................................... 31
1.6.1 XML Schema与DTD的比较
.......................................................................... 31
1.6.2 一个XML Schema例子
................................................................................. 32
1.7 名称空间
.............................................................................................................. 34
1.7.1 名称空间的概念
............................................................................................ 34
1.7.2 名称空间声明
............................................................................................... 34
1.7.3 默认名称空间
............................................................................................... 35
1.7.4 属性的名称空间问题
..................................................................................... 36
1.7.5 xml:space和xml:lang属性
.............................................................................. 36
1.8 引入XML Schema文档
......................................................................................... 37
1.8.1 使用名称空间引入XML Schema文档
............................................................ 37
1.8.2 不使用名称空间引入XML Schema文档
......................................................... 39
1.9 思考与实践
........................................................................................................... 39
第
2
章
用
Tomcat
构建
WEB
站点
.........................................................................................
41
2.1 WEB应用的相关知识
............................................................................................ 41
2.1.1 HTTP协议
.................................................................................................... 41
2.1.2 URL
.............................................................................................................. 41
2.1.3 网站系统的组成
............................................................................................ 42
2.1.4 主要的WEB服务器软件
............................................................................... 43
2.2 安装Tomcat
.......................................................................................................... 44
2.2.1 Tomcat简介
.................................................................................................. 44
2.2.2 获取Tomcat安装程序包
............................................................................... 44
2.2.3 使用zip和tar.gz包安装Tomcat
..................................................................... 44
2.2.4 使用exe程序安装Tomcat
............................................................................. 46
2.3 Tomcat的启动与停止
............................................................................................ 50
2.3.1 使用Tomcat服务程序
................................................................................... 50
... 多学两招:查找网络服务程序监听异常的问题
2.3.2 使用Tomcat程序组中的快捷菜单
................................................................. 53
... 多学两招:了解Tomcat 4.1.3的快捷启动菜单的工作原理
2.3.3 使用tomcat.exe程序
..................................................................................... 56
... 指点迷津:tomcat5.exe启动的tomcat程序不一定是tomcat5.exe自身所在的目录
2.3.4 startup.bat批处理文件
.................................................................................... 58
2.3.5 catalina.bat批处理文件
................................................................................... 61
2.3.6 使用批处理程序及查找Tomcat的启动问题
................................................... 65
... 动手体验:练习查找tomcat的启动错误
2.4 配置WEB站点的虚拟目录
.................................................................................... 68
2.4.1 虚拟WEB目录的映射关系
............................................................................ 68
2.4.2 设置WEB站点的根目录
............................................................................... 69
... 动手体验:修改WEB站点的默认根目录
2.4.3 设置WEB站点的虚拟子目录
........................................................................ 71
... 动手体验:设置WEB站点的虚拟子目录
... 脚下留心:war文件的内部目录结构
2.4.4 部署描述符与目录的默认网页
....................................................................... 73
... 动手体验:设置目录的默认网页
2.5 配置虚拟主机
....................................................................................................... 75
2.5.1 浏览器访问WEB资源的过程
........................................................................ 75
... 动手体验:用telnet程序分析浏览器访问WEB资源的过程
... 多学两招:打开telnet程序的本地回显功能
2.5.2 虚拟主机及实现原理
..................................................................................... 77
2.5.3 基于主机名的虚拟主机
................................................................................. 78
...... 动手体验:使用
Tomcat建立基于主机名的虚拟主机
2.5.4 基于端口号的虚拟主机
................................................................................. 82
... 动手体验:使用Tomcat建立基于端口号的虚拟主机
2.5.5 基于IP地址的虚拟主机
................................................................................ 83
2.6 与专用WEB服务器的集成
.................................................................................... 83
2.6.1 集成的考虑因素
............................................................................................ 84
2.6.2集成技术的选择
............................................................................................. 85
2.6.3 JK插件
......................................................................................................... 86
... 动手体验:下载JK插件
2.6.4 Tomcat的体系结构与JK插件的工作原理
....................................................... 89
... 动手体验:查阅JK连接器的帮助文档
2.6.5 Tomcat与IIS服务器集成
.............................................................................. 93
2.6.6 Tomcat与Windows系统下的Apache服务器集成
.......................................... 100
2.6.7 与专业WEB服务器集成的现实问题
............................................................ 103
2.7 思考与实践
......................................................................................................... 103
第
3
章
HTTP
协议详解
....................................................................................................
105
3.1 了解HTTP
............................................................................................................ 105
3.1.1 HTTP简介
................................................................................................... 105
3.1.2 HTTP 1.0的会话方式
................................................................................... 105
3.1.3 HTTP 1.1与HTTP 1.0的比较
....................................................................... 106
3.1.4 HTTP消息的格式
........................................................................................ 108
3.2 请求行与状态行
.................................................................................................... 110
3.2.1 请求行与状态行
.......................................................................................... 110
... 动手体验:借助telnet程序直观体验请求行和状态行
3.2.2 使用GET和POST方式传递参数
................................................................. 112
... 动手体验:在telnet程序中使用GET与POST方式传递参数
3.2.3 响应状态码
................................................................................................. 117
3.3 通用信息头
........................................................................................................... 120
3.3.1 Cache-Control
............................................................................................... 120
3.3.2 Connection
................................................................................................... 121
... 动手体验:Connection头字段的作用
3.3.3 Date
............................................................................................................. 121
3.3.4 Pragma
........................................................................................................ 122
3.3.5 Trailer
.......................................................................................................... 122
3.3.6 Transfer-Encoding
........................................................................................ 122
3.3.7 Upgrade
....................................................................................................... 122
3.3.8 Via
............................................................................................................... 123
3.3.9 Warning
....................................................................................................... 123
3.4 请求头
.................................................................................................................. 123
3.4.1 Accept
......................................................................................................... 123
3.4.2 Accept-Charset
............................................................................................. 123
3.4.3 Accept-Encoding
........................................................................................... 123
3.4.4 Accept-Language
........................................................................................... 124
... 动手体验:Accept-Language头字段的作用
3.4.5 Authorization
................................................................................................. 125
3.4.6 Expect
......................................................................................................... 126
3.4.7 From
........................................................................................................... 126
3.4.8 Host
............................................................................................................. 126
3.4.9 If-Match
...................................................................................................... 126
3.4.10 If-Modified-Since
........................................................................................ 127
3.4.11 If-None-Match
............................................................................................ 127
3.4.12 If-Range
..................................................................................................... 127
3.4.13 If-Unmodified-Since
.................................................................................... 127
3.4.14 Max-Forwards
............................................................................................ 127
3.4.15 Proxy-Authorization
..................................................................................... 128
3.4.16 Range
......................................................................................................... 128
3.4.17 Referer
....................................................................................................... 128
3.4.18 TE
............................................................................................................. 128
3.4.19 User-Agent
................................................................................................. 129
3.5 响应头
.................................................................................................................. 129
3.5.1 Accept-Ranges
.............................................................................................. 129
3.5.2 Age
.............................................................................................................. 129
3.5.3 Etag
............................................................................................................. 129
3.5.4 Location
....................................................................................................... 130
... 动手体验:Location头字段的作用
3.5.5 Proxy-Authenticate
........................................................................................ 130
3.5.6 Retry-After
................................................................................................... 130
3.5.7 Server
.......................................................................................................... 131
3.5.8 Vary
............................................................................................................. 131
3.5.9 WWW-Authenticate
....................................................................................... 131
3.6 实体头
.................................................................................................................. 131
3.6.1 Allow
........................................................................................................... 132
3.6.2 Content-Encoding
.......................................................................................... 132
3.6.3 Content-Language
......................................................................................... 132
3.6.4 Content-Length
............................................................................................. 133
3.6.5 Content-Location
........................................................................................... 133
3.6.6 Content-MD5
................................................................................................ 133
3.6.7 Content-Range
.............................................................................................. 133
3.6.8 Content-Type
................................................................................................ 134
... 动手体验:了解WEB服务器设置实体内容的MIME类型的原理
3.6.9 Expires
......................................................................................................... 135
3.6.10 Last-Modified
.............................................................................................. 135
3.7 扩展头
.................................................................................................................. 136
3.7.1 Refresh
........................................................................................................ 136
3.7.2 Content-Disposition
....................................................................................... 136
3.8 思考与实践
......................................................................................................... 137
第4章 Servlet开发基础................................................................................................ 138
4.1 Servlet的有关概念
............................................................................................. 138
4.1.1 什么是动态网页
.......................................................................................... 138
... 指点迷津:区分动态网页与动态HTML页面的概念
4.1.2 动态网页程序与引擎
................................................................................... 139
4.1.3 Servlet技术简介
........................................................................................... 140
4.1.4 B/S系统架构与C/S系统架构
....................................................................... 141
4.1.5 相关知识
.................................................................................................... 143
4.2 Servlet应用入门
................................................................................................ 143
4.2.1 Servlet API介绍
........................................................................................... 143
... 动手体验:查看Tomcat提供的Servlet API帮助文档
4.2.2 编写与编译Servlet程序
............................................................................... 145
... 指点迷津:如何快速入门新技术
... 动手体验:编写与编译Servlet程序的过程
4.2.3 Servlet的注册与运行
.................................................................................... 146
... 动手体验:注册与访问Servlet程序
... 照猫画虎:如何编写web.xml文件
4.2.4 Servlet激活器
.............................................................................................. 150
... 动手体验:使用Servlet激活器
4.2.5 缺省Servlet
................................................................................................. 151
... 动手体验:缺省Servlet的作用
4.2.6 Servlet的类装载器
....................................................................................... 152
... 动手体验:Tomcat如何完成类的加载
... 指点迷津:区分Servlet的编译和运行环境
4.2.7 编写一个自动编译工具
............................................................................... 158
4.3 Servlet的特点及运行过程
.................................................................................. 158
4.3.1 Servlet的特点
.............................................................................................. 158
4.3.2 Servlet的运行过程
....................................................................................... 160
4.3.3 Servlet的线程安全问题
................................................................................ 164
... 动手体验:Servlet的并发访问与线程安全问题
... 指点迷津:哪些情况下要考虑线程安全问题
4.4 ServletConfig接口
............................................................................................... 167
4.4.1 getInitParameterNames方法
.......................................................................... 168
4.4.2 getInitParameter方法
.................................................................................... 168
4.4.3 getServletName方法
..................................................................................... 168
4.4.4 getServletContext方法
.................................................................................. 168
4.4.5 GenericServlet类实现ServletConfig接口的目的
............................................. 169
4.4.6 ServletConfig的应用举例
.............................................................................. 169
... 动手体验:ServletConfig对象的应用
4.5 GenericServlet与HttpServlet类
.......................................................................... 171
4.5.1 理解回调方法
............................................................................................. 171
4.5.2 init方法
....................................................................................................... 172
... 指点迷津:覆盖无参数的init()方法来编写初始化代码的好处
4.5.3 service方法
................................................................................................. 174
4.5.4 destroy方法
................................................................................................. 175
4.5.5 getServletConfig方法
.................................................................................... 175
4.5.6 getServletInfo方法
....................................................................................... 175
4.5.7 doXxx方法
.................................................................................................. 175
... 动手体验:doGet方法与doPost方法的作用
... 指点迷津:如何理解“在自己的程序代码中不能调用回调方法”
4.5.8 浏览器缓存内幕与getLastModified方法
....................................................... 175
... 动手体验:揭开浏览器缓存的奥秘
4.6 ServletContext接口
.............................................................................................. 179
4.6.1 获取WEB应用程序的初始化参数
................................................................ 179
... 动手体验:WEB应用程序的初始化参数的设置与应用
4.6.2 记录日志
.................................................................................................... 181
... 动手体验:WEB应用程序的日志记录功能
... 多学两招:JDK中提供的日志记录模块
4.6.3 application域范围的属性
.............................................................................. 186
4.6.4 访问资源文件
............................................................................................. 187
... 动手体验:在Servlet程序中使用FileInputStream类的问题
... 动手体验:使用ServletContext接口和ClassLoader类中的方法访问资源文件
4.6.5 获取虚拟路径所映射的本地路径
................................................................. 191
4.6.6 WEB应用程序之间的访问
............................................................................ 191
... 动手体验:访问其他WEB应用程序
4.6.7 ServletContext接口中的其他方法
.................................................................. 193
4.7 思考与实践
.......................................................................................................... 194
第5章 HttpServletResponse的应用............................................................................... 196
5.1 准备实验环境
....................................................................................................... 196
5.2 HttpServletResponse简介
................................................................................... 197
5.3 产生响应状态行
................................................................................................... 197
5.3.1 状态码常量
................................................................................................. 197
5.3.2 setStatus方法
............................................................................................... 198
5.3.3 sendError方法
............................................................................................. 198
5.4 构建响应消息头
................................................................................................... 198
5.4.1 addHeader与setHeader方法
.......................................................................... 199
5.4.2 addIntHeader与setIntHeader方法
.................................................................. 199
5.4.3 addDateHeader与setDateHeader方法
............................................................. 199
5.4.4 setContentLength方法
................................................................................... 199
5.4.5 setContentType方法
..................................................................................... 200
5.4.6 setCharacterEncoding方法
............................................................................ 200
5.4.7 setLocale方法
.............................................................................................. 200
5.4.8 containsHeader方法
...................................................................................... 201
5.5 响应消息头的实用案例
......................................................................................... 201
5.5.1 Servlet的中文输出问题
................................................................................ 201
... 动手体验:浏览器查看网页文档时怎样选择字符集编码
... 动手体验:Servlet的中文输出问题及解决之道
... 脚下留心:注意传递给setContentType方法的参数值的大小写
... 多学两招:修改某个Servlet将导致整个WEB应用程序被重新加载
5.5.2 让浏览器定时刷新网页或跳转至其他页面
................................................... 210
... 动手体验:Refresh头字段的作用效果
5.5.3 禁止浏览器缓存当前文档内容
..................................................................... 211
... 动手体验:浏览器的缓存问题和解决方案
5.5.4 使用标签模拟响应消息头
................................................................. 213
... 动手体验:使用标签解决浏览器查看网页时的中文乱码问题
... 多学两招:网页文档应尽量采用UTF-8编码
5.6 创建响应正文
....................................................................................................... 215
5.6.1 getOutputStream与getWriter方法
................................................................. 215
5.6.2 getWriter方法的一些相关小疑问
.................................................................. 216
... 动手体验:getWriter方法的一些相关问题
5.6.3 输出缓冲区
................................................................................................. 218
... 动手体验:Servlet引擎处理输出缓冲区的细节
5.6.4 实现动态文件内容的下载
............................................................................ 221
... 动手体验:实现动态文件内容的下载
5.6.5 图像访问计数器
.......................................................................................... 223
... 动手体验:使用标签实现静态HTML页面的访问次数统计和显示
... 多学两招:如何动态产生大小可变的图像
5.7 请求重定向与请求转发
......................................................................................... 230
5.7.1 RequestDispatcher接口
................................................................................. 231
5.7.2 用include方法实现资源包含
....................................................................... 231
... 动手体验:RequestDispatcher.include方法的应用细节
5.7.3 用forward方法实现请求转发
...................................................................... 237
... 动手体验:RequestDispatcher.forward方法的应用细节
... 动手体验:RequestDispatcher.forward方法的相对路径问题
5.7.4请求转发的运行流程
.................................................................................... 246
5.7.5 用sendRedirect方法实现请求重定向
............................................................ 250
... 动手体验:sendRedirect方法的应用
5.7.6请求重定向的运行流程
................................................................................ 252
5.7.7 请求重定向与请求转发的比较
..................................................................... 257
5.7.8 缺省Servlet的缓存问题
............................................................................... 258
... 动手体验:缺省Servlet的缓存问题
5.8 思考与实践
.......................................................................................................... 261
第6章 HttpServletRequest的应用................................................................................. 263
6.1 HttpServletRequest简介
...................................................................................... 263
6.2 获取请求行的相关信息
....................................................................................... 263
6.2.1 getMethod方法
............................................................................................ 263
6.2.2 getRequestURI方法
...................................................................................... 263
6.2.3 getQueryString方法
...................................................................................... 264
6.2.4 getProtocol方法
........................................................................................... 264
6.2.5 getContextPath方法
...................................................................................... 264
6.2.6 getPathInfo方法
........................................................................................... 264
6.2.7 getPathTranslated方法
.................................................................................. 265
6.2.8 getServletPath方法
....................................................................................... 265
6.2.9 获取请求行信息的综合实例
........................................................................ 265
... 动手体验:与请求行信息相关的各个方法的作用
6.3 获取网络连接信息
.............................................................................................. 266
6.3.1 getRemoteAddr方法
..................................................................................... 266
6.3.2 getRemoteHost方法
...................................................................................... 267
6.3.3 getRemotePort方法
...................................................................................... 267
6.3.4 getLocalAddr方法
........................................................................................ 267
6.3.5 getLocalName方法
....................................................................................... 267
6.3.6 getLocalPort方法
......................................................................................... 267
6.3.7 getServerName方法
...................................................................................... 267
6.3.8 getServerPort方法
........................................................................................ 267
6.3.9 getScheme方法
............................................................................................ 267
6.3.10 getRequestURL方法
.................................................................................... 268
6.4 获取请求头信息
................................................................................................. 268
6.4.1 getHeader方法
............................................................................................. 268
6.4.2 getHeaders方法
............................................................................................ 268
6.4.3 getHeaderNames方法
.................................................................................... 268
6.4.4 getIntHeader方法
......................................................................................... 269
6.4.5 getDateHeader方法
....................................................................................... 269
6.4.6 getContentType方法
..................................................................................... 269
6.4.7 getContentLength方法
.................................................................................. 269
6.4.8 getCharacterEncoding方法
............................................................................ 269
6.4.9 获取所有请求头的编程实例
........................................................................ 269
... 动手体验:获取请求消息中的所有请求头信息
6.4.10 利用Referer请求头阻止“盗链”
.............................................................. 272
... 动手体验:利用Referer请求头阻止“盗链”
6.4.11 利用Referer请求头隐藏JavaScript源码
..................................................... 273
... 动手体验:利用Referer请求头隐藏JavaScript源代码
6.4.12 BASE64编码及客户端身份认证
.................................................................. 278
... 动手体验:BASIC验证的交互过程
6.5 浏览器传递参数信息的细节
................................................................................ 284
6.5.1 使用GET方式传递参数
.............................................................................. 285
... 脚下留心:不要使用GET方式提交包含口令的FORM表单
6.5.2 使用POST方式传递参数
............................................................................ 285
6.5.3 提交、重置、普通按钮如何传送参数
.......................................................... 286
... 动手体验:了解提交、重置、普通按钮的参数传递细节
6.5.4 单行与多行文本输入框如何传送参数
.......................................................... 287
... 动手体验:了解单行与多行文本输入框的参数传递细节
6.5.5 单选按钮与复选框如何传送参数
................................................................. 288
... 动手体验:了解单选按钮与复选框的参数传递细节
6.5.6 隐藏表单字段与图像字段如何传送参数
....................................................... 289
... 动手体验:了解隐藏表单字段元素与图像字段元素的参数传递细节
6.5.7 列表框如何传送参数
................................................................................... 290
... 动手体验:了解列表框的参数传递细节
6.5.8 使用Javascript防止重复提交表单
................................................................ 290
... 动手体验:使用Javascript防止重复表单提交
6.6 获取请求参数
..................................................................................................... 293
6.6.1 getParameter方法
......................................................................................... 293
6.6.2 getParameterValues方法
................................................................................ 293
6.6.3 getParameterNames方法
............................................................................... 293
6.6.4 getParameterMap方法
................................................................................... 294
6.6.5 获取请求参数的编程实例
............................................................................ 294
... 动手体验:获取请求消息中的所有参数
6.6.6 一次性处理多个列表项的实用案例
.............................................................. 296
... 动手体验:一次性处理多个列表项
6.6.7单选列表框的处理经验
................................................................................ 300
6.7 获取请求消息的实体内容
................................................................................... 300
6.7.1 getInputStream与getReader方法
................................................................... 301
... 多学两招:使用ServletInputStream对象读取文本格式的实体内容
6.7.2 分析文件上传的请求消息结构
..................................................................... 301
... 动手体验:分析文件上传的请求消息结构
6.8 利用请求域属性传递信息
..................................................................................... 311
6.8.1 setAttribute方法
........................................................................................... 311
6.8.2 getAttribute方法
........................................................................................... 312
6.8.3 removeAttribute方法
..................................................................................... 312
6.8.4 getAttributeNames方法
................................................................................. 312
6.8.5 请求域属性的编程实例
............................................................................... 312
... 动手体验:请求域属性的应用
... 多想一想:请求域属性与URL参数的应用区别
6.9 请求参数的中文读取问题
................................................................................... 317
6.9.1 了解中文字符的URL编码
........................................................................... 317
... 动手体验:中文字符的URL编码和解码
6.9.2 浏览器怎样进行URL编码
........................................................................... 318
... 动手体验:浏览器怎样对FORM表单内容进行URL编码
6.9.3 getCharacterEncoding方法
............................................................................ 319
6.9.4 setCharacterEncoding方法
............................................................................ 319
6.9.5 getParameter方法的中文问题
....................................................................... 319
... 动手体验:使用getParameter方法读取请求参数时的中文乱码问题
6.9.6 一些参考经验
............................................................................................. 332
6.10 思考与实践
........................................................................................................ 333
第7章 会话与状态管理................................................................................................. 334
7.1 WEB应用中的会话与会话状态
........................................................................... 334
7.1.1 会话与会话状态简介
................................................................................... 334
7.1.2 如何实现有状态的会话
............................................................................... 334
7.2 Cookie
............................................................................................................... 335
7.2.1 什么是Cookie
............................................................................................. 335
7.2.2 Set-Cookie2响应头字段
................................................................................ 337
7.2.3 Cookie请求头字段
....................................................................................... 338
7.3 在Servlet程序中使用Cookie
............................................................................. 339
7.3.1 Cookie类
..................................................................................................... 339
7.3.2 HttpServletResponse.addCookie方法
.............................................................. 340
7.3.3 HttpServletRequest.getCookies方法
................................................................ 340
7.3.4 Cookie的综合实例
....................................................................................... 341
... 动手体验:Cookie的工作细节
7.4 Session
............................................................................................................. 354
7.4.1 什么是Session
............................................................................................ 354
7.4.2 Session的跟踪机制
...................................................................................... 354
7.4.3 Session的超时管理
...................................................................................... 355
7.4.4 HttpSession接口中的方法
............................................................................. 356
7.4.5 HttpServletRequest接口中的Session方法
...................................................... 357
... 多想一想:什么情况下该调用request.getSession(false)方法
7.4.6 application与session域范围的属性比较
........................................................ 358
... 动手体验:application和session域范围的属性的差异
7.4.7 利用Cookie实现Session跟踪
...................................................................... 364
... 动手体验:如何利用Cookie实现Session跟踪
7.4.8 利用URL重写实现Session跟踪
.................................................................. 367
... 动手体验:利用URL重写实现Session跟踪
7.5 Session的典型案例
........................................................................................... 368
7.5.1 使用Session实现购物车
.............................................................................. 368
... 动手体验:使用Session实现购物车功能
7.5.2 利用Session防止表单重复提交
................................................................... 375
... 多学两招:MD5算法及其应用
... 动手体验:利用Session防止表单重复提交
7.5.3 利用Session实现一次性验证码
................................................................... 382
... 动手体验:利用Session实现一次性验证码
... 多学两招:用时间间隔限制用户连续发帖
7.5.4 跟踪用户上次访问站点的时间及Cookie中文问题
........................................ 387
7.6 Session的持久化管理
........................................................................................ 389
7.6.1 Session的持久化
.......................................................................................... 389
7.6.2 Tomcat中的Session持久化管理
................................................................... 390
... 动手体验:Tomcat的Session持久化
7.7 思考与实践
................................................................................................................. 394
第8章 JSP..................................................................................................................... 396
8.1 JSP入门
............................................................................................................. 396
8.1.1 建立对JSP的直观认识
............................................................................... 396
... 动手体验:编写最基本JSP程序
8.1.2 JSP的运行原理
........................................................................................... 399
... 多学两招:让JSP引擎不检测JSP页面是否发生修改
8.1.3 分析JSP所生成的Servlet代码
.................................................................... 402
... 指点迷津:out.print语句与out.write语句的区别
8.1.4 JSP隐式对象
............................................................................................... 407
... 多学两招:使用JSP页面学习Servlet API
8.1.5 注册与配置JSP页面的访问路径
................................................................. 409
8.1.6 JSP与JavaScript的综合应用
........................................................................ 409
... 动手体验:JSP与JavaScript的综合应用
... 多学两招:降低代码的嵌套层次,提高程序的易阅读性
8.1.7 JSP与Servlet的应用比较
............................................................................. 417
8.2 JSP基本语法
...................................................................................................... 418
8.2.1 JSP模版元素
............................................................................................... 418
8.2.2 JSP表达式
.................................................................................................. 418
8.2.3 JSP脚本片断
............................................................................................... 418
8.2.4 JSP声明
...................................................................................................... 420
8.2.5 EL表达式
.................................................................................................... 422
... 动手体验:EL表达式将null输出为空字符串("")的好处
8.2.6 JSP注释
...................................................................................................... 424
... 动手体验:JSP注释与JSP页面中的Java注释和HTML注释的区别
8.2.7 特殊字符序列的转义处理
............................................................................ 425
8.2.8 如何查找JSP页面中的错误
........................................................................ 426
... 动手体验:查找JSP页面中的错误
8.3 JSP指令
............................................................................................................. 430
8.3.1 JSP指令简介
............................................................................................... 430
8.3.2 page指令
..................................................................................................... 430
... 动手体验:JSP页面中的异常处理
... 多学两招:在web.xml文件中设置全局错误处理
... 多学两招:如何识别web.xml文件所遵循的Servlet规范版本
8.3.3 include指令
................................................................................................. 435
... 动手体验:include指令的特性
8.4 out对象
.............................................................................................................. 438
... 动手体验:out对象的应用特性
... 指点迷津:将请求转发给静态HTML页面的实验现象为何不稳定
8.5 pageContext对象
................................................................................................. 441
8.5.1 pageContext对象简介
................................................................................... 441
8.5.2 获得其他隐式对象
...................................................................................... 442
8.5.3 引入和跳转到其他资源
............................................................................... 442
... 动手体验:PageContext.forward方法的应用细节
8.5.4 访问各个域范围中的属性
............................................................................ 444
... 动手体验:存储在pageContext对象中的属性的作用域
8.5.5 pushBody与popBody方法
............................................................................ 446
8.6 JSP标签
............................................................................................................. 448
8.6.1 标签
......................................................................................... 449
... 动手体验:标签的特性
8.6.2 标签
........................................................................................ 451
... 动手体验:标签的特性
8.6.3 标签
........................................................................................... 452
8.6.4 标签
........................................................................................... 453
8.6.5 脚本元素标签
............................................................................................. 454
8.6.6 指令标签
.................................................................................................... 454
8.6.7 标签
.............................................................................................. 454
8.6.8 完全使用标签编写JSP页面
........................................................................ 455
8.7 JSP的中文乱码问题
.............................................................................................. 455
8.7.1 JSP中文乱码的根源
.................................................................................... 455
... 动手体验:JSP引擎翻译JSP页面时的中文乱码问题
8.7.2 静态引入的中文乱码问题
............................................................................ 463
... 动手体验:静态引入时的中文乱码问题
8.7.3 标签传递中文参数时的问题
........................................................ 464
... 动手体验:标签传递中文参数时的问题
8.7.4 JSP中文乱码的总结
.................................................................................... 466
8.8 思考与实践
.................................................................................................................. 468
第9章 JavaBean在JSP中的应用.................................................................................. 470
9.1 JavaBean简介
...................................................................................................... 470
9.2 JavaBean的属性
.................................................................................................. 470
9.1.1 JavaBean的属性简介
.................................................................................... 470
9.1.2 简单属性
.................................................................................................... 471
9.1.3 Indexed属性
................................................................................................ 472
9.3 JavaBean在JSP中的应用
.................................................................................... 473
9.3.1 在JSP中如何使用JavaBean
......................................................................... 473
9.3.2 标签
........................................................................................ 474
... 动手体验:带标签体的标签的执行情况
9.3.3 标签
................................................................................... 477
... 动手体验:标签的应用
... 多学两招:利用JSP表达式对JavaBean的特殊类型的属性进行赋值
9.3.4 标签
................................................................................... 481
9.3.5 使用JavaBean的注意事项
........................................................................... 481
9.4 JSP开发模式
......................................................................................................... 482
9.4.1 MVC设计模式
............................................................................................. 482
9.4.2 JSP开发模式
............................................................................................... 483
9.4.3 用模式一实现用户登录功能
........................................................................ 484
... 动手体验:用JSP模式一实现用户登录功能
9.4.4 用模式二实现用户注册功能
........................................................................ 493
... 动手体验:用JSP模式二实现用户注册功能
9.5 思考与实践
........................................................................................................... 504