CGI、Servlet

2018-08-30  本文已影响0人  kindol

CGI概述:

CGI是外部应用程序(CGI程序)与Web服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的规程,能够使应用程序(通常称为CGI程序或CGI脚本)同web服务器和客户端进行交互

CGI工作步骤如下:

  1. 客户端发出请求
  2. Web服务器激活CGI程序
  3. CGI程序对客户端的请求做出反应
  4. Web服务器将CGI的处理结果传送给客户端
  5. Web服务器中断和客户端浏览器的链接
  6. Web 浏览器将CGI程序的输出显示到浏览器的窗体
CGI.png

简单讲讲Tomcat:

Web服务器有好比如Tomcat,Jetty,.NET开发—IIS等。HTTP服务器是使用HTTP(超文本传输协议)与客户机浏览器进行信息交流。

Tomcat架构

Tomcat.jpg

Tomcat Server核心是一个 Servlet/JSPContainer。

对每一个HTTP请求,过程如下:

  1. 获取请求连接(比如"/a.html")
  2. Tomcat Connector将请求传送给Container模块
  3. Container组装HttpServletRequest对象,根据路由配置,搜索相应的Servlet,并创建一个线程处理本次请求。此时线程会将上面Request和Response对象的索引,传递给Servlet
  4. Servlet来分析请求(HttpServletRequest),调用其service方法,进行业务处理
  5. 返回响应(HttpServletResponse)
  6. 关闭连接


    Tomcat_process.jpg

Servlet是线程安全的吗?

不是,一个servlet实现类只会有一个实例对象,多个线程是可能会访问同一个servlet实例对象的,线程安全问题都是由全局变量及静态变量引起的。

Servlet是单例吗?

不一定是,在一个ServeltName情况下是的。在多个ServletName匹配到一个Servlet类时,该Servlet不是单例。

代码相关:

继承了HttpServlet(抽象类)的类需要在类定义前面添加注解WebServlet且至少要有一个urlPatterns

@WebServlet(urlPatterns = {"/helloWorld01.html", "/helloWorld02.html")

根据http请求为那种请求方式重写doGet、doPost、doPut、doDelete方法,但至少实现一个方法

Servlet概述:

servlet是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。Servlet运行于支持Java的应用服务器中。从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。

服务器上需要一些程序,常常是根据用户输入访问数据库的程序。

在通信量大的服务器上,Java Servlet的优点在于它们的执行速度更快于CGI程序。各个用户请求被激活成单个程序中的一个线程。这意味着服务器端处理请求的系统开销将明显降低。Servlet由java编写,因此是平台独立的。

Servlet执行过程:

  1. 客户端发送请求至服务器端
  2. 服务器将请求信息发送至Servlet容器对应的servlet
  3. Servlet生成响应内容并将其传给服务器
  4. 服务器将响应返回给客户端

时序图如下

servlet.png

Servlet的初始化

  1. 如果没有设置loadOnStartup,则第一次请求的时候实例化
  2. loadOnStartup < 0
    即负数的情况下,web容器启动的时候不做实例化处理,servlet首次被调用时做实例化,这种情况和没有设置loadOnStartup是一样的
  3. loadOnStartup > 0
    web容器启动的时候做实例化处理,顺序是由小到大,正整数小的先被实例化
  4. loadOnStartup = 0
    web容器启动的时候做实例化处理,相当于是最大整数,因此web容器启动时,最后被实例化
上一篇下一篇

猜你喜欢

热点阅读