CGI与Servlet的区别和联系

1. 定义:

CGI(Common Gateway Interface 公共网关接口)是HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。

 

2. 功能:

绝大多数的CGI程序被用来解释处理杰自表单的输入信息,并在服 务器产生相应的处理,或将相应的信息反馈给浏览器。CGI程序使 网页具有交互功能。

 

3. 运行环境:

CGI程序在UNIX操作系统上CERN或NCSA格式的服务器上运行。 在其它操作系统(如:windows NT及windows95等)的服务器上 也广泛地使用CGI程序,同时它也适用于各种类型机器。

 

4. CGI处理步骤:

  ⑴通过Internet把用户请求送到服务器。

  ⑵服务器接收用户请求并交给CGI程序处理。

  ⑶CGI程序把处理结果传送给服务器。

  ⑷服务器把结果送回到用户。

 

 

Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面。 它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。 Servlet是位于Web 服务器内部的服务器端的Java应用程序,与传统的从命令行启动的Java应用程序不同,Servlet由Web服务器进行加载,该Web服务器必须包含支持Servlet的Java虚拟机。

工作模式:客户端发送请求至服务器;服务器启动并调用Servlet,Servlet根据客户端请求生成响应内容并将其传给服务器;服务器将响应返回客户端。

 

 

Java Servlet与CGI (Common Gateway Interface 公共网关接口)的比较:

  与传统的CGI和许多其他类似CGI的技术相比,Java Servlet具有更高的效率,更容易使用,功能更强大,具有更好的可移植性,更节省投资。在未来的技术发展过程中,Servlet有可能彻底取代CGI。

  在传统的CGI中,每个请求都要启动一个新的进程,如果CGI程序本身的执行时间较短,启动进程所需要的开销很可能反而超过实际执行时间。而在Servlet中,每个请求由一个轻量级的Java线程处理(而不是重量级的操作系统进程)。

  在传统CGI中,如果有N个并发的对同一CGI程序的请求,则该CGI程序的代码在内存中重复装载了N次;而对于Servlet,处理请求的是N个线程,只需要一份Servlet类代码。在性能优化方面,Servlet也比CGI有着更多的选择。

 

  * 方便  

  Servlet提供了大量的实用工具例程,例如自动地解析和解码HTML表单数据、读取和设置HTTP头、处理Cookie、跟踪会话状态等。

  * 功能强大

  在Servlet中,许多使用传统CGI程序很难完成的任务都可以轻松地完成。例如,Servlet能够直接和Web服务器交互,而普通的CGI程序不能。Servlet还能够在各个程序之间共享数据,使得数据库连接池之类的功能很容易实现。

  * 可移植性好

Servlet用Java编写,Servlet API具有完善的标准。因此,为IPlanet Enterprise Server写的Servlet无需任何实质上的改动即可移植到Apache、Microsoft IIS或者WebStar。几乎所有的主流服务器都直接或通过插件支持Servlet。

转载于:https://www.cnblogs.com/MuyouSome/p/3938203.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/273613.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis sorted set 类型操作及常用命令

七个原则 Redis 是一个操作数据结构的语言工具,它提供基于 TCP 的协议以操作丰富的数据结构。在 Redis 中,数据结构这个词的意义不仅表示在某种数据结构上的操作,更包括了结构本身及这些操作的时间空间复杂度。Redis 定位于一个内存数据库&am…

Gradle中的buildScript代码块

在编写Gradle脚本的时候,在build.gradle文件中经常看到这样的代码: build.gradle1 2 3 4 5 6 7 8 9 buildScript {repositories {mavenCentral() } }repositories {mavenCentral() }这样子很容易让人奇怪,为什么repositories要声明两次哪&…

Redis List 类型操作及常用命令

七个原则 Redis 是一个操作数据结构的语言工具,它提供基于 TCP 的协议以操作丰富的数据结构。在 Redis 中,数据结构这个词的意义不仅表示在某种数据结构上的操作,更包括了结构本身及这些操作的时间空间复杂度。Redis 定位于一个内存数据库&am…

Hibernate查询之Criteria查询

转自:http://www.cnblogs.com/Laupaul/archive/2012/02/15/2353194.html Criteria是一种比hql更面向对象的查询方式。Criteria 可使用 Criterion 和 Projection 设置查询条件。可以设置 FetchMode( 联合查询抓取的模式 ) ,设置排序方式,Crite…

IntelliJ Idea 常用插件

必备插件 Lombok 使用此插件可以使得我们的代码简洁,不用去写很多的set/get方法。使用之前需要引入 lombok 插件依赖。 JsonFormat 基于GsonFormat。快速将JSON字符串转换为实体类。它支持Jackson注释。 MyBatis Log Plugin 将 SQL 直接打印在控制台,不用…

