大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
1、前言
Java Servlet技术简称Servlet技术,是Java开发Web应用的底层技术。由Sun公司于1996年发布,用来代替CGI——当时生成Web动态内容的主流技术。官方文档对Servlet的概述,请参考《Servlet的概述》。
2、关键词
- Servlet
Servlet是JavaEE规范的一种,主要是为了扩展Java作为Web服务的功能。为了方便第三方准守这种规范,Sun公司(现在Oracle公司)提供了一系列相关的接口,即Servlet API。 - Servlet应用
直接或间接实现了Servlet接口并且需要运行在Servlet容器中的Java程序,主要用来生成动态的Web页面。Servlet应用不能独立于运行,必须被部署到Servlet容器。 - Servlet容器
Servlet容器(Servlet引擎)是Web服务器或应用程序服务器的一部分,用于在发送的请求和响应之上提供网络服务,解码基于MIME的请求,格式化基于MIME的响应,即Servlet容器用来接收客户端请求,处理协议、请求内容等,初始化Servlet实例(只需要第一次初始化)并调用Servlet应用的对应方法,然后Servlet应用返回处理结果,经Servlet容器再返回到用户客户端。 - 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容器中的上下文环境
后续内容再具体分析这几个接口和类的代码和方法。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/185819.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...