对于从接触Java的工作者中这个概念比较基础,但是对于从C或C++底层的从业人员或者其他技术路线的工作者理解这个概念多少会有些奇怪。各个博客上感觉对Servlet的解释都太过官方或者书面化了,不够通俗。
简单来说,Web服务器能够解析URL是无可厚非的,但是URL本身不见得就一定是固化的。例如:
http://www.testweb.com/user
http://www.testweb.com/report
我们可以发现这两个URL本质上就是靠后面的user和report后缀不同,表示请求了不同的动作的。Web服务器如果能够正确的按照预期的响应,那么必须具有几个能力:
1)能够解析得到user或者report的这个串;
2)能够知道user或者report这个串对应应该由哪个函数或者哪个方法或者哪个类来执行;
3)丢给这个执行单元,让他执行完把结果返回回来。
Servlet就是干这个事的,本质上Servlet就是提供了能够顺利执行这三件事的框架:
1)Servlet提供了串解析的功能
2)Servlet提供了注册的方法,因为Servlet是基于Java的,所以注册的东西就是类
3)Servlet提供了根据串的结果执行,并且返回结果的能力。Servlet的类需要按照一定的标准定义方法,由Servlet框架来负责监视和执行定义好的固定方法
Servlet框架本质上也可以称为Servlet容器。之所以会被称之为容器,是相对于Servlet程序说的。在上文中说道了,Servlet需要注册的执行内容就是类。但是这个类是没有主函数的,也就是没办法独立运行的,是一个必须依靠框架的代码段,所以这种代码段被称为Servlet应用,而对应的框架也可以称为Servlet容器。
首先Servlet容器本身上就是一种技术思想而已,按照上述的方法,能够实现这种功能的框架其实都可以被称之为Servlet容器。
另外Tomcat他其实是多功能应用服务器,Servlet是Tomcat的主体功能。而且Tomcat的普及型够广,因此Tomcat的Servlet也一定程度称为了Servlet容器的参考。
Servlet与SpringMVC正如上述所说,Servlet本身他并不完全算作一个产品(对应使用Servlet思想的Tomcat可以算作一个产品),他本身只是一种架构方案。
直接使用Servlet最大的问题就是对开发者不便等维护方面的问题,例如:
web.xml必须与每一个Servlet在文件中保持一对一,如果Servlet多了,那么web.xml则会很庞大对于团队开发和集成测试很困难(这一点需要进一步评估和分析)
根据现在的资料,SpringMVC其实并不是取代了Servlet,而是封装到开发者感受不到存在了而已。Servlet是MVC的基础。
SpringMVC和MVC,将会后续开专题进行阐述和分析