jQuery 学习笔记(jQuery: The Return Flight)

第一课. ajax:$.ajax(url[, settings]) 练习代码: $(document).ready(function() {$("#tour").on("click", "button", function() {$.ajax(/photos.html, {success: function(response) {$(.photos).html(response).fadeI…

Redis Hash 类型操作及常用命令

七个原则 Redis 是一个操作数据结构的语言工具,它提供基于 TCP 的协议以操作丰富的数据结构。在 Redis 中,数据结构这个词的意义不仅表示在某种数据结构上的操作,更包括了结构本身及这些操作的时间空间复杂度。Redis 定位于一个内存数据库&am…

Redis set 类型操作及常用命令

七个原则 Redis 是一个操作数据结构的语言工具,它提供基于 TCP 的协议以操作丰富的数据结构。在 Redis 中,数据结构这个词的意义不仅表示在某种数据结构上的操作,更包括了结构本身及这些操作的时间空间复杂度。Redis 定位于一个内存数据库&am…

缓存初解(五)---SpringMVC基于注解的缓存配置--web应用实例

之前为大家介绍了如何使用spring注解来进行缓存配置 (EHCache 和 OSCache)的简单的例子,详见 Spring基于注解的缓存配置--EHCache AND OSCache 现在介绍一下如何在基于注解springMVC的web应用中使用注解缓存,其实很简单&#xff0…

Redis String 类型操作及常用命令

七个原则 Redis 是一个操作数据结构的语言工具,它提供基于 TCP 的协议以操作丰富的数据结构。在 Redis 中,数据结构这个词的意义不仅表示在某种数据结构上的操作,更包括了结构本身及这些操作的时间空间复杂度。Redis 定位于一个内存数据库&am…

于我,过去,现在和未来 —— 西格里夫·萨松

In me, past, present, future meet            于我,过去、现在和未来To hold long chiding conference              商讨聚会 各执一词 纷扰不息My lusts usurp the present tense             林林总总的 欲望,…

Java assert关键字

Java assert关键字 Assert 简介 Java2在1.4中新增了一个关键字:assert。在程序开发过程中使用它创建一个断言(assertion)。语法格式有两种: assert condition; 这里condition是一个必须为真(true)的表达式。如果表达式的结果为true,那么断言为…

linux 二级域名设置

首先,你的拥有一个有泛域名解析的顶级域名,例如: domain.com  其次,在 httpd.conf 中打开 mod_rewrite  之后,在 httpd.conf 的最后,添加以下内容:  RewriteEngine on  RewriteMap lowe…

Spring Boot @Conditional 注解

Spring Boot Conditional注解 Conditional是Spring4新提供的注解,它的作用是按照一定的条件进行判断,满足条件的才给容器注册Bean。 Conditional注解定义 Target({ElementType.TYPE, ElementType.METHOD}) Retention(RetentionPolicy.RUNTIME) Documente…

计算几何 半平面交

LA 4992 && hdu 3761 Jungle Outpost 杭电的有点坑啊。。一直爆内存,后来发现大白的半平面交模板那里 point *p new point[n]; line *q new line[n]这里出了问题,应该是在函数里面申请不了比较大的数组,所以爆内存。。我在全局定义…

Maven 强制导入jar包

场景 有时候因为各种原因(依赖有了,jar包有了),项目中就是没有这个jar包。 在需要强导的项目中创建lib文件夹,将需要强导的jar包访问lib中。添加依赖${pom.basedir}:获取当前所在的项目目录 ${pom.basedir&…

0910

我累得时候希望你能在我身边,在你的怀里好好的睡一觉。转载于:https://www.cnblogs.com/zhanzhao/p/3964175.html

《Java 高并发》03 线程的生命周期

相关概念 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。 一个进程是一个独立的运行环境,它可以被看作一个程序或者一个应用。而线程是在进程中执行的一个任务。Java运行环境是一个包含…

OpenLayers3 online build

openlayers3使用了一个比较复杂的build工具,从github上下载下来的代码中并没有build之后的版本,要配置build环境又比较繁琐,好在官方的example中提供了在线的版本,下面就是link: http://openlayers.org/en/v3.0.0/buil…

Mysql 必知必会(一)

文章案例所需的SQL文件,点击下载 使用MySQL 进入mysql安装目录下的bin目录: 连接Mysql:mysql -uroot -p123456;显示Mysql下的所有数据库:show databases;切换数据库:use local;显示数据库下所有表名:show t…