一,servlet定义

        Servlet(Server Applet)是Java Servlet的简称,称为服务器端小程序、小服务程序或服务连接器,是一种使用 Java 语言来开发动态网站的技术(用Java编写的服务器端程序),具有独立于平台和协议的特性,Servlet是sun公司提供的一门用于开发动态web资源的技术。Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤:
        1、编写一个Java类,实现servlet接口。(通常我们也把实现了servlet接口的java程序,称之为Servlet)
        2、把开发好的Java类部署到web服务器中。

        狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。即:
        1、Serviet是JavaEE规范之一。规范就是接口
        2、Servlet是JavaWeb三大组件之一。三大组件分别是:Servlet程序、Filter过滤器、Listener监听器。
        3、Servlet是运行在服务器上的一个 java小程序,它可以接收客户端发送过来的请求,并响应数据给客户端,是一种独立于操作系统和网络传输协议的服务器端的Java应用程序,用来拓展服务器的功能,生成动态的web页面。

注意:Servlet不是从命令行启动的,而是由包含Java虚拟机的Web服务器进行加载 ;(没有main方法)

二,Servlet实现过程

        最早支持 Servlet 技术的是 JavaSoft 的 Java Web Server。此后,一些其它的基于 Java 的 Web Server 开始支持标准的 Servlet API。Servlet 的主要功能在于交互式地浏览和修改数据,生成动态 Web 内容。这个过程为:
         1、客户端发送请求至服务器端;
         2、服务器将请求信息发送至 Servlet;
         3、Servlet 生成响应内容并将其传给服务器。
         4、响应内容动态生成,通常取决于客户端的请求;服务器将响应返回给客户端。

        Servlet 看起来像是通常的 Java 程序。Servlet 导入特定的属于 Java Servlet API 的包。因为是对象字节码,可动态地从网络加载,可以说 Servlet 对 Server 就如同 Applet对 Client 一样,但是,由于 Servlet 运行于 Server 中,它们并不需要一个图形用户界面。从这个角度讲,Servlet 也被称为 FacelessObject。

        一个 Servlet 就是 Java 编程语言中的一个类,它被用来扩展服务器的性能,服务器上驻留着可以通过“请求-响应”编程模型来访问的应用程序。虽然 Servlet 可以对任何类型的请求产生响应,但通常只用来扩展 Web 服务器的应用程序。

三,Servlet封装框架

        Java 可以处理 HTTP 请求、访问数据库、生成 HTML 代码,也可以完全使用原生 Java 来开发动态网站。但是,会非常麻烦,需要自己解析 HTTP 请求的报头,需要自己分析用户的请求参数,需要自己加载数据库组件,需要 ... 。(从零造轮子)

        正是基于这种原因,Java 官方后来推出了 Servlet 技术,它对开发动态网站需要使用的原生 Java API 进行了封装,形成了一套新的 API,称为 Servlet API。所以Servlet 基于 Java,可以使用几乎全部的 Java API,它的功能异常强大,完全可以胜任企业级开发,能够处理那些高并发、大吞吐量、业务逻辑复杂的应用场景。Servlet 规范其实就是对 HTTP 协议做面向对象的封装。

        Servlet 只是一套 Java Web 开发的规范,或者说是一套 Java Web 开发的技术标准。Servlet 规范是开放的,除了 Sun 公司,其它公司也可以实现 Servlet 规范,目前常见的实现了 Servlet 规范的产品包括 Tomcat、Weblogic、Jetty、Jboss、WebSphere 等,它们都被称为“Servlet 容器”。Servlet 容器用来管理程序员编写的 Servlet 类。

        Spring MVC 是基于 servlet API 构建的原始 web 框架,所以也可以使用原生的 Servlet API。简单的理解springmvc框架是对servlet的再封装和扩展。虽然已经用到servlet技术了,但是你写的代码都是springmvc的代码标准。

        Springboot本身默认封装了tomcat,所以本质上还是用到了servlet技术。只不过是通过框架继续使用。虽然已经用到servlet技术了,但是你写的代码都是新框架的代码标准。springboot是为了简化各个java框架之间的配置应运而生的。所以springboot不会特别要求开发者必须使用特定的框架组合。你既可以使用springframework、springmvc、mybatis;也可以使用springframework、springmvc、jpa等等等各种方案。

