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 有着更多的选择 。
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服务器里的业务逻辑里的,其中经历的流程能说个所以然吗,这个过程为:
- 客户端发送请求至服务器端 。
- 服务器将请求信息发送至 Servlet 。
- Servlet 生成响应内容并将其传给服务器 。响应内容动态生成,通常取决于客户端的请求 。
- 服务器将响应返回给客户端 。
- 客户端发送请求至服务器端 。这部分涉及的是计算机网络的基础知识,主要涉及各种协议,例如:ARP、DNS、TCP,HTTP等 。
- 服务器将请求信息发送至 Servlet 。这里就涉及的是具体的web服务器实现了,以Tomcat为例,这里不展开细说,请求到达Tomcat后 , 会经过各种阀门的处理 , 然后最终进入到我们的Servlet里面,这里附上Tomcat的整体处理流程图 。
推荐阅读
- spring cron表达式源码分析
- 集合框架——LinkedList集合源码分析
- 含源码 手把手教你使用LabVIEW OpenCV DNN实现手写数字识别
- 补充部分---ScheduledThreadPoolExecutor类分析 线程池底层原理详解与源码分析
- 五 Netty 学习:服务端启动核心流程源码说明
- springboot自动配置原理以及手动实现配置类
- 三十六 Java开发学习----SpringBoot三种配置文件解析
- HashMap底层原理及jdk1.8源码解读
- SpringBoot 常用读取配置文件的 3 种方法!
- 含源码 手把手教你使用LabVIEW人工智能视觉工具包快速实现传统Opencv算子的调用