servlet出现的背景

1. web运行模式

所谓的出现背景,其实就是“为什么会想到创造servlet”。在解释这个问题需要了解的前提的是Web的运行模式,Web是以客户端/服务器端的模式,通过HTTP协议来交互的。奠定了这个基础之后,再来看无论我们通过本地机即客户端上网做什么,比如搜索一个查询,打开一个邮件,请求所得到的页面还有各种各样的数据都是从服务器端得到的。服务器是一个设备,它可以根据网络上的不同的客户所提交的请求而提供不同的信息。所以总结一句话就是:客户端请求,服务器端提供信息

2.CGI和servlet实现数据交互

下面就很自然的想到一个问题,如何实现客户端和服务端在Web上的数据交互。这个问题的引出了servlet出现的背景。

最开始的时候是通过编写CGI(CommonGateway Interface)通用网关接口程序来实现的。那么CGI这个东西到底是怎么实现,其实我也不是很懂,但是这个不是我现在需要最需要了解的,我需要了解的是CGI能够完成什么。很明显,前面提到了CGI实现的是在Web上客户端和服务端的数据交互。但是一开始我也提到了这个是最开始的时候使用的东西,后面servlet就将CGI代替了。写到这里就了解到了一个很重要的信息,servlet能够完成的东西就是CGI完成的东西,即在客户端和服务器端进行数据交互。

3.CGI和servlet的区别

那么下一个问题是为什么servlet会将CGI代替。现在就需要了解一下这两个东西一些实现原理的东西。

CGI是根据浏览器的HTTP请求激活响应进程,每一个请求对应一个进程,当同时有很多请求时,程序挤占系统资源,造成效率低下。

servlet是引入了采用多线程来代替进程的技术。

所以可以看到两个技术其实就是进程和线程的区别,那么进程和线程到底有什么区别呢?

1、程序:程序是为完成特定任务、用某种语言编写的一组指令的集合。指一段静态的代码。

下图就是一段c++代码:

2、进程:从程序代码的加载、执行到执行完毕的动态过程。

每个进程所占用的系统资源相对独立,并有它自己的专用的内存区域(PCB进程控制块)。同一个应用程序可以被多次加载到系统的不同内存区域,分别执行,形成不同的进程。是系统进行调度和资源分配的一个独立单位。

进程和程序的联系:进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体,我们称其为进程。

3、线程:线程是比进程更小一级的执行单元,是对CPU单元的独立占有的最小单位。

线程和进程的联系:线程不能独立存在,必须存在于进程中,各线程间共享进程空间的数据。一个进程在其执行过程中,可以产生多个线程,从而实现程序的并发执行。每个线程也有它自身的产生、存在和消亡的过程,也是一个动态的概念。

线程创建、销毁和线程间切换的代价远小于进程,又称为轻量级进程(lightweight process)

使用线程的好处:

系统负担小,主要是CPU的分配。

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

有效的利用系统资源、提高程序的数据吞吐量、更好的发挥硬件的性能

4.总结

总结下来,那么就能够很清楚的知道当我们用CGI通用网关接口来实现数据在WEB上的传递时,对于客户端的每一个请求必须开启一个新实例的进程,可想而知它的速度和效率。为了避免这种损耗,解决这个问题,我们就引入了采用多线程来代替进程的技术—JAVA方向的Servlet技术,能够很清楚的看到Servlet的生命周期,只需要初始化一次Servlet,以后就可以反复的使用。

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

servlet出现的背景,布布扣,bubuko.com

时间: 2024-11-09 11:02:34

servlet出现的背景的相关文章

探秘Tomcat——一个简易的Servlet容器

即便再简陋的服务器也是服务器,今天就来循着书本的第二章来看看如何实现一个servlet容器. 背景知识 既然说到servlet容器这个名词,我们首先要了解它到底是什么. servlet 相比你或多或少有所了解.servlet是用java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容.狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者. 容器 容器的概念很大,在这里

