servlet本质
首先我们先要知道servlet是什么,这有两种解释。一是目前大多数人所说的,一个实现了servlet接口的类就可以叫作servlet。二,servlet只是一个接口。那么看起来这两点都和servlet接口有关,那么我们知道弄清楚了servlet接口就好了。
查看servlet接口源码,会发现里面一共只有五个方法。

接口的作用是规范,就是为了规范实现他的那些子类,那servlet接口定义的就是一套处理网络请求的规范。实现他的那些子类就要实现他的方法,其中里面最重要的三个方法,init(),service(),destory()。那么问题就变成了,你初始化要做什么,你接收到请求时如何服务,你销毁时要做什么。
那么实现了servlet的类就能处理请求吗?不能,因为servlet不直接和客户端打交道,实现类中不会有端口不会有url等一系列信息,既然这样是如何与客户端进行交互的。所以就有了servlet容器,servlet并不能直接处理请求,而是需要把servlet放在servlet容器中,tomcat就是这样一个容器,我们在配置tomcat时会发现xml里面有许多端口等等,这些才是与重要的信息。servlet容器监听端口,收到请求后,根据url等信息,mapping匹配选择应该让哪个servlet处理,再调用servlet的service方法,servlet处理完之后把response返回给tomcat,tomcat再把这个response传回去。
这么理解之后就更好理解servlet的运行过程了。servlet放在web服务器(servlet容器,比如tomcat)中,容器接收到请求后,选择让哪个合适的servlet去处理,如果这个合适的servlet没有实例对象,就先创建一个,有了实例对象就直接处理。处理过程,调用servlet实例对象的init()方法,创建一个用于封装http请求的HttpServletRequest对象和HttpServletResponse对象,然后调用service()方法并将request和response对象作为参数传进service(),service处理完之后,把response传给容器,容器再还给请求方。完成处理,调用destory()方法,该servlet被标记为垃圾,等待jvm回收该垃圾。
所以问题解决了,servlet是一个接口,用来规范网络请求(通过request和response,像tomcat与jetty的代码就不一样,而程序员只要会使用request和response就可以,这就是规范),实现servlet的类放在servlet容器中与客户端进行间接交互。
servlet本质的更多相关文章
- Servlet笔记2--模拟Servlet本质、第一个Servlet程序、将响应结果输出到浏览器中
以下代码均非IDE开发,所以都不规范,仅供参考 模拟Servlet本质: 模拟Servlet接口: /* SUN公司制定的JavaEE规范:Servlet规范 Servlet接口是Servlet规范中 ...
- Jsp与servlet本质上的区别
1.jsp经编译后就变成了Servlet.(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类)2.jsp更擅长 ...
- servlet本质是什么
作者:Javdroider Hong链接:https://www.zhihu.com/question/21416727/answer/339012081来源:知乎著作权归作者所有.商业转载请联系作者 ...
- java servlet的工作原理
servlet本质上就是java类嘛.不过是有特殊规范的java类而已.下面就说一说为什么servlet要有特殊规范. 首先,考虑一下什么地方用servlet,WEB应用,而且是需要servlet容器 ...
- Java Web每天学之Servlet的原理解析
Java Web每天学之Servlet的工作原理解析,上海尚学堂Java技术文章Java Web系列之二上一篇文章Java Web每天学之Servlet的工作原理解析是之一,欢迎点击阅读. Servl ...
- Servlet学习的一些笔记
Servlet一点笔记 Servlet:Server Applet,全称Java Servlet,是运行在Web服务器或应用服务器上的程序,它是作为来自Web浏览器或其他HTTP客户端的请求和HTTP ...
- Servlet基础学习
Servlet学习 Servlet是Server与Applet的缩写,是服务端小程序的意思.使用Java语言编写的服务器端程序,可以像生成动态的WEB页,Servlet主要运行在服务器端,并由服务器调 ...
- 服务器学习笔记之servlet
初衷 想学习下服务器这边的知识,制定了一条学习路线:java8--->servlet--->springMvc--->springBoot--->springCloud.在此当 ...
- Java web课程学习之Servlet
Servlet简介 (1) Servlet本质上就是一个Java类,只不过运行在Servlet容器中 (2) Servlet的功能: ① 创建并返回客户请求的动态HTML页面 ② 创建可嵌入到现有 ...
随机推荐
- DataTable复制数据,深度复制
/**/ /// <summary> /// 复制数据,深度复制 /// </summary> /// <param name="dataSourceRow&q ...
- MySql获取所有表名
如何获取MySql中所有表的的表名? sql语句是:show tables 返回结果如下: 不仅仅返回了所有的表名,更返回了视图的名字.
- 书籍--嵌入式C语言
1,C语言嵌入式编程修炼 [C/C++]C语言嵌入式编程修炼·背景篇·软件架构篇·内存操作篇
- 洛谷P4003 无限之环(infinityloop)(网络流,费用流)
洛谷题目传送门 题目 题目描述 曾经有一款流行的游戏,叫做 Infinity Loop,先来简单的介绍一下这个游戏: 游戏在一个 n ∗ m 的网格状棋盘上进行,其中有些小方格中会有水管,水管可能在格 ...
- [USACO5.4]奶牛的电信Telecowmunication
裸的最小割,拆点时要考虑清楚到底是怎么连 如果之前i->i+n,之后又x->y+n,显然出不了解 所以可以改为i+n->i 如果要输出方案 考虑每一个一个点,如果删去这个点,最小割变 ...
- TP90 95 99指标
备忘下: 保证90%请求都能被响应的最小耗时 The tp90 is a minimum time under which 90% of requests have been served. tp90 ...
- Java实现mongodb原生增删改查语句
Java实现mongodb原生增删改查语句 2018-03-16 自动化测试时,需校验数据库数据,为了快速自动化,在代码中用原生增删改查语句操作mongodb 结构 代码 0 pom.xml < ...
- ASP.NET Core Web API下事件驱动型架构的实现(四):CQRS架构中聚合与聚合根的实现
在前面两篇文章中,我详细介绍了基本事件系统的实现,包括事件派发和订阅.通过事件处理器执行上下文来解决对象生命周期问题,以及一个基于RabbitMQ的事件总线的实现.接下来对于事件驱动型架构的讨论,就需 ...
- SpringMVC中的适配器(适配者模式)
此处采用了适配器模式, 由于Controller的类型不同,有多重实现方式,那么调用方式就不是确定的,如果需要直接调用Controller方法,需要在代码中写成如下形式: if(mappedHandl ...
- mysql__存储过程
1.存储过程相当于我们学的各种高级语言的函数,既然是函数就可能有参数,先介绍参数类型: 存储过程主要包含三种参数类型,注意我说的不是数据类型(INT.VARCHAR) 第一种:IN输入参数:表示这种参 ...