博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Servlet是什么?
阅读量:3952 次
发布时间:2019-05-24

本文共 1891 字,大约阅读时间需要 6 分钟。

我们平时说的Servlet看上去很神秘,其实本质很简单,

先说结论: Servlet就是一个Java接口interface而已。

那servlet是干嘛的?很简单,接口的作用是什么?规范呗!

servlet接口定义的是一套处理网络请求的规范,所有实现servlet的类,都需要实现它那五个方法,

在这里插入图片描述

其中最主要的是两个生命周期方法 init()和destroy(),还有一个处理请求的service(),

也就是说,所有实现servlet接口的类,或者说,所有想要处理网络请求的类,都需要回答这三个问题:

  • 你初始化时要做什么
    -你销毁时要做什么
  • 你接受到请求时要做什么

这是Java给的一种规范!就像阿西莫夫的机器人三大定律、行尸走肉里Rick的那三个问题一样,规范!

servlet是一个规范,那实现了servlet的类,就能处理请求了吗?

答案是,不能

你可以随便谷歌一个servlet的hello world教程,里面都会让你写一个servlet,

相信我,你从来不会在servlet中写什么监听8080端口的代码servlet不会直接和客户端打交道

那请求怎么来到servlet呢?

答案是servlet容器,比如我们最常用的tomcat,

同样,你可以随便谷歌一个servlet的hello world教程,里面肯定会让你把servlet部署到一个容器中,不然你的servlet压根不会起作用。

tomcat才是与客户端直接打交道的家伙,他监听了端口,请求过来后,根据url等信息,确定要将请求交给哪个servlet去处理,然后调用那个servlet的service方法,service方法返回一个response对象,tomcat再把这个response返回给客户端。

比如:一个简单的自己实现的Servlet(不管请求是什么都返回404)

class TeacherServlet implements Servlet{
@Override public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
OutputStream out = res.getOutputStream(); out.write(("HTTP/1.1 404 Not Found\r\n" + "Content-Type: text/plain\r\n" + "Content-length: 10\r\n\r\n" + "Not Found").getBytes()); } @Override public void init(ServletConfig config) throws ServletException {
} @Override public ServletConfig getServletConfig() {
return null;} @Override public String getServletInfo() {
return null;} @Override public void destroy() {
}}

自己实现的Servlet容器:相当于Tomcat,jetty…

ServerSocket ss = new ServerSocket();//创建服务器Socket socket = ss.accept();//监听客户端连接/* 读取客户端数据  .............*/OutputStream soutput = socket.getOutputStream();Servlet servlet = new TeacherServlet();ServletResponse res = new ServletResponse(soutput);servlet.service(null, res);res.end();

所以Servlet的本质就是:

为java程序提供一个统一的web应用的规范。

参考:

https://www.zhihu.com/question/21416727
https://zhuanlan.zhihu.com/p/34518314

转载地址:http://jikzi.baihongyu.com/

你可能感兴趣的文章
火爆全球的区块链到底是怎么一回事?一文带你看懂
查看>>
当白帽黑客遇到了网络诈骗,他是如何套路并反制骗子的?
查看>>
手把手教你36小时搭建无人超市系统 !(附代码)
查看>>
2017新生儿爆款名字出炉!90后的父母们最受欢迎的居然是.....
查看>>
全景图解高铁数据,谁是最有潜力的高铁城市?
查看>>
张小龙现场“约战”跳一跳,发布2018微信全新计划(内附演讲全文)
查看>>
爬取电影天堂的最新电影
查看>>
运维总监不会告诉你这些有趣但鲜为人知的 Linux 命令
查看>>
2017新浪微整形年度大数据报告
查看>>
实战 | 用 Python 选股票,据说可以多挣个20%
查看>>
重磅 | 数据挖掘之父韩家炜:文本语料库的数据挖掘(附视频+PPT下载)
查看>>
干货汇总 | 你可能不知道的 Python Web 部署方式总结
查看>>
技术人再不懂区块链,你就OUT了?漫画版
查看>>
快收藏!史上最全的 Linux Shell 文本处理工具集锦
查看>>
一小时爬千万数据的新浪微博爬虫
查看>>
简约而不简单的 Django 新手图文教程
查看>>
重磅!阿里首次全面公开展示AI布局(附布局图/成绩单/六产业详解)
查看>>
谷歌大脑2017技术研究总结 | Jeff Dean执笔(附论文 & 数据集)
查看>>
最新中国一二三四五线城市排名出炉!去这些城市买房准没错!
查看>>
BAT人工智能生态时局图:全面战争爆发前夜
查看>>