Servlet的历史与规范

一.Servlet历史 1. Servlet的由来 背景 上世纪90年代,随着Internet和浏览器的飞速发展,基于浏览器的B/S模式随之火爆发展起来. 最初,用户使用浏览器向WEB服务器发送的请求都是请求静态的资源,比如html.css等. 但是可以想象:根据用户请求的不同动态的处理并返回资源是理所当然必须的要求. CGI 必须要满足上述需求,所以CGI(Common Gateway Interface)出现了.CGI程序使用C.Shell Script或Perl编写,CGI是为特定操作系统

servlet 过滤器(Filter)(八)

1.servlet过滤器产生背景 项目中我们会遇到这样一类的需求,对访问服务器的用户ip实施过滤,只有在允许名单中的ip才能访问服务,为了实现需求,每当有客户端请求时,我们都会写校验ip的代码,客户端能够访问到的servlet我们都需要这样做,很明显这样做有一个缺点,就是代码冗余,维护不方便,如果验证规则改变,修改起来也特别麻烦. 为了解决以上问题,Filter 技术应运而生. 2.servlet过滤器是什么? servlet过滤器是在java servlet 2.3 中定义的.它能够对serv

<J2EE学习笔记>续上次Servlet部分提升内容 以及JSP的内容纲要

以下全部课件均来自于同济大学刘岩老师的<EnterpriseJavaProgramming> 因为授课语言问题,如果翻译有不正确之处欢迎指正 Section 1. 关于Servlet的部分内容提升 一.如何进行服务器端的重定向 关于服务器的重定向主要有两种方法: 第一种是通过RequestDispatcher(请求分派)类来实现,在Servlet内部通过调用doGet或者doPost函数的request类参数的方法来得到WebContext类来使用getRequestDispatcher类来实

Servlet&amp;jsp基础:第四部分

声明:原创作品,转载时请注明文章来自SAP师太技术博客:www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将追究法律责任!原文链接: http://www.cnblogs.com/jiangzhengjun/p/4289315.html 会话与状态管理... 58 cookie. 58 组成... 58 Set-Cookie2响应头... 59 Cookie请求头... 60 在Servlet中使用Cookie. 61 Cookie类... 61 构

Jsp+servlet 验证码案例

昨晚在csdn看到一位前辈写一个ajax+servlet+jsp验证.顿时心血来潮,在阅读前辈的代码下我亲手体验一下,做了一个验证码生成工具类.以供大家做个參考. 1:加入VeriyCodeUtils类生成验证码图像 package com.servlet; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import jav

Servlet(二)之request和response

一.简介 web服务器收到客户端的Http请求后,会针对每一次请求,分别创建一个用于代表请求的request对象和代表响应的response对象. request和response既然代表请求和响应,那么我们要获取客户端提交过来的数据,只需要找request对象就可以了,要向客户机输出数据,仅仅需要找response对象就行了. Response对象 二.响应 响应行 public void setStatus(int sc)设置状态码 响应头:key:value的形式,一个key可以对应一个v

JAVA Servlet实现验证码

package com.tenlee.servlet; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Random; import javax.servlet.ServletException; import javax.servlet

Servlet之保存用户偏好设置简单功能的实现

写在前面: 先来陈述一下为什么会有这样一个需求和这篇博文. 这是公司的一个项目,我们负责前端,后台服务由其他公司负责.该系统有一个系统偏好设置模块,用户可以设置系统的背景图片等系统样式,因为这是一个比较简单的功能,所以当时没有让后台公司来实现,由自己公司的一个领导编写了一个Servlet.但是由于服务器故障被格式化之后,这个Servlet就丢失了.本来打算跟领导汇报的,但是又怕挨批评,而且这个功能也并不复杂,所以决定自己实现一下吧.但是作为一个对Java一点都不懂的我来说,还是废了不少功夫的,所