Java程序员应知应会,为什么现在我们不用Servlet了?
https://www.163.com/dy/article/H84P8CPU055368QG.html
每个学习Java的同学都会从Servlet开始学习。Servlet API发表于1998年,可以说 JavaEE众多API中最成功的一个。多年以来,它的核心API一直变化不大,非常的稳定。
但是,新入行的程序员们现在却很少用它了,甚至很多人如果是转行过来,直接就开始写项目的话,可能完全不熟悉Servlet的编码风格了。程序员们可能已经习惯了基于Spring MVC的Spring boot风格,已经熟悉了Restful的开发方法。那么,我们真的不再使用Servlet了吗?答案是否定的,我们依然在使用Servlet,只不过原来是我们直接写Servlet,而现在是框架代替我们完成Servlet的工作而已。
类似于Structs、Spring MVC等框架,它们的核心理念都是Servlet与handler之间的一个mapping。
以Spring MVC为例,它有一个DispatherServlet,负责处理请求,并且调用了我们写的Controller。作为Controller的前端控制器DispatcherServlet最终是继承了HttpServlet的,只不过springmvc帮助你做好了url和method的映射了(注解实现),不需要你自己在web.xml一个servlet和一个method去配置了。
DisPatcherServlet是Spring中唯一的Servlet,Servlet将所有请求都转发到DisPatcherServlet,然后DisPatcherServlet分发请求通过HandlerMapping(处理器映射器)和HandlerAdapter(处理器适配器)找到具体的Controller。而Controller只是一个普通的JavaBean。
DisPatcherServlet的生命周期和Servlet是相同的,都是在第一次被访问时创建,容器关闭时销毁。具体的过程如下图所示:
![]()
那么为什么我们需要框架去做这些工作呢?这就不得不提到Servlet本身存在的一些缺点和不便之处了。
Servlet最大的缺点是一个类只能写一个接口,而每一个Servlet都要在web.xml中进行相应的配置,我们想在一个Servlet里写很多个方法的话,则需要采用传递参数的形式,分解到每一个方法中。如果有很多Servlet,就会导致web.xml内容过于繁多。而这样的结构很明显是不利于分组开发的。
另外,在Servlet中,doGet方法和doPost方法有HttpServletRequest和HttpServletResponse参数。这两个参数与容器相关,如果想在servlet中作单元测试,则必须初始化这两个参数。在我们目前已经习惯了进行单元测试的情况下,Servlet就显得很不方便。
因此,人们才用框架把Servlet封装起来,替我们完成这些繁琐的工作,从而增加开发效率。
所以,事实上并不是我们不用Servlet了,而是基于Servlet实现的各类框架,替我们完成了相关的工作,从而不需要我们自己编写Servlet了。
Java程序员应知应会,为什么现在我们不用Servlet了?的更多相关文章
- Java程序员应该知道的10个面向对象理论
英文原文:10-object-oriented-design-principles 面向对象理论是面向对象编程的核心,但是我发现大部分 Java 程序员热衷于像单例模式.装饰者模式或观察者模式这样的设 ...
- Java程序员应该知道的10个Eclipse调试技巧
Eclipse是众多Java程序员实用的开发工具,其中开发技巧也是繁多,但作为优秀的Java程序员,需要掌握最起码的调试技巧. 1 条件断点 2 异常断点 3 监视点 4 评估/检查 5 修改变量值 ...
- Java程序员应当知道的10个面向对象设计原则
面向对象设计原则是OOPS编程的核心, 但我见过的大多数Java程序员热心于像Singleton (单例) . Decorator(装饰器).Observer(观察者) 等设计模式,而没有把足够多的注 ...
- (转)Java程序员应该知道的10个调试技巧
(转自 酷勤网 – 程序员的那点事!http://www.kuqin.com/) 试可以帮助识别和解决应用程序缺陷,在本文中,作者将使用大家常用的的开发工具Eclipse来调试Java应用程序.但这里 ...
- Java程序员应该知道的20个有用的lib开源库
一般一个经验丰富的开发者,一般都喜欢使用开源的第三方api库来进行开发,毕竟这样能够提高开发效率,并且能够简单快速的集成到项目中去,而不用花更多的时间去在重复造一些无用的轮子,多了解一些第三方库可以提 ...
- Java程序员应该知道的10个调试技巧
试可以帮助识别和解决应用程序缺陷,在本文中,作者将使用大家常用的的开发工具Eclipse来调试Java应用程序.但这里介绍的调试方法基本都是通用的,也适用于NetBeans IDE,我们会把重点放在运 ...
- (转) Java程序员应该知道的10个调试技巧
原地址:http://www.csdn.net/article/2012-09-03/2809495-java-debugging-tips-with-eclipse 调试可以帮助识别和解决应用程序缺 ...
- java程序员必知的 8大排序
Java常用的八种排序算法与代码实现 排序问题一直是程序员工作与面试的重点,今天特意整理研究下与大家共勉!这里列出8种常见的经典排序,基本涵盖了所有的排序算法. 1.直接插入排序 我们经常会到这样一类 ...
- Java程序员必知的8大排序算法
8种排序之间的关系 直接插入排序 (1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排 好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数 也是排好顺序的.如 ...
- java程序员必知的8大排序
先来看看8种排序之间的关系: 1, 直接插入排序 (1)基本思想:在要排序的一组数中,假设前面(n-1) [n>=2] 个数已经是排 好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数 ...
随机推荐
- JS高级用法:像大神一样玩转JavaScript
@charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...
- CentOS 7.6 安装JDK 1.8
第一步,下载一个rpm包,下载链接如下 https://www.oracle.com/cn/java/technologies/downloads/ 第二步:上传到服务器中 第三步:输入命令进行安装 ...
- .NET外挂系列:4. harmony 中补丁参数的有趣玩法(上)
一:背景 1. 讲故事 前面几篇我们说完了 harmony 的几个注入点,这篇我们聚焦注入点可接收的几类参数的解读,非常有意思,在.NET高级调试 视角下也是非常重要的,到底是哪些参数,用一张表格整理 ...
- 【2020.11.30提高组模拟】柱形图(histogram) 题解翻译
[2020.11.30提高组模拟]柱形图(histogram) 题解 题意简述 有\(n\)个长方体并排这样放着,每种颜色的长方体的宽度都为\(1\),高\(a_i\)长\(b_i\). 求在这些长方 ...
- ShadowSql.net之正确使用方式
ShadowSql是面向接口模块化可插拔可扩展的工具 ShadowSql不是全家桶 不把所有功能都做一个项目里面就是为了大家不一次引用所有的nuget包 大家可以先判断需要哪些功能,再引用对应的nug ...
- Linux安装最新Erlang、RabbitMQ
进入RabbitMQ官网 简介: RabbitMQ是一个免费的开源企业消息代理软件. 它是用Erlang编写的,并实现了高级消息队列协议(AMQP). 它提供所有主要编程语言的客户端库. 它支持多种消 ...
- 字典树Trie详解
哈喽大家好,我是 doooge ,今天给大家带来 Trie 的详解. \[\Huge \texttt{字典树 Trie 详解} \] 1.Trie是什么? Trie 也叫字典树,前缀树,其本质就是一棵 ...
- 逗号位置决定命运:CSS 选择器 `#id > a, b` 和 `#id > a, #id > b` 的致命差异
引言:被忽视的逗号陷阱 在日常开发中,CSS 选择器的逗号,看似简单,但一个符号的位置差异就能导致样式作用范围天差地别.本文通过真实代码对比,揭示这个容易被忽视的关键细节. 核心结论(先看结果) 选择 ...
- 21verilog函数
Verilog函数详解 目录 1. 函数简介 2. 函数基本语法 3. 函数特性与限制 4. 函数参数与返回值 5. 常数函数 6. automatic函数 7. 函数应用场景 8. 最佳实践与注意事 ...
- 一个工具管理你的所有 SDK 版本!
众所周知,我们在面对同一个 SDK 的不同版本时,需要使用到不同的工具来管理,例如: Java:JEnv NodeJs:nvm ... 它们的原理都是基于系统的软连接,让环境变量指向一个软连接来实现切 ...