注:该系列笔记是用于我在 《Servlet 与 JSP 核心编程》这本书中的学习笔记,无其他意思,侵权请联系2082045221@qq.com删除。
第一章内容较少,所以暂时有用的笔记也不多。
1.1、Servlet 的功用:
Servlet 是运行在 Web 服务器或应用服务器上的 Java 程序,它是一个,负责连接来自 Web 浏览器或其他 HTTP 客户程序的请求和 HTTP 服务器上的数据库或应用程序。Servlet 的工作是执行下面的任务,如图 1.1 所示:
-
读取客户发送的显式数据。
最终用户一般在网页的 HTML 表单中输入的这些数据。然而,数据还有可能来自于 Applet 或定制的 HTTP 客户程序。
-
读取由浏览器发送的隐式请求数据。
图 1.1 中显示了一条从客户端到 Web 服务器(Servlet 和 JSP 所在的层)的单箭头,但实际上从客户端传送到 Web 服务器的数据有两种,它们分别为用户在表单中输入的显式数据,以及后台的 HTTP 信息。两种数据都很重要。HTTP 信息包括 Cookie、浏览器所能识别的媒体类型和压缩模式等。
-
生成结果。
这个过程可能需要访问数据库、执行 RMI 或 EJB 调用 、调用 Web 服务,或者直接计算得出对应的响应。实际的数据可能存储在关系型数据库中。该数据库可能不理解 HTTP ,或者不能返回 HTML 形式的结果,所以 Web 浏览器不能直接与数据库进行会话。及时能够做到这一点,为了安全,也不希望让它这么做。对于大多数其他应用程序,也存在类似的问题。因此,需要 Web 中间层从 HTTP流中提取输入数据,与应用程序会话,并将结果嵌入到文档中。
-
向客户发送显式数据(即文档)。
这个文档可以用各种发送,包括文本(HTML 或 XML),二进制(GIF 图),甚至可以是建立在其他底层格式,如 gzip。但是,到目前为止,HTML 是最常用的格式,故而 Servlet 和 JSP 的重要任务之一就是将结果包装到 HTML 中。
-
发送隐式的 HTTP 响应数据。
图 1.1 中显示了一条从 Web 中间层(Servlet 或 JSP 页面)到客户端的单箭头。但是,实际发送的数据有两种:文档本身,以及后台的 HTTP 信息。同样,两种数据对开发来说都是至关重要的。HTTP 响应数据的发送过程涉及告知浏览器或其他客户程序所返回文档的类型(例如 HTML),是指 Cookie 和缓存参数,以及其他类似的任务。
1.2、动态构建网页的原因:
实时构建网页的理由:
- 网页基于客户发送的数据。
- 网页由频繁改变的数据导出。
- 网页中使用了来自公司数据库或其他服务器端数据源的信息。
理论上讲,Servlet 并非只用于处理 HTTP 请求的 Web 服务器或应用服务器,它同样可以用于其他类型的服务器。而且,用于会话启动协议(Session Initiation Protocol, SIP)服务器的 Servlet API 最近已经被标准化。但是在实践中,Servlet 的这种用法尚不流行,所以以下都只说 HTTP Servlet 。
1.3、Servlet 代码初探:
现在,先快速地观察一个简单的 Servlet ,以对它的复杂程度有一个基本的了解。
首先,给一个简单的 Servlet 代码,它向客户端输出了一个简单的 HTML 页面,不过需要注意以下几点:
- 它是常规的 Java 代码。
- 它有不熟悉的重要语句。
- 它对标准的类(HttpServlet)进行了扩展。
- 它覆盖(override)了doGet方法。
package com.firstweb.study01;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
String docType =
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0" +
"Transitional//EN\">\n";
out.println(docType +
"<HTML>\n" +
"<HEAD><TITLE>Hello</TITLE><HEAD>\n" +
"<BODY BGCOLOR=\"#FDF5E6\">\n" +
"<H1>Hello</H1>\n" +
"</BODY></HTML>");
}
}
输出结果如下:
1.4、JSP 的作用:
为了简化起见,某种程度上,可以将 Servlet 看作是含有 HTML 的 Java 程序:将 JSP 看作是含有 Java 代码的 HTML 页面。