四,JSP

        Servlet 是第一代 Java Web 开发技术,它将 HTML 代码以字符串的形式向外输出,编写 HTML 文档就是在拼接字符串,非常麻烦,所以 Java 官方又推出了第二代 Web 开发技术——JSP

        JSP 才是现代化的 Web 开发技术,它允许 HTML 代码和 JSP 代码分离,让程序员能够在 HTML 文档中直接嵌入 JSP 代码。现在没有人直接使用 Servlet 开发动态网站,大家都转向了 JSP 阵营。但是 JSP 依赖于 Servlet,用户访问 JSP 页面时,JSP 代码会被翻译成 Servlet 代码,最终,HTML 代码还是以字符串的形式向外输出的。您看,JSP 只是在 Servlet 的基础上做了进一步封装。

         JSP 代码可以调用 Servlet 类,程序员可以将部分功能在 Servlet 中实现,然后在 JSP 中调用即可。

        总之,Servlet 是 JSP 的基础,Servlet 虽然不直接面向用户,但是它依然是 JSP 的后台支撑,想玩转 JSP,必须先玩转 Servlet。学习 JSP 的正确顺序是:Java --> Servlet --> JSP。

五,Servlet任务

Servlet 执行以下主要任务:

  • 读取客户端(浏览器)发送的显式的数据。这包括网页上的 HTML 表单,或者也可以是来自 applet 或自定义的 HTTP 客户端程序的表单。
  • 读取客户端(浏览器)发送的隐式的 HTTP 请求数据。这包括 cookies、媒体类型和浏览器能理解的压缩格式等等。
  • 处理数据并生成结果。这个过程可能需要访问数据库,执行 RMI 或 CORBA 调用,调用 Web 服务,或者直接计算得出对应的响应。
  • 发送显式的数据(即文档)到客户端(浏览器)。该文档的格式可以是多种多样的,包括文本文件(HTML 或 XML)、二进制文件(GIF 图像)、Excel 等。
  • 发送隐式的 HTTP 响应到客户端(浏览器)。这包括告诉浏览器或其他客户端被返回的文档类型(例如 HTML),设置 cookies 和缓存参数,以及其他类似的任务。

六,Servlet组成

        一个最基本的 Java Web 项目使用所需的 jar 包只需要一个 servlet-api.jar ,这个 jar 是由2个包组成:javax.servlet和javax.servlet.http,在javax.servlet包中定义了所有的Servlet类都必须实现或扩展的的通用接口和类,在javax.servlet.http包中定义了支持HTTP通信协议的HttpServlet类工具类,Servlet的框架的核心是javax.servlet.Servlet接口,所有的Servlet都必须实现这一接口。 

        Servlet 是 J2EE 最重要的一部分,J2EE 的其他方面的内容择需采用。而 Servlet 规范你需要掌握的就是 servlet 和 filter 这两项技术。绝大多数框架不是基于 servlet 就是基于 filter,如果它要在 Servlet 容器上运行,就永远也脱离不开这个模型。

        Servlet被设计成请求驱动(根据请求来调用Servlet)。Servlet的请求可能包含多个数据项,当Web容器接收到某个Servlet请求时,Servlet把请求封装成一个HttpServletRequest对象,然后把对象传给Servlet的对应的服务方法。

七,Servlet创有三种方式

直接实现 Servlet 接口比较麻烦,需要实现很多方法,所以 Servlet 规范又提供了两个抽象类,分别是 GenericServlet 类和 HttpServlet 类,它们都实现了 Servlet 接口的很多常用功能。和 GenericServlet 类相比,HttpServlet 类更加方便,所以实际开发中一般都继承自 HttpServlet 类。Servlet 简介 | 菜鸟教程

        1、实现 Servlet 接口
        2、继承 GenericServlet 类
        3、继承 HttpServlet 方法

八,Servlet工作原理

