Servlet是什么?
我们平时说的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{@Overridepublic 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());}@Overridepublic void init(ServletConfig config) throws ServletException {}@Overridepublic ServletConfig getServletConfig() {return null;}@Overridepublic String getServletInfo() {return null;}@Overridepublic 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
Servlet是什么?相关推荐
- Ajax接收Java异常_java – 处理来自Servlet的Jquery AJAX响应中的异常
我的servlet代码是 try{ //something response.setStatus(201); out.print("Data successfully saved" ...
- JavaEE学习笔记之Servlet
同一用户的不同页面的共享数据 1.1 cookie技术 1.2 sendRedirect()转向 1.3 隐藏表单 1.4 session技术 ###session技术: 当用户打开浏览器,访问某个网 ...
- 【JavaWeb】servlet与http请求协议
Servlet: 概念: server applet (服务端小程序)运行在服务器端的小程序 Servlet就是一个接口,定义了Java类被浏览器访问到(Tomcat识别)的规则. 将我我们自定义一个 ...
- 使用最新版(2020)IntelliJ IDEA 创建Servlet项目
一:选择左上端的File,创建Project,选择创建Web Application 项目: 注:不勾选Create web.xml 二:设置项目名称:helloworld,并创建一个Servlet( ...
- 2020了,还要学JSP嘛?入个门呗!毕竟Servlet亲兄弟~
目录 1.什么是JSP 2.JSP原理 3.JSP基础语法 jsp表达式 jsp脚本片段 jsp声明 jsp注释 4.JSP指令 5.JSP行为 6.9大内置对象 7.EL表达式 格式 变量 [ ]与 ...
- 来谈谈Servlet~~
目录 1.Servlet简介 2.第一个Servlet程序 3.Servlet原理 4.servlet-mapping的配置 5.关于ServletContext 1.共享数据 2.获取初始化参数 3 ...
- 使用Servlet完成单表的CRUD
实现步骤 第一步:准备一张数据库表.(sql脚本) 第二步:准备一套HTML页面(项目原型)[前端开发工具使用HBuilder] 第三步:分析我们这个系统包括哪些功能 第四步:在IDEA当中搭建开发环 ...
- 适配器(GenericServlet)改造Servlet
JavaWeb系列教程 JavaWeb-Servlet 模拟Servlet本质 使用IDEA开发Servlet程序 Servlet对象的生命周期 适配器(GenericServlet)改造Servle ...
- 使用IDEA开发Servlet程序
JavaWeb系列教程,持续更新 JavaWeb-Servlet 模拟Servlet本质 使用IDEA开发Servlet程序 Servlet对象的生命周期 适配器(GenericServlet)改造S ...
- 模拟Servlet本质
JavaWeb系列教程,持续更新 JavaWeb-Servlet 模拟Servlet本质 使用IDEA开发Servlet程序 Servlet对象的生命周期 适配器(GenericServlet)改造S ...
最新文章
- Squid安装与配置
- Office SharePoint Server 2007 中的 Workflow
- 洛谷——P1311 选择客栈
- 【MyBatis框架】查询缓存-二级缓存原理
- 为什么我的文章总是没人回复
- 苹果Mac强大的代码编辑器:Nova
- 数据结构与算法之树的进阶
- 透过 ASP.NET 和数据库读写图片
- pyltp的使用教程
- 如鹏网.Net基础2 第六章:MYSQL
- RStudio常用快捷键
- mysql 交换 表分区_mysql分区表分区数据和普通表交换
- TAM: TEMPORAL ADAPTIVE MODULE FOR VIDEO RECOGNITION ∗
- 高端大气通用企业介绍PPT模板-优页文档
- dalsa工业相机8k参数_dalsa线阵相机Linea系列2K4K8K
- 一位中科院自动化研究所博士的毕业论文致谢:求学22载,计算机终成一生的事业与希望...
- 公司实际控制人和控制人的计算(内容在不断完善中。。。)
- 高压功率放大器ATA4051VS高压功率放大器HSA4051
- 诗歌五 增广贤文(古人不见今时月,今月曾经照古人)
- springboot集成SpringJDBC单数据源(一)