当前位置: 首页 > news >正文

【servlet】servlet技术是否过时?

技术未过时,原始的应用方式过时

原理上未过时(必须掌握的基础知识),应用上已过时(现在几乎最少也用到Spring MVC了吧?)—— 现在还有谁直接用Servlet的呢?

所谓的过时,应该指的是使用原始的servlet与jsp直接开发,都封装成那么方便的框架了,但具体实现还是靠它,总有一天我们会用到它去突破一些瓶颈,掌握牢,靠谱!

需掌握Servlet

因为Servlet是基础的基础,不理解它你的脉门就被堵住了。而且很多资料和书籍你可能一开始就看不下去了。servlet是一组规范,其次SprinMVC等主流JavaMVC框架都是基于Servlet

我就是以为servlet过时了,会了点spring就去面头条,别的答得还行。问servlet我说不会,然后就凉了。真实吧。

不过时,至少校招还有用。
只会用框架不会原理,是找不到工作的。

摘自:https://www.zhihu.com/question/21849656

Servlet是什么

事实上,servlet就是一个Java接口,interface! 打开idea,ctrl + shift + n,搜索servlet,就可以看到是一个只有5个方法的interface!

所以,提问中说的网络协议、http什么的,servlet根本不管!也管不着!

那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是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。

工作模式:

1、客户端请求该 Servlet;

2、加载 Servlet 类到内存;

3、实例化并调用init()方法初始化该 Servlet;

4、service()(根据请求方法不同调用doGet() 或者 doPost(),此外还有doHead()、doPut()、doTrace()、doDelete()、doOptions());

5、destroy();

6、加载和实例化 Servlet。这项操作一般是动态执行的。然而,Server 通常会提供一个管理的选项,用于在 Server 启动时强制装载和初始化特定的 Servlet;

7、Server 创建一个 Servlet的实例;

8、第一个客户端的请求到达 Server;

9、Server 调用 Servlet 的 init() 方法(可配置为 Server 创建 Servlet 实例时调用,在 web.xml 中 <servlet> 标签下配置 <load-on-startup> 标签,配置的值为整型,值越小 Servlet 的启动优先级越高);

10、一个客户端的请求到达 Server;

11、Server 创建一个请求对象,处理客户端请求;

12、Server 创建一个响应对象,响应客户端请求;

13、Server 激活 Servlet 的 service() 方法,传递请求和响应对象作为参数;

14、service() 方法获得关于请求对象的信息,处理请求,访问其他资源,获得需要的信息;

15、service() 方法使用响应对象的方法,将响应传回Server,最终到达客户端。service()方法可能激活其它方法以处理请求,如 doGet() 或 doPost() 或程序员自己开发的新的方法;

16、对于更多的客户端请求,Server 创建新的请求和响应对象,仍然激活此 Servlet 的 service() 方法,将这两个对象作为参数传递给它。如此重复以上的循环,但无需再次调用 init() 方法。一般 Servlet 只初始化一次(只有一个对象),当 Server 不再需要 Servlet 时(一般当 Server 关闭时),Server 调用 Servlet 的 destroy() 方法。

https://blog.csdn.net/jason201710/article/details/80525864

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【vue】vue.js不就是一个文件吗?安装vue是什么意思?
  • 【Vue】Vue引入bootstrap的方法
  • 【vue】vue发布
  • 阿里云ECS端口8080访问不了问题排查
  • 【网络】ECS 8080端口连接拒绝问题排查(服务器外网无法访问原因)
  • 【springBoot】SpringBoot入门最详细教程---研习
  • 【springBoot】controller,service,dao,mapper,model层的作用
  • 【springboot】什么是依赖注入
  • 【java】Java bean 是个什么概念?
  • 【web】Postman 使用教程详解
  • 【vue】vue项目结和start
  • 【vue】vue项目结构-2
  • 【vue】vue + springboot 简单登录代码
  • 【Maven 】Maven 错误 Failure to transfer ...was cached in the local repository...
  • 【Maven】Eclipse自带Maven增加setting.xml
  • [数据结构]链表的实现在PHP中
  • angular组件开发
  • java小心机(3)| 浅析finalize()
  • JDK 6和JDK 7中的substring()方法
  • leetcode-27. Remove Element
  • markdown编辑器简评
  • MaxCompute访问TableStore(OTS) 数据
  • miaov-React 最佳入门
  • ng6--错误信息小结(持续更新)
  • 力扣(LeetCode)22
  • 浅谈Golang中select的用法
  • 如何在GitHub上创建个人博客
  • 微信小程序--------语音识别(前端自己也能玩)
  • 为视图添加丝滑的水波纹
  • 再次简单明了总结flex布局,一看就懂...
  • 在electron中实现跨域请求,无需更改服务器端设置
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • ​TypeScript都不会用,也敢说会前端?
  • ‌U盘闪一下就没了?‌如何有效恢复数据
  • #include<初见C语言之指针(5)>
  • (2024,RWKV-5/6,RNN,矩阵值注意力状态,数据依赖线性插值,LoRA,多语言分词器)Eagle 和 Finch
  • (7)svelte 教程: Props(属性)
  • (Python) SOAP Web Service (HTTP POST)
  • (python)数据结构---字典
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (区间dp) (经典例题) 石子合并
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (一)kafka实战——kafka源码编译启动
  • (游戏设计草稿) 《外卖员模拟器》 (3D 科幻 角色扮演 开放世界 AI VR)
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转)为C# Windows服务添加安装程序
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • ***原理与防范
  • .CSS-hover 的解释
  • .NET Micro Framework初体验
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .NET导入Excel数据
  • .net的socket示例
  • .Net开发笔记(二十)创建一个需要授权的第三方组件