Web了解和Servlet初识

Java Web 是用 Java 技术来解决相关 web 互联网领域的技术总和。
一丶Web 包 括:web 服务器和 web 客户端两部分。
运用最多的网络应用程 序开发体系结构可以分为 两种,一种是基于浏览器/服务器的 B/S 结构,另一 种是基于客户端/服务器的 C/S 结构。

  1. C/S 体系结构
    C/S 是 Client/Server 的缩写,即客户端/服务器结构。在这种结构中,服务 器通常采用高 性能的 PC 机或工作站,并采用大型数据库系统(如 Oracle 或 SQL Server),客户端则需要安装专用的客户端软件。这种结构可以充分利用两端 硬件环境的优势,将任务合理分配到客户端和服务器,从而降低了系统的通信开 销。在 2000 年以前,C/S 结构占据网络程序开发领域的主流。
    Web了解和Servlet初识
  2. B/S 体系结构
    B/S 是 Browser/Server 的缩写,即浏览器/服务器结构。在这种结构中,客户端不需要开发任何用户界面,而统一采用如 IE、Firefox、Chrome 等浏览器, 通过 Web 浏览器向 Web 服务器发送请求,由 Web 服务器进行处理,并将处 理结果逐级传回客户端。这种结构利用不断成熟和普及的浏览器技术实现原来需 要复杂专用软件才能实现的强大功能,从而节约了开发成本,是一种全新的软件 体系结构。这种体系结构已经成为当今应用软件的首选体系结构。
    Web了解和Servlet初识
    二丶Web 应用程序
    1. Web 应用程序的工作原理
    Web 应用程序大体上可以分为两种,即静态网站和动态网站。
    2. Web 应用技术
    1) 客户端应用的技术
    在进行 Web 应用开发时,离不开客户端技术的支持。目前,比较常用的客 户端技术包 括 HTML 语言、CSS、Flash 和客户端脚本技术。
    ✓ HTML HTML 语言是客户端技术的基础,主要用于显示网页信息,有浏览 器解释执行,它不需 要编译。
    ✓ CSS CSS 就是一种叫做样式表的技术,也有人称之为层叠样式表。在制 作网页时才有用 CSS 样式,可以有效地对页面的布局、字体、颜色、背景和其 他效果实现更加精确的控制。
    ✓ Flash Flash 是一种交互式矢量动画制作技术,它可以包含动画、音频、 视频以及应用程序, 而且 Flash 文件比较小,非常适合在 Web 上应用。
    ✓ 客户端脚本技术 客户端脚本技术是指嵌入到 Web 页面中的程序代码, 这些程序代码是一种解释性的语言,浏览器可以对客户端脚本进行解释。通过脚 本语言可以实现以编程的方式对页面元素进行控制,从而增加页面的灵活性。常 用的客户端脚本语言由 JavaScript 和 VBScript。目前, 应用最广泛的客户端脚 本语言是 JavaScript 脚本,它是 Ajax 的重要组成部分。
  1. 服务器端应用的技术
    在开发动态网站时,离不开服务器端技术,比较传统和经典的 Web 服务器 端技术主要 有:CGI、ASP、SERVLET/JSP、PHP 等。
    ✓ JSP Java Server Page 简称 JSP。JSP 是以 Java 为基础开发的,所以它沿 用 Java 强大的 API 功 能。JSP 页面中的 HTML 代码用来显示静态内容部分, 嵌入到页面中的 Java 代码与 JSP 标记 用来生成动态的内容。JSP 允许程序员 编写自己的标签库来完成应用程序的特定要求。JSP 可以被预编译,提高了程序 的运行速度。另外,JSP 开发的应用程序经过一次编译后,便可 随时随地运行。 所以在绝大部分系统平台中,代码无需做修改即可在支持 JSP 的任何服务器中 运行。
    ✓ Servlet Servlet 是 Java 早期的 Web 服务器端技术,用 Java 语言编写。 无论是从原理和编程方式 上,几乎就是 CGI 的翻版,具有 CGI 的缺点和优点, 与 CGI 主要不同的是,Servlet 对每个请求都是单独启动一个线程,而不是进程。

三、Tomcat

  1. 什么是 Tomcat
    Tomcat 是一个符合 JavaEE WEB 标准的最小的 WEB 容器,所有的 JSP 程 序一定要有 WEB 容器的支持才能运行,而且在给定的 WEB 容器里面都会支持 事务处理操作。
    Tomcat 简单的说就是一个运行 Java 的网络服务器,底层是 Socket 的一个程序,它也是 JSP 和 Servlet 的一个容器。 Tomcat 是 Apache 软件基 金会(Apache Software Foundation)的 Jakarta 项目中的一个核心项目,由 Apache、Sun 和其他一些公司及个人共同开发而成。
    因为 Tomcat 技术先进、性能稳定,而且免费,因而深受 Java 爱 好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的 Web 应用服 务器。

2.打开浏览器输入 http://localhost:8080/访问
3. Eclipse 关联 Tomcat
WindowpreferencesServerRuntime Environmentaddapache-tomcat-8.0.23

