一. Servlet是什么?
客户机/服务器计算的发展。Java提供了一整套客户机/服务器解决方案,在这个方案中,程序可以自动地下载到客户端并执行,这就是applet。但是它仅仅是问题的一半。问题的另一半就是Servlet。
servlet可以被认为是服务器端的applet。servlet被Web服务器加载和执行,就如同applet被浏览器加载和执行一样。servlet从客户端(通过Web服务器)接收请求,执行某种作业,然后返回结果。使用servlet的基本流程如下:
1、客户端通过HTTP提出请求.
2、Web服务器接收该请求并将其发给servlet。如果这个servlet尚未被加载,Web服务器将把它加载到Java虚拟机并且执行它。
3、servlet将接收该HTTP请求并执行某种处理。
4、servlet将向Web服务器返回应答。
5、Web服务器将从servlet收到的应答发送给客户端。
由于servlet是在服务器上执行,通常与applet相关的安全性的问题并不需实现。要注意的是Web浏览器并不直接和servlet通信,servlet是由Web服务器加载和执行的。
而servlet是用Java编写的,所以它们一开始就是平台无关的。这样,Java编写一次就可以在任何平台运行(write once,run anywhere)的承诺就同样可以在服务器上实现了。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,它的基本架构是怎么样的?
这些问题,将在后面部分给予介绍。
二.JSP与Servlet
现在已经对Servlet有了大概的了解,现在我们就来说说JSP和Servlet的关系。
JSP是一种脚本语言,包装了Java Servlet系统的界面,简化了Java和Servlet的使用难度,同时通过扩展JSP标签(TAG)提供了网页动态执行的能力。尽管如此,JSP仍没有超出Java和Servlet的范围,不仅JSP页面上可以直接写Java代码,而且JSP是先被译成Servlet之后才实际运行的。JSP在服务器上执行,并将执行结果输出到客户端浏览器,我们可以说基本上与浏览器无关。它是与JavaScript不同的,JavaScript是在客户端的脚本语言,在客户端执行,与服务器无关。 那么JSP是什么?就是Servlet.
JSP与Servlet之间的主要差异在于,JSP提供了一套简单的标签,和HTML融合的比较好,可以使不了解Servlet的人可以做出动态网页来。对于Java语言不熟悉的人(比如像我),会觉得JSP开发比较方便。JSP修改后可以立即看到结果,不需要手工编译,JSP引擎会来做这些工作;而Servelt缺需要编译,重新启动Servlet引擎等一系列动作。但是在JSP中,HTML与程序代码混杂在一起,而Servlet却不是这样。也许大家比较混乱了,那么Servlet又是什么?下面我们对JSP的运行来做一个简单的介绍,告诉大家怎样来执行一个JSP文件:
当Web服务器(或Servlet引擎,应用服务器)支持JSP引擎时,JSP引擎会照着JSP的语法,将JSP文件转换成Servlet代码源文件,接着Servlet会被编译成Java可执行字节码(bytecode),并以一般的Servlet方式载入执行
JSP语法简单,可以方便的嵌入HTML之中,很容易加入动态的部分,方便的输出HTML。在Servlet中输出HTML缺需要调用特定的方法,对于引号之类的字符也要做特殊的处理,加在复杂的HTML页面中作为动态部分,比起JSP来说是比较困难的。
除去了转换和编译阶段,JSP和Servlet之间的区别实在是不大。
JSP引擎通常架构在Servlet引擎之上,本身就是一个Servlet,把JSP文件转译成Servlet源代码,再调用Java编译器,编译成Servlet。这也是JSP在第一次调用时速度比较慢的原因,在第一次编译之后,JSP与Servlet速度相同.下面我们来看看为什么他们在第一次编译后再编译的速度相同:
在整个运行过程中,JSP引擎会检查编译好的JSP(以Servlet形式存在)是否比原始的JSP文件还新,如果是,JSP引擎不会编译;如果不是,表示JSP文件比较新,就会重新执行转译与编译的过程。
为了有个深刻的了解,我们看一下JSP的运行和开发环境:
浏览器:常见的浏览器有IE和Netscape两种。
数据库:常用的数据库有Oracle,SQL Server,Informix,DB2,Sybase,Access,MySQL等。
操作系统:常见的有Windows,Linux,以及各种Unix系统。
Web服务器:常见的有IIS,Apache,Netscape Enterprise Server等。
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的好处是什么。
历史简述:(摘自某论坛有删节,改写)
简单的说,SUN首先发展出SERVLET,其功能比较强劲,体系设计也很先进,只是,它输出HTML语句还是采用了老的CGI方式,是一句一句输出,所以,编写和修改HTML非常不方便。
后来SUN推出了类似于ASP的镶嵌型的JSP(是Servlet发展的产物),把JSP TAG镶嵌到HTML语句中,这样,就大大简化和方便了网页的设计和修改。新型的网络语言如ASP,PHP,JSP都是镶嵌型的SCRIPT语言。
从网络三层结构的角度看,一个网络项目最少分三层:data layer,business layer, presentation layer。当然也可以更复杂。SERVLET用来写business layer是很强大的,但是对于写presentation layer就很不方便。JSP则主要是为了方便写presentation layer而设计的。当然也可以写business layer。写惯了ASP,PHP,CGI的朋友,经常会不自觉的把presentation layer和business layer混在一起。把数据库处理信息放到JSP中,其实,它应该放在business layer中。
根据SUN自己的推荐,JSP中应该仅仅存放与presentation layer有关的内容,也就是说,只放输出HTML网页的部份。而所有的数据计算,数据分析,数据库联结处理,统统是属于business layer,应该放在JAVA BEANS中。通过JSP调用JAVA BEANS,实现两层的整合。
实际上,微软推出的DNA技术,简单说,就是ASP+COM/DCOM技术。与JSP+BEANS完全类似,所有的presentation layer由ASP完成,所有的business layer由COM/DCOM完成。通过调用,实现整合。现在微软推出的.NET也是通过这个理念,所有的presentation layer由ASP.NET完成,business layer由C#或VB.NET或VC.NET来完成。
为什么要采用这些组件技术呢?因为单纯的ASP/JSP语言是非常低效率执行的,如果出现大量用户点击,纯SCRIPT语言很快就到达了他的功能上限,而组件技术就能大幅度提高功能上限,加快执行速度。
另外一方面,纯SCRIPT语言将presentation layer和business layer混在一起,造成修改不方便,并且代码不能重复利用。如果想修改一个地方,经常会牵涉到十几页CODE,采用组件技术就只改组件就可以了。
综上所述,SERVLET是一个早期的不完善的产品,写business layer很好,写presentation layer就很不好,并且两层混杂,显得十分混乱。
所以,推出JSP+BAEN,用JSP写presentation layer,用BAEN写business layer。SUN自己的意思也是将来用JSP替代SERVLET。
看了上面的叙述,大家可能对JSP与Servlet共存有了比较好的认识。可以看到JSP和Bean结合后的的实用性,强大的表现功能,易用性都是Servlet所不能及的。那么是不是Servlet就被取代了?不是!在以后的发展中,它还是有着巨大的作用的。上面只不过是将了问题的一方面,下面我们来看看Servlet本身的特点。
由于它是由java来写的,所以相关的特点我们就不说了,上文已经有了详细的介绍,我们来看看其他的:
Servlet是用于开发服务器端应用程序的一种编程模型,如果只是一个普通的java应用,可以不使用servlet来编写,但是如果想要提供基于web的服务能力,那么就必须按照这种模型来编写,而且servlet也必须允许在符合servlet规范的java web server or app server之上,否则无法运行。除非你自己实现一个web server,但是其复杂度是比较高的,特别是在企业级应用中,对系统的稳定性和健壮性都要求比较高,所以servlet的模型实际上是简化了编写稳健的服务器端的应用开发过程。Servlet 可以作为提供web服务能力的一个接入方式
现在也许可以理解了什么是Servlet什么是JSP,它们之间的关系是怎样的。
发表评论
-
Nginx代理之后,访问地图出现叉图的问题
2012-10-11 15:28 2512系统上线以后,一些用户反应地图上面出现了<!--Star ... -
Lucene专题1---Lucene简介
2012-09-05 13:37 0Lucene是一套用于全文检索和搜寻的开源程式库, ... -
JAXB 2.0 API is being loaded from the bootstrap classloader错误【转】
2012-09-05 11:48 883java.lang.LinkageError: JAXB 2. ... -
[Extjs项目开发必须知道的技术之一]--apply和applyif
2011-06-15 13:18 1269目前本人在做公司项目的前台框架的升级工作,前台框架 ... -
JSON 入门指南
2011-06-14 14:52 1137简介: JSON 即 JavaScript Object Na ... -
J2EE 全面简介
2011-06-14 00:23 629J2EE的概念 目前,Java 2平台有3个版本,它们是适用 ... -
Oracle表空间相关
2011-06-11 11:39 6451、创建表空间 CREATE ... -
访问工程项目时,Extjs出现“拒绝访问”
2011-06-10 14:01 1475关于在IE中使用Extjs出现“拒绝访问”的问题 近段时间项 ... -
方法名为getXX()导致的后果
2010-12-02 20:21 704做项目的近段时间,遇见一个问题,纠结了好一段时间。 纠结的问 ... -
JPA调用存储过程
2010-08-14 10:41 1042要调用存储过程,我们可以通过EntityManager对象的c ... -
JPA简介
2010-08-14 10:39 939JPQL就是一种查询语言,具有与SQL 相类似的特征,JPQL ... -
OpenJPA的基础
2010-08-14 10:13 959在项目中我们公司用的持久化语言是JPA,周五为了 ... -
启动Eclipse的项目时出现java.lang.OutOfMemoryError错误
2010-07-28 20:11 1158今天解压一个Eclipse3.5,然后把项目发布到tomcat ... -
request.getParameter()
2010-07-26 20:46 779今天,做项目中的一个jsp页面,我的需求如下: 我需要将ur ... -
struts2与json的整合
2010-07-25 22:15 2809将jsonplugin-0.30.jar放到工程的lib下面, ... -
struts2的相关知识
2010-07-25 22:13 8941、在struts2.xml中配置的A ...
相关推荐
### jsp与servlet的联系和区别 在深入探讨JSP与Servlet的联系与区别的过程中,我们首先需要理解这两个概念的基本定义以及它们在Web开发中的角色。 #### JSP(JavaServer Pages) JSP是一种基于Java技术的动态网页...
**JSP(Java Server Pages)与Servlet是Java Web开发中的两个核心技术,它们在构建动态Web应用程序方面发挥着关键作用。本课件旨在帮助学习者深入理解这两者的基础知识及其交互方式,以提升Web开发能力。** **JSP...
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。...JSP+servlet,网盘系统,mysql
### jsp与Servlet跳转实例:深入理解信息提交与页面跳转 在Web开发中,JSP(Java Server Pages)和Servlet是两个重要的技术组件,它们共同协作来处理客户端请求并生成动态网页内容。本文将详细解析一个具体的案例...
**JSP与Servlet之间的主要区别**: 1. **编写方式**:JSP页面使用HTML作为基础模板,并嵌入Java代码片段,而Servlet则是纯Java类,需要手动编写处理HTTP请求的方法。 2. **适用场景**:JSP更适合用于展示数据和构建...
### JSP与Servlet程序设计实践教程知识点概览 #### 一、JSP与Servlet概述 - **JSP(JavaServer Pages)**: 是一种基于Java技术的动态网页开发技术,允许在标准HTML页面中嵌入Java代码。JSP页面在服务器端被编译成...
在Web开发领域,JSP(JavaServer Pages)和Servlet是常用的两种技术,它们结合使用能够构建动态、交互式的Web应用程序。本项目“JSP+Servlet实现简易购物车功能”就是一个典型的示例,它展示了如何利用这两者来创建...
**JSP(Java Server Pages)与Servlet是Java Web开发中的两个核心技术,它们在构建动态、交互式的Web应用程序中起着核心作用。** **1. JSP简介:** JSP是Java平台上的一个标准视图技术,它允许开发人员将HTML或者...
【基于jsp+servlet的博客系统】是一个典型的Web应用程序,它结合了JavaServer Pages(JSP)和Servlet技术,用于构建动态、交互式的博客平台。在这个系统中,JSP主要用于展示用户界面,而Servlet则承担了业务逻辑处理...
【标题】"jsp+servlet项目"涉及的是Java服务器页面(JSP)与Servlet技术的结合应用,这是一种在Web开发中常见的技术组合。JSP和Servlet是Java EE平台上的两个核心组件,它们主要用于构建动态Web应用程序。 【JSP...
【旅游管理系统 jsp+servlet.zip】是一个基于Java Web技术的毕业设计或课程设计项目,它利用了JavaServer Pages (JSP) 和Servlet技术,结合MySQL数据库来构建一个完整的旅游管理平台。这个系统的设计和实现涵盖了多...
书中详细介绍了Servlet/ JSP与Web容器之间的关系,必要时从Tomcat源代码分析,了解Servlet/ JSP如何与容器互动。本书还涵盖了文本处理、图片验证、自动登录、验证过滤器、压缩处理、JSTL应用与操作等各种实用范例。 ...
在学习JSP与Servlet的过程中,学生常常会遇到各种问题,例如概念混淆、操作难度、应用场景的理解以及相关认证考试的准备等,这本书都进行了详尽的解答和深入的探讨。 JSP(Java Server Pages)是Java平台上的动态...
大学本科JSP课程的期末作业JSP+Servlet+layui实现的博客系统源码。教程 下载使用tomcat就可以使用,数据库语句也有,如果要修改数据库配置就在tool下面的工具类修改即可大学本科JSP课程的期末作业JSP+Servlet+layui...
### servlet与jsp的区别 在Web开发领域中,servlet与JSP是两种非常重要的技术,它们都是Java EE标准的一部分,并且被广泛应用于构建动态网页。虽然它们都可以用来处理客户端请求并生成动态页面,但它们之间还是存在...
**JSP(Java Server Pages)与Servlet是Java Web开发中的两个核心技术,它们在构建动态网页和处理客户端请求方面起着至关重要的作用。** **JSP技术:** JSP是一种服务器端脚本语言,用于创建动态网页。它允许开发者...
【基于JSP+Servlet小项目】是一个典型的JavaWeb应用程序,它是使用JavaServer Pages(JSP)技术和Servlet进行开发的。这个项目可能包含了从用户界面到后端数据处理的完整流程,展示了如何在Web环境中整合这两种技术...
**JSP(Java Server Pages)与Servlet是Java Web开发中的两个核心技术,它们在构建动态Web应用程序方面发挥着关键作用。本学习笔记将深入探讨这两个概念,以及它们如何协同工作以提供高效、灵活的Web服务。** **JSP...
在IT行业中,构建一个在线购物系统是常见的任务,而JSP、Servlet和JavaBean是JavaEE平台下开发Web应用的三大核心组件,常用于构建动态网站。本项目以"JSP+servlet+javabean实现购物车"为主题,旨在演示如何使用这些...
在"easybuy"这个项目中,我们可以看到它可能包含了一系列与电子商务相关的JSP页面(如index.jsp、product.jsp、cart.jsp等)、Servlet类(如LoginServlet、SearchServlet等)以及配置文件(web.xml)等,这些共同...