JSP和java中的Servlet有什么区别?

1.什么是Servlet?

客户/服务器计算的发展。Java提供了一套完整的客户端/服务器解决方案,其中的程序可以自动下载到客户端并执行,这就是applet。但这只是问题的一半。问题的另一半是Servlet。

Servlet可以被认为是服务器端的applet。Web服务器加载并执行Servlet,就像浏览器加载并执行applet一样。Servlet接收来自客户机的请求(通过Web服务器),执行某些任务,然后返回结果。使用servlet的基本过程如下:

客户端通过HTTP请求。

Web服务器接收请求并将其发送给servlet。如果这个servlet还没有被加载,Web服务器将把它加载到Java虚拟机中并执行它。

servlet将接收HTTP请求并执行一些处理。

servlet将向Web服务器返回一个回复。

Web服务器将从servlet收到的回复发送给客户机。

因为servlet是在服务器上执行的,通常与applet相关的安全问题不需要实现。应该注意,Web浏览器不直接与servlet通信,servlet由Web服务器加载和执行。

Servlet是用Java编写的,所以它们从一开始就是平台无关的。这样,Java可以一次编写,在任何平台任何地方运行的承诺也可以在服务器上实现。Servlet还有一些CGI脚本不具备的独特优势:(我不是很了解CGI,所以不能完全理解这些特点,这也是论坛上的帖子,请见谅)

Servlet是持久的。Servlet只需要被Web服务器加载一次,它们可以在不同的请求之间维护服务(比如数据库连接)。相比之下,CGI脚本是短暂的。对CGI脚本的每个请求都会导致Web服务器加载并执行该脚本。一旦CGI脚本完成,它将从内存中清除,结果将返回给客户端。每次使用CGI脚本,都会导致程序初始化过程的重复执行(比如连接数据库)。

Servlet是独立于平台。如上所述,servlet是用Java编写的,它自然继承了Java的平台独立性。

Servlet是可扩展的。因为servlet是用Java写的,所以它拥有Java能带来的所有优势。Java是一种健壮的、面向对象的编程语言,可以很容易地扩展以满足您的需求。Servlet天生具有这些特征。

Servlet是安全。从外部调用servlet的唯一方法是通过Web服务器。这提供了高级别的安全性,尤其是当您的Web服务器受防火墙保护时。

Setvlet可以在各种客户端上使用。因为servlet是用Java编写,所以可以很容易地在HTML中使用它们,就像使用applet一样。

那么,Servlet是如何执行的呢?如何编写Servlet,它的基本架构是什么?

这些问题将在后面的部分介绍。

2.JSP和Servlet

现在我们对Servlet有了一个大致的了解,接下来我们来谈谈JSP和Servlet的关系。

JSP是一种脚本语言,它封装了Java Servlet系统的接口,简化了Java和Servlet的使用,并通过扩展JSP标签提供了动态执行网页的能力。尽管如此,JSP仍然没有超出Java和Servlet的范围。Java代码不仅可以直接写在JSP页面上,而且JSP在实际运行之前会被翻译成Servlet。JSP在服务器上执行,并将执行结果输出到客户端浏览器。我们可以说它基本上是独立于浏览器的。它不同于JavaScript,JavaScript是客户端的脚本语言,在客户端执行,与服务器无关。那么JSP是什么呢?是Servlet。

JSP和Servlet的主要区别在于JSP提供了一组简单的标签,更好的与HTML结合,让不懂Servlet的人也能制作动态网页。对于不熟悉Java语言的人(比如像我),JSP开发会更方便。JSP修改后,可以马上看到结果,不需要手动编译,JSP引擎会做工作;但servlet缺少编译、重启Servlet引擎等一系列动作。但是在JSP中,HTML是和程序代码混在一起的,Servlet不是。可能大家很困惑,那么Servlet是什么呢?下面简单介绍一下JSP的操作,告诉你如何执行一个JSP文件:

当Web服务器(或Servlet引擎,应用服务器)支持JSP引擎时,JSP引擎会根据JSP语法将JSP文件转换成Servlet代码源文件,然后Servlet会被编译成Java可执行字节码,以通用Servlet模式加载执行。

JSP语法简单,可以方便的嵌入HTML,可以方便的添加动态部分,可以方便的输出HTML。在Servlet中输出HTML时,需要调用特定的方法,需要对引号等字符做特殊处理。将它们作为动态部分添加到复杂的HTML页面比JSP更困难。

除了转换和编译阶段,JSP和Servlet的区别真的不大。

JSP引擎通常构建在Servlet引擎上,Servlet引擎本身就是一个Servlet。它把JSP文件翻译成Servlet源代码,然后调用Java编译器把它们编译成Servlet。这也是JSP第一次调用时慢的原因。第一次编译后,JSP和Servlet的速度是一样的。让我们看看为什么它们在第一次编译后以相同的速度编译:

