Servlet学习笔记-Servlet工作原理和过程

Servlet学习笔记-Servlet工作原理和过程1、前言  JavaServlet技术简称Servlet技术,是Java开发Web应用的底层技术。由Sun公司于1996年发布,用来代替CGI——当时生成Web动态内容的主流技术。官方文档对Servlet的概述,请参考《Servlet的概述》。2、关键词ServletServlet是JavaEE规范的一种,主要是为了扩展Java作为Web服务的功能。为了方便第三方准守这种规范,Sun公…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

1、前言

  Java Servlet技术简称Servlet技术,是Java开发Web应用的底层技术。由Sun公司于1996年发布,用来代替CGI——当时生成Web动态内容的主流技术。官方文档对Servlet的概述,请参考《Servlet的概述》

2、关键词
  1. Servlet
    Servlet是JavaEE规范的一种,主要是为了扩展Java作为Web服务的功能。为了方便第三方准守这种规范,Sun公司(现在Oracle公司)提供了一系列相关的接口,即Servlet API。
  2. Servlet应用
    直接或间接实现了Servlet接口并且需要运行在Servlet容器中的Java程序,主要用来生成动态的Web页面。Servlet应用不能独立于运行,必须被部署到Servlet容器。
  3. Servlet容器
    Servlet容器(Servlet引擎)是Web服务器或应用程序服务器的一部分,用于在发送的请求和响应之上提供网络服务,解码基于MIME的请求,格式化基于MIME的响应,即Servlet容器用来接收客户端请求,处理协议、请求内容等,初始化Servlet实例(只需要第一次初始化)并调用Servlet应用的对应方法,然后Servlet应用返回处理结果,经Servlet容器再返回到用户客户端。
  4. Tomcat容器
    Tomcat容器,又叫应用服务器,也有人称之为Servlet容器。其实,本质上,Tomcat容器具有Servlet容器的功能,是Servlet容器的一种开源实现,但是它又不仅仅只是Servlet容器。
    在这里插入图片描述
3、Servlet API的包结构

  相关文档可以参考《Servlet 3.0 API 》。通过文档我们可以知道,在Servlet规范中,一种有4个java包,分别是:

  • javax.servlet
    该java包下面主要包含了定义了Servlet和Servlet容器之间契约的类和接口。
  • javax.servlet.annotation
    Servlet体系中定义的注解。包括了Servlet、Filter、Listener等注解。
  • javax.servlet.descriptor
    包含为Web应用的配置信息提供编程式访问的类型,即提供了对通过<jsp-config> 、<jsp-property-group> 、<taglib> 等标签进行的配置信息的访问方式。
  • javax.servlet.http
    该包下的类,可以说是在javax.servlet包中类和接口的契约的基础上,又基于http协议的进一步的延伸,即定义了Http Servlet和Servlet容器之间契约的类和接口。
4、Servlet 类结构

在这里插入图片描述

  在javax.servlet包下的主要类型:
在这里插入图片描述
  在javax.servlet.http包下的主要类型:
在这里插入图片描述

注:截图来至《Servlet+JSP和Spring+MVC初学指南》

  在javax.servlet.descriptor包下的接口和类:
在这里插入图片描述
  在javax.servlet.annotation包下的注解类:
在这里插入图片描述

没有合适的图片,直接上截图。

5、Servlet接口

  Servlet接口是Servlet技术的核心,所有的Servlet类都必须直接或者间接实现Servlet接口。Servlet接口定义了Servlet类与Servlet容器之间的契约,即通过Servlet接口约定了当Servlet容器把Servlet类的实例加载到容器后,如何调用Servlet实例的方法。

1、Servlet接口定义的方法
package javax.servlet;

import java.io.IOException;

public interface Servlet { 
   
    public void init(ServletConfig config) throws ServletException;
    public ServletConfig getServletConfig();
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException;
    public String getServletInfo();
    public void destroy();
}

  Servlet生命周期的方法:
  在Servlet接口的方法中,init( ),service( ),destroy( )是Servlet生命周期的方法。代表了Servlet从“出生”到“工作”再到“死亡 ”的过程,在后面会具体的分析Servlet的工作过程和工作原理。

  剩下的两个方法,作用分别如下:

  • getServletInfo(),这个方法会返回Servlet的一段描述,可以返回一段字符串。
  • getServletConfig(),这个方法会返回由Servlet容器传给init()方法的ServletConfig对象。
