Spring mvc源码分析系列--Servlet的前世今生

Spring mvc源码分析系列--Servlet的前世今生概述上一篇文章Spring mvc源码分析系列--前言挖了坑,但是由于最近需求繁忙,一直没有时间填坑 。今天暂且来填一个小坑 , 这篇文章我们来说说Servlet的发展历史 。所以这篇文章还是比较轻松,不涉及太多的源码分析,简单介绍Servlet的由来和发展 。
Servlet是什么传说在上世纪90年代,因为nternet和浏览器的飞速发展,使得基于浏览器的B/S模式随之火爆发展起来 。最初 , 用户使用浏览器向WEB服务器发送的请求都是请求静态的资源,比如html、css等 。但是可以想象:根据用户请求的不同动态的处理并返回资源是理所当然必须的要求 , 例如用户提交一些东西,服务器就能按提交的内容反馈用户不同的效果 。所以人们应该非常迫切想要推出一项技术来实现动态的处理,java 为了应对上述需求 , 促进了servlet技术诞生 。
Servlet 是在服务器上运行的小程序 。这个词是在 Java applet的环境中创造的,Java applet 是一种当作单独文件跟网页一起发送的小程序,它通常用于在客户端运行 , 结果得到为用户进行运算或者根据用户互作用定位图形等服务 。服务器上需要一些程序 , 常常是根据用户输入访问数据库的程序 。这些通常是使用公共网关接口(Common Gateway Interface,CGI)应用程序完成的 。然而,在服务器上运行 Java,这种程序可使用 Java 编程语言实现 。在通信量大的服务器上,JavaServlet 的优点在于它们的执行速度更快于 CGI 程序 。各个用户请求被激活成单个程序中的一个线程,而无需创建单独的进程 , 这意味着服务器端处理请求的系统开销将明显降低 。不清楚CGI是什么?这篇文章CGI是什么可以解答你的疑问 。
Servlet与 CGI 比较存在的优点如下:

  • 与传统的 CGI 和许多其他类似 CGI 的技术相比,Java Servlet 具有更高的效率,更容易使用,功能更强大,具有更好的可移植性,更节省投资 。在未来的技术发展过程中,Servlet 有可能彻底取代 CGI 。
  • 在传统的 CGI中,每个请求都要启动一个新的进程,如果 CGI 程序本身的执行时间较短,启动进程所需要的开销很可能反而超过实际执行时间 。而在 Servlet 中,每个请求由一个轻量级的 Java 线程处理(而不是重量级的操作系统进程) 。
  • 在传统 CGI 中,如果有 N 个并发的对同一 CGI程序的请求,则该CGI程序的代码在内存中重复装载了 N 次;而对于 Servlet,处理请求的是 N 个线程,只需要一份 Servlet 类代码 。在性能优化方面,Servlet 也比 CGI 有着更多的选择 。
Servlet可以说是Java技术中最早的Web解决方案,Servlet与普通Java类的编写非常类似 。在Servlet中可以通过挨着行输出Html等语句来实现页面的样式和输出,数据的动态功能当然也就实现了 。表现、逻辑、控制、业务全部混在Servlet类中 。下面给出一个简单例子来直观感受一下 。
public void doGet(HttpServletRequest request,HttpServletResponse)throws IOException,ServletException{response.setContentType("text/html;charset=gb2312");PrintWriter out = response.getWriter();out.println("<html>");out.println("<head><title>Hello World!</title></head>");out.println("<body>");out.println("<p>Hello World!</p>");out.println("</body></html>");}Servlet是怎么运行的上一小节介绍到,Servlet是用于处理动态响应客户端请求的 。那么Servlet是运行在哪里的呢?
最早支持 Servlet 技术的是 JavaSoft 的 Java Web Server 。此后,一些其它的基于 Java 的 Web Server 开始支持标准的 Servlet API 。Servlet 的主要功能在于交互式地浏览和修改数据,生成动态 Web 内容 。
还记得上一篇文章里的灵魂拷问吗? 浏览器的一个请求,是如何精确到达你的web服务器里的业务逻辑里的,其中经历的流程能说个所以然吗,这个过程为:
  1. 客户端发送请求至服务器端 。
  2. 服务器将请求信息发送至 Servlet 。
  3. Servlet 生成响应内容并将其传给服务器 。响应内容动态生成,通常取决于客户端的请求 。
  4. 服务器将响应返回给客户端 。
以上的每一步都包含着大量的细节,现在广泛使用的web服务器是Tomcat,以Tomcat为例,简单分析一下以上的四步: