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容器中与客户端进行间接交互。
最新文章
- Ajax实现简单下拉选项
- RequestContextListener作用
- mysql的sql文件的备份与还原
- Eclipse SVN插件账号、密码修改
- Cannot initialise keyboard run ./nano-X
- Servlet 获取IllegelStateException
- mongodb window安装配置
- Kafka 1.0.0集群安装
- springboot 开启事务以及手动提交事务
- js判断移动端是否安装某软软件,安装直接打开相应的链接,否则跳转到下载商店方法
- phpcms 自定义方法
- iOS 录制视频MOV格式转MP4
- jQuery-切换2
- Java 泛型类型基础
- HP管理工具System Management Homepage安装配置
- hdu2069-2071
- HDU 5280 Senior&;#39;s Array 最大区间和
- Gradle编译时下载依赖失败解决方法
- Mac OSX使用隐藏文件夹
- 【PTA 天梯赛训练】词频统计(map+vector)
热门文章
- C#连接oracle数据库步骤
- 【转载】[ORACLE]详解not in与not exists的区别与用法
- monkey简介与最常用命令
- ubuntu14.04安装cuda
- ASP.NET MVC 中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction
- Python机器学习介绍(Python Machine Learning 中文版)
- 【POJ3207】Ikki's Story IV - Panda's Trick
- AC自动机模板2(【CJOJ1435】)
- 【BZOJ4196】【NOI2015】软件包管理器(树链剖分,线段树)
- [BZOJ3223] [Tyvj1729] 文艺平衡树 (splay)