首页 > 编程语言 >python wsgi 规范 与java的servlet规范

python wsgi 规范 与java的servlet规范

时间:2022-08-15 12:11:45浏览次数:61  
标签:Web WSGI HTTP python Servlet 规范 应用程序 服务器 servlet

  • 背景

Web应用的本质就是:

  1. 浏览器发送一个HTTP请求;
  2. 服务器收到请求,生成一个HTML文档;
  3. 服务器把HTML文档作为HTTP响应的Body发送给浏览器;
  4. 浏览器收到HTTP响应,从HTTP Body取出HTML文档并显示。

所以,最简单的Web应用就是先把HTML用文件保存好,用一个现成的HTTP服务器软件,接收用户请求,从文件中读取HTML,返回。Apache、Nginx、Lighttpd等这些常见的静态服务器就是干这件事情的。

如果要动态生成HTML,就需要把上述步骤自己来实现。不过,接受HTTP请求、解析HTTP请求、发送HTTP响应都是苦力活,如果我们自己来写这些底层代码,还没开始写动态HTML呢,就得花个把月去读HTTP规范。

正确的做法是底层代码由专门的服务器软件实现,我们用Python专注于生成HTML文档。因为我们不希望接触到TCP连接、HTTP原始请求和响应格式,所以,需要一个统一的接口,让我们专心用Python编写Web业务。

这个接口就是WSGI:Web Server Gateway Interface。

 

  • WSGI是什么

WSGI的全称是Web Server Gateway Interface,翻译过来就是Web服务器网关接口。具体的来说,WSGI是一个规范,定义了Web服务器如何与Python应用程序进行交互,使得使用Python写的Web应用程序可以和Web服务器对接起来。

 

  • 为什么需要WSGI这个规范

在Web部署的方案上,有一个方案是目前应用最广泛的:

  1. 首先,部署一个Web服务器专门用来处理HTTP协议层面相关的事情,比如如何在一个物理机上提供多个不同的Web服务(单IP多域名,单IP多端口等)这种事情。
  2. 然后,部署一个用各种语言编写(Java, PHP, Python,Ruby等)的应用程序,这个应用程序会从Web服务器上接收客户端的请求,处理完成后,再返回响应给Web服务器,最后由Web服务器返回给客户端。

那么,要采用这种方案,Web服务器和应用程序之间就要知道如何进行交互。为了定义Web服务器和应用程序之间的交互过程,就形成了很多不同的规范。这种规范里最早的一个是CGI][3,1993年开发的。后来又出现了很多这样的规范。比如改进CGI性能的FasgCGI,Java专用的Servlet规范,还有Python专用的WSGI规范等。提出这些规范的目的就是为了定义统一的标准,提升程序的可移植性。

 

  • WSGI如何工作

从上文可以知道,WSGI相当于是Web服务器和Python应用程序之间的桥梁。那么这个桥梁是如何工作的呢?首先,我们明确桥梁的作用,WSGI存在的目的有两个:

  1. 让Web服务器知道如何调用Python应用程序,并且把用户的请求告诉应用程序。
  2. 让Python应用程序知道用户的具体请求是什么,以及如何返回结果给Web服务器。

 

  • Servlet 是什么

Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。

使用 Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。

 

  • Servlet的运行过程

Servlet程序是由WEB服务器调用,web服务器收到客户端的Servlet访问请求后:
  ①Web服务器首先检查是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行第④步,否则,执行第②步。
  ②装载并创建该Servlet的一个实例对象。
  ③调用Servlet实例对象的init()方法。
  ④创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去。
  ⑤WEB应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destroy()方法。
————————————————
版权声明:本文为CSDN博主「tester_sz」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_39813400/article/details/119963358

标签:Web,WSGI,HTTP,python,Servlet,规范,应用程序,服务器,servlet
From: https://www.cnblogs.com/hanfanfan/p/16587823.html

相关文章

  • Python 函数运行时间统计
    fromfunctoolsimportwrapsimporttimedeffunc_time(f):@wraps(f)defwrapper(*args,**kwargs):start=time.time()result=f(*ar......
  • python | split函数时间复杂度
    源码while(maxcount-->0){while(i<str_len&&STRINGLIB_ISSPACE(str[i]))i++;if(i==str_len)break;j=i;i++;while(i<......
  • python数据类型
    数据类型 int strbool[] list 列表  存储大量的数据     里面的数据可以更改() tuple  元组  里面写入的数据不能更改 {}dict  ......
  • 使用python的requests爬取原神观测枢的内容
    本文进行两个任务。 1.爬取米游社观测枢的圣遗物信息,存到本地json文件 2.爬取米游社观测枢的书籍信息及其超链接所链接的书籍内容,存到本地json文件使用技术:Python的req......
  • Python 内置函数getattr()
    优点可消除if...else Python面向对象中的反射通过字符串的形式操作对象的属性,trueorfalsePython中一切皆为对象,所以只要是对象都可以使用反射比如:实例对象、......
  • python学习Day44
    Day44今日内容概要数据存取演变史数据库软件应用史数据库的本质数据库的分类(理论重点)MySQL数据库简介基本使用系统服务制作密码相关操作SQL与NoSQL数据库语......
  • Python: __fspath__
                 ......
  • pip安装报错:Command python setup.py egg_info failed with error code 1
    原文链接windows下使用pip安装torch模块,出现错误:ERROR:Command"pythonsetup.pyegg_info"failedwitherrorcode1inC:\Users\xxx\AppData\Local\Temp\pip-insta......
  • python3 运维脚本(使用psutil模块)(转)
    使用python编写一个监控脚本,放在Linux系统运行。监控的要求如下:1.显示当前时间2.脚本运行之后监控10s,每隔一秒钟输出一次信息3.显示当前系统CPU的逻辑核数、平均使用率4.显......
  • python遍历文件夹中所有的文件
    遍历所有文件和文件夹参考:https://blog.csdn.net/caroline_wendy/article/details/120296249获取视频文件时长参考:https://blog.csdn.net/lilongsy/article/details/121......