在整个运行过程中,JSP引擎会检查编译后的JSP(以Servlet的形式)是否比原来的JSP文件新,如果是,JSP引擎就不会编译;如果没有,说明JSP文件比较新,翻译编译的过程要重新执行。

为了深入了解,我们先来看看JSP的运行和开发环境:

浏览器:常见的浏览器有两种:IE和网景。

数据库:常用的数据库有Oracle、SQL Server、Informix、DB2、Sybase、Access、MySQL等。

操作系统:常见的有Windows、Linux和各种Unix系统。

Web服务器:常见的有IIS、Apache、网景企业服务器等。

JSP引擎:一般来说,JSP引擎都是基于Servlet引擎,以Servlet的形式出现。同时,在各种免费和商业引擎的实现中,Servlet引擎和JSP引擎通常是一起出现的,我们从某种意义上成为Servlet/JSP引擎,或者Jsp引擎。

JSP引擎是一个系统级的实体,可以提供JSP和Servlet操作支持,管理它们的生命周期。

第一次请求JSP页面时,JSP引擎会将JSP原始文件转换成Servlet源代码,然后调用Java编译器,编译成Servlet,在Servlet引擎中执行。当再次有请求时,JSP引擎会查看编译后的JSP是否比原来的JSP文件新,如果是,就运行Servlet;如果没有,则意味着文件已经被更新,并且将再次执行转换和编译的过程。

说到这里,JSP和Servlet的关系就基本说清楚了。从我的感觉来说,JSP是可以用的,简单方便,和Bean配合的很好,功能很强大。Servlet为什么又出现了,有什么用?而且它的写法也比较复杂。为了让问题更清晰,我想在这里说一下历史,顺便说一下为什么要用Servlet,Servlet有什么好处。

简史:(摘自某论坛,删节重写)

简单来说,孙最早开发的SERVLET,功能强大,系统设计先进。但是它仍然使用老的CGI方法,逐句输出HTML句子,这样对于HTML的编写和修改非常不方便。

后来孙推出了类似ASP的嵌入式JSP(Servlet开发的产物),将JSP标签嵌入到HTML语句中,大大简化和方便了网页的设计和修改。ASP、PHP、JSP等新型网络语言都是嵌入式脚本语言。

从三层网络结构来看,一个网络项目至少分为三层:数据层、业务层、表示层。当然,也可以更复杂。SERVLET对于编写业务层很强大,但是对于编写表示层很不方便。JSP主要是为了方便编写表示层而设计的。当然也可以写业务层。习惯写ASP、PHP、CGI的朋友,往往会不自觉地把表示层和业务层混在一起。把数据库处理信息放在JSP里,其实应该放在业务层。

按照孙自己的推荐,JSP应该只存储与表示层相关的内容,也就是只放输出HTML页面的部分。而所有的数据计算、数据分析、数据库连接处理都属于业务层,应该放在JAVA BEANS中。通过JSP调用JAVA BEANS实现两层的融合。

其实微软推出的DNA技术,简单来说就是ASP+COM/DCOM技术。与JSP+BEANS类似,所有表示层都由ASP完成,所有业务层都由COM/DCOM完成。通过调用,实现集成。现在。微软推出的. NET也是基于这个概念。所有表示层由ASP.NET完成,业务层由C#或VB.NET或VC.NET完成。

为什么要使用这些组件技术?因为单纯的ASP/JSP语言效率非常低,如果大量用户点击,纯脚本语言很快就会达到其功能上限,而组件技术可以大大提高功能上限,加快执行速度。

另一方面,纯脚本语言将表示层和业务层混在一起,修改不方便,代码无法重用。如果要修改一个地方,往往要涉及十几页的代码。使用组件技术,只能修改组件。

综上所述,SERVLET是早期不完善的产品。写业务层好,写表示层不好,两层混在一起,很混乱。

所以引入了JSP+BAEN,表示层用JSP写,业务层用BAEN写。孙自己的意思是以后用JSP代替SERVLET。

看了上面的描述,你可能会对JSP和Servlet的共存有更好的理解。可见JSP和Bean的实用性、强大的性能和易用性是Servlet无法企及的。那么Servlet被取代了吗?不要!在以后的发展中,还是有巨大的作用的。以上只是问题的一个方面。我们来看看Servlet本身的特点。

因为是用java写的,相关特性就不说了。以上已经详细介绍过了。让我们看看其他的:

Servlet是用于开发服务器端应用程序的编程模型。如果只是普通的java应用,不用servlet也可以写。但是如果要提供基于web的服务能力,就必须按照这个模型来写,而且必须允许servlet运行在符合Servlet规范的java web server或者app server上,否则就不能运行。除非你自己实现一个web服务器,否则它的复杂度比较高,尤其是在企业应用中,对系统的稳定性和健壮性要求很高,所以servlet模型实际上简化了编写健壮的服务器端应用的开发过程。Servlet可以用作提供web服务功能的访问方法。

现在你可能明白什么是Servlet,什么是JSP,以及它们之间的关系。