1. Servlet运行原理

        ①. WebApplication的标准目录结构:

                webapp/WEB-INF/classes 文件夹下是项目中用到的类文件,均由JDK编译成了.class文件

                webapp/WEB-INF/lib文件夹是我们项目中引用的jar包

                webapp/WEB-INF/Web.xmls是整个web应用程序的配置文档。

        ②. Tomcat解析URL

                a) 首先来看URL中包含的信息:”协议” + “端口号” + “路径(项目名称+文件路径)”

                        Tomcat启动后,监听我们的8080端口,当有Url请求发过来之后,解析出项目名称 abingtest,然后到webapps目录下搜索到该项目文件夹。

                b) 项目文件找到后,开始寻找类文件。

                        这个时候Tomcat去Web.xml文件中寻找 配置节中包含”servlet/FirstServlet”字符串,进而找到该类文件所在的位置。

        ③. Servelt中的doGet() 和 doPost() 方法

                我们写的FirstServlet 继承了HttpServlet ,重写了HttpServlet中的doGet() 方法,HttpServlet中还有一个doPost()方法。这两个方法都是用来处理Http请求的。Servlet会根据我们提交表单的方法 (method=post/get)调用service方法来自动选择。

2、一个servlet运行流程图:

九,Servlet容器

Servlet容器为JavaWeb应用提供运行时环境,它负责管理Servlet和JSP的生命周期,以及管理它们的共享数据。
Servlet容器也称为JavaWeb应用容器,或者Servlet/JSP容器。
目前最流行的Servlet容器软件包括:Tomcat、Resin、J2EE服务器(如Weblogic)中也提供了内置的Servlet容器

十,Servlet生命周期

        Servlet 的生命周期主要为三个步骤初始化 init() 、业务处理 service() 、 销毁 destory(); 在Servlet接口中定义了5个方法,其中有3个方法代表了Servlet的生命周期。

  1、init():在Servlet的生命周期中,仅执行一次init()方法。它是在服务器装入Servlet时执行的,负责初始化Servlet对象。可以配置服务器,以在启动服务器或客户机首次访问  Servlet时装入Servlet。无论有多少客户机访问Servlet,都不会重复执行init()。

  2、service():它是Servlet的核心,负责响应客户的请求。每当一个客户请求一个HttpServlet对象,该对象的Service()方法就要调用,而且传递给这个方法一个“请求”    (ServletRequest)对象和一个“响应”(ServletResponse)对象作为参数。在HttpServlet中已存在Service()方法。默认的服务功能是调用与HTTP请求的方法相应的do功能。

  3、destroy(): 仅执行一次,在服务器端停止且卸载Servlet时执行该方法。当Servlet对象退出生命周期时,负责释放占用的资源。一个Servlet在运行service()方法时可能会  产生其他的线程,因此需要确认在调用destroy()方法时,这些线程已经终止或完成。

十一,URL和httpHTTP和URL详细分析_行走在软件开发路上的人的博客-CSDN博客_url和http

        HTTP:(Hypertext transfer protocol)超文本传输协议,是用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议。

        URL:(Uniform Resource Locator)统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。

        url和http不能混合而谈,二者是两码事,url是一种资源定位的规则符号,而http则是网络信息传递的其中一个协议,http打比方就像英语交流一样,ftp下载就像法语交流一样,每一个都对应相应的用途,而url则是规范网络主机的ip,域名的一套规则

        由以冒号隔开的两大部分组成,并且在 URL 中的字符对大写或小写没有要求。URL 的一般形式是:(主机部分可以是IP地址或者域名,如果是域名的话,域名最终会被域名服务器解析成IP地址)

         HTTP协议中的请求和响应就是对应了 HttpServletRequest 和 HttpServletResponse 这两个接口。可以通过 HttpServletRequest 来获取所有请求相关的信息,包括 URI、Cookie、Header、请求参数等等,别无它路。因此当你使用某个框架时,你想获取HTTP请求的相关信息,只要拿到 HttpServletRequest 实例即可。 

        而 HttpServletResponse接口是用来生产 HTTP 回应,包含 Cookie、Header 以及回应的内容等等。

 HTTP的请求方式包括DELETE、GET、OPTIONS、POST、PUT和TRACE,在HttpServlet类中分别提供了相应的服务方法,它们是doDelete()、doGet()、doOptions()、doPost()、doPut()和doTrace()。不过目前很多服务器只支持get和post请求,所以通常自定义的Servlet中只需要重写doPost和doGet方法即可。

十二,SpringBoot中使用Servlet的两种方式

1.方式一(使用注解)
2.方式二(定义配置类)

SpringBoot——SpringBoot中使用Servlet的两种方式_张起灵-小哥的博客-CSDN博客_springboot 添加servlet

更多推荐

java框架 - Servlet基础框架