6、Servlet的工作过程和原理

  Servlet工作过程中,涉及到了客户端(浏览器)、Servlet容器、Servlet应用三种角色。大致过程如下所示:

  首先,由客户端发起请求。

  然后,Servlet容器接收到客户端的请求,解析请求协议和数据,如果servlet程序还没有被加载,就会执行加载过程并调用service()方法,否则直接调用service()方法。

  其中,加载Servlet程序的过程:根据Servlet容器与Servlet程序间的契约,当有请求过来时,如果Servlet程序还没有被载入Servlet容器中,这个时候Servlet容器就会通过调用init()方法将Servlet类载入内存,并产生Servlet实例。在调用init()方法的时候,Servlet容器会传入一个ServletConfig对象进来从而对Servlet对象进行初始化。该过程只会被执行一次,即在一个应用程序中,每类Servlet程序只能有一个实例。其中,在ServletConfig对象中还隐藏一个ServletContext实例对象,这个ServletContext实例对象就表示了Servlet程序在容器中的上下文环境。

  而,service()方法执行的过程:首先由Servlet容器解析请求参数并封装成一个ServletRequest和ServletResponse对象。其中,ServletRequest中封装了当前的Http请求,开发者可以操作ServletRequest对象获取用户的请求数据;ServletResponse封装了当前用户的Http响应,开发者可以操作ServletResponse对象把响应内容发回给用户。Servlet容器把ServletRequest和ServletResponse作为参数传递给了service()方法,通过执行service()方法,实现响应的逻辑,并通过ServletResponse对象返回内容到客户端。

  最后,如果关闭Servlet容器时,这个时候,Servlet容器就会根据契约,调用destroy()方法,该方法一般都用来编写一些释放资源的逻辑。

7、Servlet的工作过程涉及到的实例

  根据前面分析的Servlet的工作过程,我们可以了解到,在这个过程中用到了以下几类对象:

  • ServletRequest 封装了当前的Http请求,开发者可以操作ServletRequest对象获取用户的请求数据
  • ServletResponse 封装了当前用户的Http响应,开发者可以操作ServletResponse对象把响应内容发回给用户
  • ServletConfig 封装了初始化Serlvet程序需要的信息,同时还保存了一个ServletContext实例的引用。
  • ServletContext 封装了Servlet程序在Servlet容器中的上下文环境

  后续内容再具体分析这几个接口和类的代码和方法。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/185819.html原文链接:https://javaforall.net

(0)
上一篇 2022年10月5日 上午6:46
下一篇 2022年10月5日 上午7:00


相关推荐

  • FreeSync是什么

    FreeSync是什么FreeSync由AMD开发,是一种动态刷新率功能,通过嵌入式和外部DisplayPort面板实现,部分AMDGPU中的FreeSync技术解决了处理器和显示器之间的通信问题,消除了图像撕裂和波动,从而轻松实现流畅的游戏体验。于2014年首次宣布与Nvidia的专有G-Sync竞争。AMD已与VESA(视频电子标准协会)合作,将DisplaySync的支持添加到DisplayPort1.2a标准,以及后来的HDMI,然后将其用于FreeSync技

    2022年6月10日
    285
  • 驱动程序vmci.sys版本不正确。请尝试重新安装 VMware

    驱动程序vmci.sys版本不正确。请尝试重新安装 VMware

    2022年2月22日
    25
  • Cocos2D &amp; SpriteBuilder Developer Guide「建议收藏」

    Cocos2D &amp; SpriteBuilder Developer Guide

    2022年1月19日
    53
  • 栈溢出攻击

    栈溢出攻击什么是栈溢出攻击向缓冲器填入过多的数据 超出边界 导致数据外溢 同时利用缓冲器溢出改写数据 改变程序执行流程 执行 shellcode 之所以会有缓冲区溢出的可能 主要是因为栈空间内保存了函数的返回地址 该地址保存了函数调用结束后后续执行的指令的位置 对于计算机安全来说 该信息是很敏感的 如果有人恶意修改了这个返回地址 并使该返回地址指向了一个新的代码位置 程序便能从其它位置继续执行

    2026年3月18日
    2
  • 2022.3.5 PAT甲级 2022年春季考试 89分「建议收藏」

    2022.3.5PAT甲级2022年春季考试89分7-1SimpleLieDetection(20分)简单字符串问题,注意连续相同子段和连续上升子段的细节。#include<iostream>#include<cstdio>#include<string>usingnamespacestd;intmain(){ intn,t,k; strings; cin>>n>>t>>k; wh

    2022年4月11日
    83
  • RS232、RS485、RS422、RJ45接口,终于弄明白了!

    RS232、RS485、RS422、RJ45接口,终于弄明白了!原文地址 https www sohu com a 通讯端口都是串口 在以下几个方面有区别 1 通讯距离 RS232 口最大通讯距离是 15 米 而 RS422 485 最大通讯距离是 1200 米 2 所连接设备个 RS232 只能连接一个设备 而 RS485 可以连接多个设备 3 端口的定义 RS232 是标准接口 为 D 形 9 针头 所连接设备的接口的信号定义是一样的 其信号定义如下 而 RS422 RS485 为非标准接口 一般为 15 针串行接口 也有使用 9 针接口的 每

    2026年3月17日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号