Java EE是当前最流行的Web应用主流框架,在企业级应用开发中占主导地位。《求精要诀:JavaEE编程开发案例精讲》系统地介绍Java EE的体系结构、JSP与Servlet在体系结构中的地位、应用服务器和主流开发工具,主要内容包括Web应用框架、Servlet、JSP、会话状态、EL和JSTL、监听器、过滤器、数据库、MVC等。 本书讲解详细且通俗易懂,以具体案例应用编程辅助,便于读者理解和自主应用。 本书适合作为Java EE应用开发人员的技术参考书,并提供网络QQ群学习辅导,读者可以自主学习,本书也适合作为Web应用开发技术培训的参考书。
第2章 Servlet编程
Servlet是Java EE编程的基础,JSP建立在Servlet基础之上,诸如JSF、Struts、WebWork和Spring MVC等Web框架的基础都是Servlet。
本章主要介绍Servlet的工作原理、Servlet编程、Servlet生命周期以及Servlet部署,并提供大量实例,来说明如何进行Servlet编程。这些技能是Java EE Web开发的基石,需要花时间来领会。
2.1 Servlet概述
Servlet扩展了Web服务器,是一种非常安全的、可移植的、易于使用的Web组件。
Servlet也是一种动态加载的模块,针对向Web服务器的资源请求提供服务。Servlet完全运行在服务器端的Java虚拟机上,一般将后者称为Servlet容器。
2.1.1 Servlet的基本概念
(1) Servlet对服务器的扩展
在第1章的firstjsp项目中,浏览器获取到的页面是一种动态页面。该动态页面在HTTP请求之前并不存在,而是根据某种预先设定的逻辑来动态生成显示页面。
动态页面往往是相对于静态页面而言的,动态页面不是指含有动画的页面,而是指通过执行Servlet、JSP、.NET等程序,即时生成客户端网页代码的网页。可以想象一下,如果只使用静态页面,而不执行任何服务器端的脚本或辅助程序,想实时获取服务器的当前时间,是绝无可能办到的。
动态页面具有如下几个特点:
? 动态页面实际上并不是存储在服务器上的独立网页文件。只有当用户发出请求时,服务器才动态组装并返回一个完整的网页。
? 动态页面的内容往往存放在数据库中,根据用户发出的不同请求而提供个性化的网页内容。
? 由于动态页面只是一个显示模板,其显示内容存放在数据库中,没有存在页面上,因此能大大降低网站维护的工作量。
Web服务器的许多工作都需要与Web组件一起协同,才能得以完成。除了上述生成动态页面的功能外,Web服务器的重要工作还包括保存数据。当用户填写表单并点击提交按钮后,服务器获取用户提交的表单信息,然后对表单信息进行处理,最后往往需要将数据保存到文件或数据库中。由于生成页面和保存数据的多样性,无法制作一个统一的“标准程序”来完成上述工作,因此,单靠服务器本身,无法完成这些复杂多变的工作,需要对Web组件进行定制。
Servlet编程,就是对这种最常用的Web组件进行定制,从而扩展服务器的功能。
(2) 揭开Servlet的神秘面纱
没有什么方法能比实际构建一个Servlet可以更直观地了解什么是Servlet的了。对于Servlet的新手,也许已经迫不及待地希望实际动手建立并运行一个Servlet项目。
首先启动Eclipse,通过从菜单栏中选择File → New → Dynamic Web Project命令,打开新建动态Web项目的对话框,输入“firstservlet”作为项目名称,保持其他选项不变,然后单击Finish按钮结束。
从菜单栏中选择File → New → Servlet命令,打开新建Servlet的对话框,输入“com.jeelearning.servlet”作为包名,输入“FirstServlet”作为Servlet名称,单击Finish按钮结束,如图2.1所示。
图2.1 新建Servlet的对话框
新创建的Servlet结构如代码清单2.1所示。
FirstServlet类继承HttpServlet类,后者是一个抽象类,用于创建具体的Servlet子类。由于HttpServlet类实现了java.io.Serializable接口,因此需要提供long型的serialVersionUID。FirstServlet()方法是默认的构造函数。doGet()方法和doPost()方法是Servlet中的两个最重要的方法,分别处理HTTP GET请求和POST请求。@WebServlet是Servlet 3.0才开始引入的标注(Annotation),如果使用该标注,就不再需要在部署描述文件web.xml中配置Servlet了,这简化了Servlet的编程工作。也就是说,如果使用Servlet 2.5及以前的版本,只能在web.xml文件中配置Servlet。这里的@WebServlet标注里的字符串参数告诉容器,如果请求的URL是“/FirstServlet”,则由FirstServlet类的实例提供服务。
2.1 FirstServlet.java
package com.jeelearning.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/FirstServlet")
public class FirstServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public FirstServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
}
……
第1章 Java EE的体系结构 1
1.1 Java EE概述 2
1.1.1 Java EE版本简介 2
1.1.2 Java EE规范简介 2
1.1.3 有问必答 4
1.2 JSP与Servlet 5
1.2.1 JSP 5
1.2.2 Servlet 5
1.2.3 有问必答 6
1.3 HTML与HTTP 6
1.3.1 HTML简介 6
1.3.2 HTTP协议 7
1.3.3 HTTP请求和响应 8
1.3.4 实践出真知 11
1.3.5 有问必答 13
1.4 搭建开发环境 13
1.4.1 JDK的安装 13
1.4.2 Web服务器的安装 15
1.4.3 数据库的安装 16
1.4.4 IDE的安装 17
1.4.5 实践出真知 19
1.4.6 有问必答 22
第2章 Servlet编程 25
2.1 Servlet概述 26
2.1.1 Servlet的基本概念 26
2.1.2 Servlet剖析 28
2.1.3 容器的功能 29
2.1.4 Servlet API 30
2.1.5 Servlet旧版本格式 31
2.1.6 有问必答 33
2.2 Servlet编程 34
2.2.1 请求和响应API 34
2.2.2 使用GET或POST请求 35
2.2.3 使用参数 37
2.2.4 请求头和响应头 38
2.2.5 文件的上传和下载 41
2.2.6 转发和重定向 43
2.2.7 实践出真知 44
2.2.8 有问必答 58
2.3 Servlet的生命周期 59
2.3.1 Servlet生命周期的几个阶段 59
2.3.2 Servlet初始化和线程 60
2.3.3 理解Servlet生命周期
对编程的意义 60
2.3.4 实践出真知 61
2.3.5 有问必答 64
第3章 属性和监听器 65
3.1 属性 66
3.1.1 属性概述 66
3.1.2 属性范围 68
3.1.3 属性的线程安全 68
3.1.4 实践出真知 71
3.1.5 有问必答 77
3.2 监听器 78
3.2.1 监听器概述 78
3.2.2 监听器编程 79
3.2.3 实践出真知 83
3.2.4 有问必答 94
第4章 会话 95
4.1 会话介绍 96
4.1.1 会话的用途 96
4.1.2 会话的工作原理 96
4.1.3 有问必答 97
4.2 Cookies 98
4.2.1 什么是Cookies 98
4.2.2 Cookies的工作原理 98
4.2.3 Cookies API 99
4.2.4 Cookies的缺点 101
4.2.5 实践出真知 101
4.2.6 有问必答 106
4.3 HttpSession 107
4.3.1 HttpSession的基本概念 107
4.3.2 会话生命周期 110
4.3.3 实践出真知 112
4.3.4 有问必答 118
4.4 URL重写 119
4.4.1 URL重写的工作原理 119
4.4.2 实践出真知 121
4.4.3 有问必答 127
第5章 JSP编程 129
第6章 编写不带Java脚本元素的
页面 171
第7章 JSTL标准标签库 213
第8章 自定义标签 249
第9章 Web应用的开发与部署 273
第10章 Web应用安全 293
第11章 过滤器编程 315
第12章 Ajax 337
第13章 数据库 361
附录 源代码使用说明 425
参考文献 427