第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 使用<meta>标签模拟响应消息头................................................................. 213
... 动手体验:使用<meta>标签解决浏览器查看网页时的中文乱码问题
... 多学两招:网页文档应尽量采用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
... 动手体验:使用<img>标签实现静态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 <jsp:include>标签......................................................................................... 449
... 动手体验:<jsp:include>标签的特性
8.6.2 <jsp:forward>标签........................................................................................ 451
... 动手体验:<jsp:forward>标签的特性
8.6.3 <jsp:param>标签........................................................................................... 452
8.6.4 <jsp:plugin>标签........................................................................................... 453
8.6.5 脚本元素标签............................................................................................. 454
8.6.6 指令标签.................................................................................................... 454
8.6.7 <jsp:text>标签.............................................................................................. 454
8.6.8 完全使用标签编写JSP页面........................................................................ 455
8.7 JSP的中文乱码问题.............................................................................................. 455
8.7.1 JSP中文乱码的根源.................................................................................... 455
... 动手体验:JSP引擎翻译JSP页面时的中文乱码问题
8.7.2 静态引入的中文乱码问题............................................................................ 463
... 动手体验:静态引入时的中文乱码问题
8.7.3 <jsp:param>标签传递中文参数时的问题........................................................ 464
... 动手体验:<jsp:param>标签传递中文参数时的问题
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 <jsp:useBean>标签........................................................................................ 474
... 动手体验:带标签体的<jsp:useBean>标签的执行情况
9.3.3 <jsp:setProperty>标签................................................................................... 477
... 动手体验:<jsp:setProperty>标签的应用
... 多学两招:利用JSP表达式对JavaBean的特殊类型的属性进行赋值
9.3.4 <jsp:getProperty>标签................................................................................... 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