《Servlet和JSP技术简介(外文翻译)》修改意见稿
1、“.....它是个中间层,负责连接来自浏览器或其他客户端和服务器上的数据库或应用程序。的工作是执行下面的任务,如图所示。图读取客户端发送的显式数据。客户端用户般在页面的表单中输入这些数据。然而,数据还有可能来自或定制的客户程序。读取由浏览器发送的隐式请求数据。图中显示了条从客户端到服务器的单箭头,但实际上从客户端传送到服务器的数据有两种,它们分别为用户在表单中输入的显式数据,以及后台的信息。两种数据都很重要。信息包括浏览器所能识别的媒体类型和压缩模式等。生成结果。这个过程可能需要访问数据库执行或调用调用服务,或者直接计算得出对应的响应。实际的数据可能存储在关系型数据库中。但是该数据库可能不理解,或者不能返回形式的结果,所以浏览器不能直接与数据库进行会话......”。
2、“.....为了安全上的考虑,我们也不希望让它这么做。对应大多数其他应用程序,也存在类似的问题。因此,我们需要中间层从流中提取输入数据,与应用程序会话,并将结果嵌入到文档中。向客户发送显式数据即文档。这个文档可以用各种格式发送,包括文本或,二进制图像,甚至可以是建立在其他底层格式之上的压缩格式,如。但是,到目前为止,式最常用的格式,故而的重要任务之就是将结果包装到中。发送隐式的响应数据。图中显示了条从中间层到客户端的单箭头。但是,实际发送的数据有两种文档本身,以及后台的信息。同样,两种数据对开发来说都是至关重要的。响应数据的发送过程涉及告知浏览器或其他客户程序所返回文档的类型如,设置和缓存参数,以及其他类似的任务......”。
3、“.....服务器无需调用就可以处理这些请求。然而,许多情况下静态的结果不能满足要求,我们需要针对每个请求生成个页面。实时构建页面的理由有很多种网页基于客户发送的数据。例如,搜索引擎生成的页面,以及在线商店的订单确认页面,都要针对特定的用户请求而产生。在没有读取到用户提交的数据之前,我们不知道应该显示什么。要记住,用户提交两种类型的数据显示即表单的数据和隐式即请求的报头。两种输入都可用来构建输出页面。基于值针对具体用户构建页面的情况尤其普遍。页面由频繁改变的数据导出。如果页面需要根据每个具体的请求做出相应的改变,当然需要在请求发生时构建响应。但是,如果页面周期性地改变,我们可以用两种方式来处理它周期性地在服务器上构建新的页面和客户请求无关,或者仅仅在用户请求该页面时再构建......”。
4、“.....但后种方式常常更为方便,因为它只需简单地等待用户的请求。例如,天气预报或新闻网站可能会动态地构建页面,也有可能会返回之前构建的页面如果它还是最新的话。页面中使用了来自公司数据库或其他数据库断数据源的信息。如果数据存储在数据库中,那么,即使客户端使用动态内容,比如,我们依旧需要执行服务器端处理。想象以下,如果个搜索引擎网站完全使用,那么用户将会看到正在下载的,请等待,。显然,这样很愚蠢这种情况下,我们需要与数据库进行会话。从客户端到层再到数据库三层结构,要比从直接到数据库二层结构更灵活,也更安全,而性能上的损失很少甚至没有。毕竟数据库调用通常是对速度影响最和不需要小红心编写。如果他们的项目变得更庞大......”。
5、“.....该服务器支持分布式应用。同样,他们的和没有任何部分需要重写。如果项目变得极为庞大,错综复杂,他们或许希望使用来封装他们的商业逻辑。因此,他们可以切换到或。同样,不需要对和做出更改。最后,如果他们的项目变得更庞大,他们或许将他从转移到运行的大型机上。他们依旧还是不需要做出任何更改。安全传统程序中主要的漏洞来源之就是,程序常常由通过的操作系统外壳来执行。因此,程序必须仔细地过滤掉那些可能被外壳特殊处理的字符,如反引导和分号。实现这项预防措施的难度可能超出我们的想象,在广泛应用的库中,不断发现由这类问题引发的弱点。问题的第二个来源是,些程序用不自动检查数组和字符串边界的语言编写而成。例如,在和中,可以分配个个元素的数组......”。
6、“.....这完全合法。因而,如果程序员忘记执行这项检查,就会将系统暴露在蓄意或偶然的缓冲区溢出攻击之下。不存在这些问题。即使执行系统调用激活本地操作系统上的程序,它也不会用到外壳来完成这项任务。当然,数组边界的检查以及其他内存包含特性是编程语言的核心部分。主流虽然存在许多很好的技术,但是,如果提供商不支持他们,或开发人员不知道如何使用这些技术,那么它们的优点又如何体现呢和技术得到服务器提供商的广泛支持,包括,万维网联盟,以及其他服务器。存在几种低廉的插件,通过应用这些插件,和也同样支持和技术,它们运行在,和大型机操作系统之上。它们用在航空业电子商务在线银行搜索引擎门户大型金融网站以及成百上千您日常光顾的其他网站。当然......”。
7、“.....但我们的立场是服务器端本非项新的为经证实的技术大的步骤,因而,经过中间层可以执行高速缓存和连接共享。理论上讲,并非只用于处理请求的服务器或应用服务器,它同样可以用于其他类型的服务器。例如,能够嵌入到或邮件服务器中,扩展他们的功能。而且,用于会话启动协议服务器的最近已经被标准化参见。但在实践中,的这种用法尚不流行,在此,我们只论述。相对于传统的优点和传统及许多类技术相比,更高效更易用更强大更容易移植更安全也更廉价。高效应用传统的,针对每个请求都用启动个新的进程。如果程序自身相对比较简短,那么启动进程的开销会占用大部分执行时间。而使用,虚拟机会直运行,并用轻量级的线程处理每个请求,而非重量级的操作系统进程。类似地,应用传统的技术......”。
8、“.....那么程序的代码会载入内存次。同样的情况,如果使用,则启动个线程,但是仅仅载入类的单副本。这种方式减少了服务器的内存需求,通过实例化更少的对象从而节省了时间。最后,当程序结束对请求的处理之后,程序结束。这种方式难以缓存计算结果,保持数据库连接打开,或是执行依靠持续性数据的其他优化。然而,会直停留在内存中即使请求处理完毕,因而可以直接存储客户请求之间的任意复杂数据。便利提供大量的基础构造,可以自动分析和解码的表单数据,读取和设置报头,处理,跟踪会话,以及其他此类高级功能。而在中,大部分工作都需要我们资金完成。另外,如果您已经了解了编程语言,为什么还有学校呢您已经承认应用技术编写的代码要比,或编写的代码更可靠,且更易重用......”。
9、“.....能够直接于服务器对话,而常规的程序做不到这点,至少在不使用服务器专有的情况下是这样。例如,与服务器的通信使得讲相对转换成具体的路径名变得更为容易。多个还可以共享数据,从而易于实现数据库连接共享和类似的资源共享优化。还能维护请求之间的信息,使得诸如会话跟踪和计算结果缓存等技术变得更为简单。可移植性使用编程语言,并且遵循标准的。所有主要的服务器。实际上都直接或通过插件支持。因此。为编写的,可以不经过任何修改地在或者上运行。他们是平台企业版的部分,所以对的支持越来越普遍。廉价对于开发用的网站低容量或中等容量网站的部署,有大量免费或极为廉价的服务器可供选择。因此,通过使用和,我们可以从免费或廉价的服务器开始......”。