Java Servlet简介

Web Application历史

为了了解servlet的能力,我们需要回顾一些其他能够生成web application的方式。

通用网关接口CGI

通用网管接口(Common Gateway Interface, CGI),是早期一种产生动态内容的有效技术。一个服务器传递某些请求(request)到外部程序。这个程序的输出将动态内容传递给客户端。CGI的特性使得在网页上实现多种新功能成为了可能,并且迅速成为实际上的应用标准。
CGI的第一个缺点在于,它对于客户端作出的每个请求,必须创建CGI程序的一个新实例,这样占用大量的内存资源。
这里写图片描述
第二个缺点在于,CGI程序一旦启动后,就不能跟web服务器进行交互,不能利用服务器的能力,因为它是跑在一个独立的进程中的。比如说,CGI不能写服务器的日志文件。

FastCGI

一个叫Open Market的公司研发了一种标准CGI的替代版本,叫FastCGI。它的特点在于会为每一个FastCGI创建一个持久进程。

PerlEx

跟FastCGI类似。

mod_perl

Apache服务器提供的CGI,可以在服务器上预编译,跑起来很快,只能用在Apache服务器上。

其他方式

包括ASP和服务端的JavaScript,能够动态地创建web服务。

Java Servlet

下面开始介绍Java Servlet。
Servlet是一种通用服务器扩展,一种能够被动态加载用来扩展服务器功能的的Java类。
Servlet和专用服务器扩展相似,不同的是它运行在服务器的JVM上,所以它是安全和便携的。
Servlet仅在服务器的域内运行:与applet不同,它们在Web浏览器不需要Java支持。
这里写图片描述
与CGI不同,Servlet不需要多进程来处理不同的请求,它可以处理通过一个进程的不同线程来处理不同请求,也可以分散在多个后端服务器中的多个进程内的线程处理。这意味着servlet是高效和可扩展的。由于servlet与Web服务器进行双向通信,因此可以与服务器进行非常密切的交互,以便进行CGI脚本不可能执行的操作。

支持Servlets

跟Java一样,servlet是可以扩展的。servlet支持所有支持Java的平台。Servlet不是核心Java API的一部分。但是,它们现在被认可为J2EE平台的一部分。
javax.servlet和javax.servlet.http包构成了Servlet API。
除了servlet类之外,还需要一个servlet转换器(技术上称为servlet容器,有时称为servlet引擎),以便您可以测试和部署servlet。您选择的servlet容器部分取决于您正在运行的Web服务器。有三种类型的servlet容器:独立的,附加的和可嵌入的。

独立Servlet容器

一个独立的servlet容器是一个包含对servlet的内置支持的服务器。这样一个容器的优点在于所有的工作都是开箱即用的。然而,一个缺点是您必须等待新版本的Web服务器才能获得最新的servlet支持。另一个缺点是服务器供应商通常仅支持供应商提供的JVM。提供独立支持的Web服务器包括:
Apache的Tomcat服务器。该服务器可以独立运行,也可以作为附加组件,为Apache或其他服务器提供servlet支持。甚至可以用作嵌入式容器伴随着Tomcat,Apache开发了javax.servlet和javax.servlet.http包的标准实现。
iPlanet (Netscape) Web Server Enterprise Edition (Version 4.0 and later)。
Zeus Web Server。
Sun’s Java Web Server

附加的Servlet容器

附加servlet容器用作现有服务器的插件,它将Servlet支持添加到不是最初设计为servlet的服务器上,这些servlet使用较差或过时的servlet实现。

嵌入的Servlet容器

可嵌入容器通常是可以嵌入另一个应用程序的轻量级servlet部署平台。该应用程序成为真正的服务器。

Servlet的能力

我们认为,servlet比其他方法提供了许多优势,包括可移植性,能力,效率,耐力,安全性,优雅性,集成性,可扩展性和灵活性

可移植性

用Java写的,可以跨平台使用。

能力

Servlet可以利用核心Java API的全部功能:网络和URL访问,多线程,图像处理,数据压缩,数据库连接(JDBC),对象序列化,国际化,远程方法调用(RMI)和遗留集成(CORBA)。
Servlet还可以利用J2EE平台包括对Enterprise JavaBeans(EJB),分布式事务(JTS),标准化消息传递(JMS),目录查找(JNDI)和高级数据库访问(JDBC 2.0))的支持的J2EE平台。可用于servlet的标准API列表继续增长,使Web应用程序开发的任务更快,更轻松,更可靠。
Servlet可以使用第三方Java类和JavaBeans组件,使用第三方代码实现正则表达式搜索、数据库访问等。
Servlet也非常适合启用客户端/服务器通信。使用基于Java的小程序和基于Java的servlet,您可以在客户端/服务器通信中使用RMI和对象序列化,这意味着您可以在客户端上使用与服务器上相同的自定义代码。在服务器端使用Java以外的语言要复杂得多,因为您必须开发自己的自定义协议来处理通信。

安全性

Servlets支持多个级别的安全编程实践。由于它们是用Java编写的,所以servlet继承了Java语言的强大类型安全性。此外,Servlet API被实现为类型安全的。

集成性

Servlet与服务器紧密集成。这种集成允许servlet能和服务器协作更多CGI程序不能做的事情。例如,servlet可以使用服务器来翻译文件路径,执行日志记录,检查授权和执行MIME类型映射。Server-specific的扩展可以做更多事情,但是这个过程通常要复杂得多,容易出错。

可扩展性和灵活性

发布了29 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/u014730658/article/details/78313727