美文网首页
CGI、Servlet

CGI、Servlet

作者: kindol | 来源:发表于2018-08-30 09:39 被阅读0次

    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容器启动时,最后被实例化

    相关文章

      网友评论

          本文标题:CGI、Servlet

          本文链接:https://www.haomeiwen.com/subject/nqqrwftx.html