四、HTTP 协议
HTTP 协议(Hypertext Transfer Protocol, 超文本传输协议),是一个客户端请 求和回应的 标准协议,这个协议详细规定了浏览器和万维网服务器之间互相通 信的规则。用户输入地址 和端口号之后就可以从服务器上取得所需要的网页信 息。
通信规则规定了客户端发送给服务器的内容格式,也规定了服务器发送给客户端的内容 格式。客户端发送给服务器的格式叫“请求协议”;服务器发送给客 户端的格式叫“响应协议”

  1. 浏览器中的书写格式
    在 B/S 体系架构中,客户端都统一成了浏览器,要请求服务器端资源需要 通过浏览器进行,此时由浏览器将我们给出的请求解析为满足 HTTP 协议的格 式并发出。则我们发出的请求格式需要按照浏览器规定的格式来书写,在浏览器 中书写格式如下:
    Web了解和Servlet初识
  2. HTTP 协议的主要特点
    1.)支持客户/服务器模式。
    2.)简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求 方法常用的 有 GET、POST。每种方法规定了客户与服务器联系的类型不同。由 于 HTTP 协议简单,使得 HTTP 服务器的程序规模小,因而通信速度很快。
    3.)灵活:HTTP 允许传输任意类型的数据对象。正在传输的类型由 Content-Type 加以 标记。
    4.)HTTP1.1 支持持续连接。通过这种连接,就有可能在建立一个 TCP 连接 后,发送请求并得到回应,然后发送更多的请求并得到更多的回应.通过把建立和 释放 TCP 连接的开销分摊到多个请求上,则对于每个请求而言,由于 TCP 而造 成的相对开销被大大地降低了。而且, 还可以发送流水线请求,也就是说在发送 请求 1 之后的回应到来之前就可以发送请求 2.也可以认为,一次连接发送多个 请求,由客户机确认是否关闭连接,而服务器会认为这些请求分别来自不同的客 户端。
    5.)无状态:HTTP 协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样 可能导致每次连接传送 的数据量增大。另一方面,在服务器不需要先前信息时 它的应答就较快。
  3. HTTP 之 URL
    http(超文本传输协议)是一个基于请求与响应模式的、应用层的协议,常 基于 TCP 的连接方式,绝大多数的 Web 开发,都是构建在 HTTP 协议之上的 Web 应用。
    HTTP URL (URL 是一种特殊类型的 URI,包含了用于查找某个资源的足够的 信息)的格式 如下:
    http://host[":"port][abs_path]
    http 表示要通过 HTTP 协议来定位网络资源;host 表示合法的 Internet 主 机域名或 者 IP 地址;port 指定一个端口号,为空则使用缺省端口 80;abs_path 指定请求资源的 URI; 如果 URL 中没有给出 abs_path,那么当它作为请求 URI 时,必须以“/”的形式给出,通常 这个工作浏览器自动帮我们完成。
  4. HTTP 请求
    http 请求由三部分组成,分别是:请求行、请求头、请求正文
    通过 chrome 浏览器, F12 Network 查看
    请求行以一个方法符号开头,以空格分开,后面跟着请求的 URI 和协议的 版本,格式如 下:Method Request-URI HTTP-Version CRLF 其中 Method 表示请 求方法;Request-URI 是一个统一资源标识符;HTTP-Version 表示请 求的 HTTP 协议版本;CRLF 表示回车和换行
  5. HTTP 响应
    在接收和解释请求消息后,服务器返回一个 HTTP 响应消息。HTTP 响应也 是由三个部分组成,分别是:状态行、消息报头、响应正文
    格式 :状态行 响应头 1 响应头 2 … 响应空行 响应体
  6. 消息头
    HTTP 消息由客户端到服务器的请求和服务器到客户端的响应组成。

请求头
请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信 息。
Refere:该请求头指明请求从哪里来

