java平台CGI技术_web应用中动态部分的java和cgi实现原理的简单总结

一、初始web

最初知道网站是用html写的,静态的,会动的那个显示效果,内容完全没变,只是有时候移动了,有时候隐藏了。

这个时候,我认为:

浏览器是一个html的解释器和http的解释器的合体。

服务器是一个接收http请求,并可以根据请求中指定的文件(无论是地址栏写的,还是超链接发送的)找到服务器对应的文件,把文件中的内容以http的格式返回给浏览器。

不过听说表单是可以提交给后台处理的,也就是内容可以根据人工输入而改变的。但是这个过程一直不知道是什么样。

二、java的动态网站

后来学习了java,知道用tomcat和jsp/servlet就可以实现动态交互的网站,比如提交个表单,后台处理一下,然后返回一个结果。但是文件不是html了,而jsp了,或者直接后台的java类了,既然浏览器没有变,那么后台返回的内容一定还是html格式的内容,无论是jsp还是servlet都是需要tomcat(或者apache+tomcat等)翻译成html格式的静态文件。其中tomcat可以内部划分为web服务器和应用服务器(即j2ee的容器)。

那么流程大概是这样的:

1、浏览器请求一个地址,

2、web服务器通过地址的格式判断,如果后缀是html等静态文件就直接返回文件内容,

3、如果后缀是jsp就发送给应用服务器处理,容器会将相应的jsp文件翻译为servlet(即java类),

4、如果后缀是其他非常规静态文件和jsp,那么也会发送给容器,容器检查web.xml中的servlet定义是否包含了这个路径,如果有则调用相应的servlet,

5、调用servlet之前,容器会在启动时进行一系列j2ee规范中的session-config、context-param,welcom-file-list等预处理来准备提供服务,接收请求之前会运行listener,filter等对请求做预处理,这些都不是本文要关心的。

6、终于在第3或第4步等待这么久的servlet要处理了,web服务器传给容器的地址,就好像一个标准输入的文本,容器监听程序读取地址,然后解析对应的类,并尝试调用类的对象。容器管理所有servlet对象的生命周期,对象保存在容器中重复使用,容器根据注册在web.xml中的类寻找对象,如果没有,则会创建一个该类的对象并运行其init方法,当有请求时,调用对象的service方法。并将servlet的输出流(HttpServletResponse.getWriter())作为返回的结果,并且完全按照html格式输出。

7、容器将结果返回给浏览器,浏览器解析http报文,解释html文件,显示。

三、cgi是什么

除了java之外,还有很多语言都可以做动态网站,比如asp、.net,虽然只看过一眼,猜想大概和java的类似,有自己的容器负责处理。但是其他语言貌似都是用cgi实现,那么cgi是什么,虽然百度(鄙视我吧)了一下定义,完全没搞清楚,继续找吧。没有写过cgi,只能顺藤摸瓜的半猜半看了。

cgi其实是一套web服务器和各种语言通信的协议,Common Gateway Interface通用网关接口,其实web服务器需要通信的东西不多。

1、主要是告诉后台程序,传了什么参数过来(除了用户手工填写的参数,还有浏览器相关、http协议相关的一些参数),后台程序如果通过主程序参数传入非常不通用而且复杂,所以cgi规定了一套环境变量,让http请求的相关参数全部存在环境变量中,那么所有后台语言都可以引用环境变量的参数值。

2、解决了传参问题,那么就是如何运行了,在apache(web服务器)中,可以在httpd.conf中配置程序执行器,例如perl语言就用perl.exe(windows中),web服务器会用浏览器请求的地址生成本地文件的路径,作为perl.exe的运行参数。当然如果命令行需要其他的参数,也可以在web服务器中配置。

3、执行完后,后台程序输出到标准输出流的结果会被web服务器捕获(当然也是html格式的),封装成http包发送给浏览器。

4、浏览器解析显示。

可以看出,cgi每次请求都重新执行后台程序的解析工作,进程不像java一样在容器中可以重复利用。有个叫fastcgi的就是解决这个问题的,它是一个进程管理器,让进程能重复利用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值