大家好,欢迎来到IT知识分享网。
每个学习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了。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/7035.html