响应头
响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务 器的信息和 对 Request-URI 所标识的资源进行下一步访问的信息。
Location:Location 响应报头域用于重定向接受者到一个新的位置。Location 响应报头域,常用在更换域名的时候。response.sendRedirect(“http://www.shsxt.com”);
Refresh:自动跳转(单位是秒),可以在页面通过 meta 标签实现,也可在 后台实现。

五、第一个 Servlet 实现
Servlet 是 Server 与 Applet 的缩写,是服务端小程序的意思。使用 Java 语 言编写的服务 器端程序,可以像生成动态的 WEB 页,Servlet 主要运行在服务 器端,并由服务器调用执行, 是一种按照 Servlet 标准来开发的类。 是 SUN 公 司提供的一门用于开发动态 Web 资源的技 术。(言外之意:要实现 web 开发, 需要实现 Servlet 标准)

Servlet 本质上也是 Java 类,但要遵循 Servlet 规范进行编写,没有 main()方法,它的创 建、使用、销毁都由 Servlet 容器进行管理(如 Tomcat)。(言外之 意:写自己的类,不用写 main 方法,别人自动调用)

Servlet 是和 HTTP 协议是紧密联系的,其可以处理 HTTP 协议相关的所有 内容。这也是 Servlet 应用广泛的原因之一。
提供了 Servlet 功能的服务器,叫做 Servlet 容器,其常见容器有很多,如 Tomcat, Jetty, WebLogic Server, WebSphere, JBoss 等等。

  1. 实现
    1)、创建动态 web 项目
    2)、 新建类
    3)、 实现 Servlet 规范
    实现 Servlet 规范,即继承 HttpServlet 类,并到如响应的包,该类中已经 完成了通信的 规则,我们只需要进行业务的实现即可。
    4)、 重写 service 方法
    满足 Servlet 规范只是让我们的类能够满足接收请求的要求,接收到请求后 需要对请求进 行分析,以及进行业务逻辑处理,计算出结果,则需要添加代码, 在规范中有一个叫做 service 的方法,专门用来做请求处理的操作,业务代码则 可以写在该方法中。
    5)、 配置 web.xml
    在完成好了一切代码的编写后,还需要向服务器说明,特定请求对应特定资 源,此时通过 一个名叫 web.xml 的配置文件完成。
    6)、 发布项目并启动服务
    到此,需要编写和配置的地方已经完成,项目已经完整了,但是如果需要外 界能够访问, 还需要将项目发布到服务器上并运行服务器。
    7)、 启动项目
    8)、 访问并查看结果
    在项目正确发布到服务器上之后,用户即可通过浏览器访问该项目中的资源。注意 url 的 格式正确,tomcat 的端口为 8080

  2. 工作原理
    Web了解和Servlet初识
    执行过程
    客户端发出请求 根据 web.xml 文件的配置,找到对应的 读取中的值 找到 对应的 找到该 class 并加载执行该 class,返回结果 由 Web 服务器将结果响 应给客户端

  3. Servlet 的生命周期
    Servlet 没有 main()方法,不能独立运行,它的运行完全由 Servlet 引擎来控 制和调度。 所谓生命周期,指的是 servlet 容器何时创建 servlet 实例、何时调 用其方法进行请求的处理、 何时并销毁其实例的整个过程。(此处讨论默认的生 命周期)
     实例和初始化时机
    当请求到达容器时,容器查找该 servlet 对象是否存在,如果不存在,则会 创建实例并 进行初始化。
     就绪/调用/服务阶段
    有请求到达容器,容器调用 servlet 对象的 service()方法,处理请求的方法在 整个声明周 期中可以被多次调用;
    HttpServlet 的 service()方法,会依据请求方式来调用 doGet()或者 doPost() 方法。但是, 这两个 do 方法默认情况下,会抛出异常,需要子类去 override。
     销毁时机
    当容器关闭时(应用程序停止时),会将程序中的 Servlet 实例进行销毁。
    上述的生命周期可以通过 Servlet 中的生命周期方法来观察。在 Servlet 中 有三个生命周 期方法,不由用户手动调用,而是在特定的时机有容器自动调用, 观察这三个生命周期方法 即可观察到 Servlet 的生命周期。

init 方法,在 Servlet 实例创建之后执行(证明该 Servlet 有实例创建了)

service 方法,每次有请求到达某个 Servlet 方法时执行,用来处理请求(证 明该 Servlet 进行 服务了)

destroy 方法,Servlet 实例销毁时执行(证明该 Servlet 的实例被销毁了)
Servlet 的生命周期,简单的概括这就分为四步:servlet 类加载–>实例化–> 服务–>销毁。下面我们描述一下 Tomcat 与 Servlet 是如何工作的,看看下面的 时序图.
Web了解和Servlet初识
1、Web Client 向 Servlet 容器(Tomcat)发出 Http 请求
2、Servlet 容器接收 Web Client 的请求
3、Servlet 容器创建一个 HttpRequest 对象,将 Web Client 请求的信息封 装到这个对象 中
4、Servlet 容器创建一个 HttpResponse 对象
5、Servlet 容器调用 HttpServlet 对象的 service 方法,把 HttpRequest 对 象与 HttpResponse 对象作为参数,传给 HttpServlet 对象
6、HttpServlet 调用 HttpRequest 对象的有关方法,获取 Http 请求信息
7、HttpServlet 调用 HttpResponse 对象的有关方法,生成响应数据
8、Servlet 容器把 HttpServlet 的响应结果传给 Web Client

  1. Servlet 的配置
    Servlet 除了配置基本的访问信息,还可以配置初始化参数,自启动等,并 且一个 Servlet 可以配置多个访问路径(),还可以使用通配符“”。
    servlet-name:Servlet 对象的名称
    servlet-class:创建 Servlet 对象所要调用的类
    param-name:参数名称
    param-value:参数值
    load-on-startup:Servlet 容器启动时加载 Servlet 对象的顺序
    servlet-mapping/servlet-name:要与 servlet 中的 servlet-name 配置节内容对应
    url-pattern:客户访问的 Servlet 的相对 URL 路径
    说明: url-pattern 可以配多个(一个 servlet 可以通过多个 url-pattern 访 问)当多个 servlet 配置成了同一个 url-pattern,报错 java.lang.reflect.InvocationTargetExceptionion 通配符 “
    ”只能放在最前面或最后 面,不能放中间且不能单独存在(以/分割的,不能和单词组成整体)。越精确越 优先。常规配置即可。