`

为什么要使用Servlet的背景(通用网关,进程和线程的介绍)

阅读更多
客户端请求,服务器端提供信息
    无论我们通过本地机即客户端上网做什么,比如搜索一个查询,打开一个邮件,请求所得到的页面还有各种各样的数据都是从服务器端得到的。服务器是一个设备,它可以根据网络上的不同的客户所提交的请求而提供不同的信息。那么要实现数据在WEB上传输,最开始的时候是通过编写CGI(Common Gateway Interface)通用网关接口程序来实现的。


CGI 通用网关接口

    通用网关接口其实就是一个服务器方的接口程序,这套接口描述了WEB服务器与同一计算机的软件通信方式,是一个外部网关程序和诸如HTTP这样的信息服务器之间的接口标准。
 
    如同一座桥,把网页和服务器中的执行程序连接起来,客户端的指令传递给服务器,服务器执行的结果再返回给HTML页面。

    WEB服务器寻找的普通的HTML文档是静态的,不会改变的文件,然后一个CGI程序是实时执行的,以便输出动态信息,像计数器就可以通过CGI程序来完成一个动态的交互。

    虽然利用CGI根据用户请求生成动态主页是一种传统的方法,但是CGI一个很明显的缺点是:CGI是根据浏览器的HTTP请求激活响应进程,每一个请求对应一个进程,当同时有很多请求时,程序挤占系统资源,造成效率低下。



程序,进程和线程的区别

    程序就是一组指令的集合,是静态的。

    进程则是一组指令序列在处理机上的一次执行过程,是动态的。进程具有动态,并行,独立,异步等特性;一个进程由创建而产生,由调度而进入执行,在资源不能满足时挂起,由撤销而消亡。因此,一个进程是由生命的,且唯一的对应于一个 .exe 文件。

    点击结束一个进程将终止一个程序的运行,那么所谓的进程其实就是一个程序的一次执行过程。

    线程是进程中某一个单一顺序的控制流,也被称为轻量进程(light-weight-processes) ,它是一个程序的最小执行单元,可以理解为是进程中的实体。

    一个进程是可以拥有多个线程,一个线程必须要有一个父进程。

    线程不拥有系统资源,只有运行必须的一些数据结构。

    父进程的其它线程共享该进程的所拥有的全部资源。

    线程是对CPU单元的独立占有的最小单位,每个线程共享进程的数据,在每个进程被创建的时候只有一个主线程。线程可以创建和撤销线程,从而实现程序的并发执行。一般,线程具有就绪,阻塞和运行三种基本状态。

    线程的优点就在于:使同一个程序能有几个并行执行的路径,提高了执行速度,线程需要的系统开销比进程要小。

    总结下来,那么就能够很清楚的知道当我们用CGI通用网关接口来实现数据在WEB上的传递时,对于客户端的每一个请求必须开启一个新实例的进程,可想而知它的速度和效率。

    为了避免这种损耗,解决这个问题,我们就引入了采用多线程来代替进程的技术—JAVA方向的Servlet技术,能够很清楚的看到Servlet的生命周期,只需要初始化一次Servlet,以后就可以反复的使用。


小总结,打个比方

如果有10个人在线,那么CGI就得开10个进程。而类似于JSP,ASP 都是一个进程处理多个请求的,无论多少人在线,都只有一个进程。并且Servlet使用标准的API,可以被许多WEB服务支持,与平台无关。


转载请注明出处  http://lvp.iteye.com
分享到:
评论

相关推荐

    Java_Servlet和JSP教程

    Java Servlet是一种Java技术,它被设计用来处理Web服务器上的动态内容,是对传统CGI(通用网关接口)编程的一种高效替代。Servlet的主要特点是: 1. **高效**:与CGI相比,Servlet在服务器端运行时以线程的方式处理...

    韩顺平2011servlet笔记

    Servlet技术是Java对CGI(通用网关接口)的改进,能够更好地处理HTTP请求和响应。在Java基础(如面向对象、集合、多线程等)、数据库编程(如JDBC与Oracle、MySQL等数据库的交互)以及Web前端技术(HTML、CSS、...

    servlet api

    它是Java Servlet规范的一部分,由Java EE(现在称为Jakarta EE)定义,由Sun Microsystems(现为Oracle)最初开发,并由Java社区进程(JCP)维护。Servlet API提供了一系列接口和类,允许开发者创建动态、交互式的...

    java 6官方 api

    2. **高性能**:与CGI(通用网关接口)相比,Servlet通常具有更高的性能,因为它们在Web服务器进程中驻留,而不是为每个请求创建新的进程。 3. **标准化**:Servlet使用标准的API,这些API在Java Servlet规范中定义...

    Java面试题几道基础题总结

    线程的 stop() 和 suspend() 方法不推荐使用的原因 - **`stop()` 方法**:该方法已被标记为废弃,因为它可能会导致数据不一致和资源泄露等问题。当调用线程的 `stop()` 方法时,线程会立即停止运行,这可能导致线程...

    2023年JavaWeb知识点.docx

    十二、CGI(通用网关接口)的缺陷 CGI的一个请求创建一个进程,并发解决性能极低。 十三、Web容器 Web容器负责管理和运营Servlet,有Tomcat、Jboss、WebLogic、WebSphere、Oracle9i AS等。 十四、Servlet中哪个...

    图书管理系统外文翻译.docx

    - 高效:Servlet 不会为每个请求创建一个新的进程或线程,而是通过单个实例处理多个请求,提高了性能。 - 易于编程:提供了强大的 API 和框架支持。 - 安全性高:可以在服务器端执行敏感操作,避免了客户端的安全...

    JavaWeb面试题

    - **资源消耗**:CGI的频繁进程创建和销毁导致更多的系统资源消耗,而Servlet更节省资源。 - **语言支持**:CGI允许用多种语言编写,如C、C++、Perl等,而Servlet通常是用Java编写。 3. **forward()与redirect()...

    JavaWeb期末考试题必过宝典.docx

    - **运行环境**:Servlet运行在服务器进程中,而CGI(Common Gateway Interface,通用网关接口)每次接收到请求时都会创建一个新的进程来处理。 - **线程模型**:Servlet通过多线程的方式运行`service()`方法,这...

    Java Web课件

    - **起源**:Servlet最初是为了克服早期Web开发中CGI(通用网关接口)的局限性而设计的。 - **Servlet与CGI的对比**: - **性能差异**:当调用CGI程序时,服务器需要启动一个新的进程来执行CGI程序,这会导致性能...

    Java笔试题目汇总122题

    一个进程(程序)至少有一个线程,如果一个进程只有一个线程,那么该进程和线程是等价的,没有区别。简单来说,线程是程序执行流的最小单元。一个标准的线程由线程ID、当前指令指针(PC)、寄存器集合和堆栈组成。 ...

    java笔试面试经典问题

    - **CGI**:通用网关接口,每个请求都会创建一个新的进程,处理完请求后进程结束,效率低,不适合高并发场景。 - **Servlet**:在Web服务器中常驻,一个Servlet实例可以服务于多个请求,性能更好。Servlet还支持更...

    JavaEE Niit 试题

    - **描述**:Servlet和CGI(Common Gateway Interface,通用网关接口)都是处理Web请求的技术。 - **细节**: - CGI是一种标准,允许Web服务器执行外部程序并返回结果给用户。 - Servlet是由Sun Microsystems定义...

    java面试题题库如果让他刚刚热天个人

    - **CGI**(通用网关接口)是早期的Web服务接口,每个请求都会启动新的进程,处理效率低,资源消耗大。 此外,面试中还可能涉及其他知识点,如集合框架、异常处理、垃圾回收机制、多线程、IO流、设计模式、JVM内存...

    从事java面试的同志必看

    从给定的文件标题、描述、标签以及部分内容中,我们可以提炼出一系列与Java面试相关的经典知识点,这些知识点覆盖了Java的基础语法、数据类型、集合框架、异常处理、多线程、以及高级主题如EJB和Servlet等。...

    Web学习知识点总结

    为了解决这个问题,出现了CGI(通用网关接口),它允许服务器与外部应用程序交互,但CGI的每次请求都会启动新进程,消耗大量资源。Java通过Web容器和Servlet解决了这个问题。Servlet是运行在Web服务器上的Java程序,...

Global site tag (gtag.js) - Google Analytics