文章图片
每个学习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去配置了 。
【机器|Java程序员应知应会,为什么现在我们不用Servlet了?】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了 。
- 机器人|世界首富扎克伯格为证明自己不是机器人下水洗澡?
- 相机|为什么西方的程序员不加班?
- javascript|雷柏全新旗舰级VT960S双模游戏鼠标上市
- Java|不够淘气值照样上88VIP?学会了怒省800大元
- CPU|在不久的将来,软件程序员是否将成为与低薪劳动者一样的情况?
- 荣耀|饱受争议的荣耀70系列,在明眼人眼里是怎样的机器?
- javascript|Web前端:JavaScript和Nodejs有什么不同?
- javascript|Web前端:Flutter和Ionic的主要区别有哪些
- 机器视觉|创作者的好搭档!灵耀X Pro体验不输MacBook Pro,你选择哪一个?
- Java|618换手机若预算不足,这4款千元“神机”,自己用或送长辈都合适