jsp javaservlet javascript asp vbscript区别

本文详细介绍了Java Servlet和JSP技术,对比了它们与CGI等其他技术的区别,阐述了Servlet和JSP的特点及应用场景,并深入探讨了它们之间的联系与区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java Servlet及其特点

Servlet是Java技术对CGI编程的回答。Servlet程序在服务器端运行,动态地生成Web页面。与传统的CGI和许多其他类似CGI的技术相比,Java Servlet具有更高的效率,更容易使用,功能更强大,具有更好的可移在Servlet中,许多使用传统CGI程序很难完成的任务都可以轻松地完成。例如,Servlet能够直接和Web服务器交互,而普通的CGI程序不能。Servlet还能够在各个程序之间共享数据,使得数据库连接池之类的功能很容易实现。:Servlet用Java编写,Servlet API具有完善的标准。因此,为I-Planet Enterprise Server写的Servlet无需任何实质上的改动即可移植到Apache、Microsoft IIS或者WebStar。几乎所有的主流服务器都直接或通过插件支持Servlet。不仅有许多廉价甚至免费的Web服务器可供个人或小规模网站使用,而且对于现有的服务器,如果它不支持Servlet的话,要加上这部分功能也往往是免费的(或只需要极少的投资)。JavaServer Pages(JSP)是一种实现普通静态HTML和动态HTML混合编码的技术,有关JSP基础概念的说明请参见《JSP技术简介 》。

许多由CGI程序生成的页面大部分仍旧是静态HTML,动态内容只在页面中有限的几个部分出现。但是包括Servlet在内的大多数CGI技术及其变种,总是通过程序生成整个页面。JSP使得我们可以分别创建这两个部分。例如,下面就是一个简单的JSP页面:


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD><TITLE>欢迎访问网上商店</TITLE></HEAD>
<BODY>
<H1>欢迎</H1>
<SMALL>欢迎,
<!-- 首次访问的用户名字为"New User" -->
<% out.println(Utils.getUserNameFromCookie(request)); %>
要设置帐号信息,请点击
<A HREF=http://www.blue1000.com/article/"Account-Settings.HTML">这里</A></SMALL>
<P>
页面的其余内容。.
</BODY></HTML>

下面是JSP和其他类似或相关技术的一个简单比较:

JSP和Active Server Pages(ASP)相比

Microsoft的ASP是一种和JSP类似的技术。JSP和ASP相比具有两方面的优点。首先,动态部分用Java编写,而不是VB Script或其他Microsoft语言,不仅功能更强大而且更易于使用。第二,JSP应用可以移植到其他操作系统和非Microsoft的Web服务器上。

JSP和纯Servlet相比

JSP并没有增加任何本质上不能用Servlet实现的功能。但是,在JSP中编写静态HTML更加方便,不必再用 println语句来输出每一行HTML代码。更重要的是,借助内容和外观的分离,页面制作中不同性质的任务可以方便地分开:比如,由页面设计专家进行HTML设计,同时留出供Servlet程序员插入动态内容的空间。

JSP和服务器端包含(Server-Side Include,SSI)相比

SSI是一种受到广泛支持的在静态HTML中引入外部代码的技术。JSP在这方面的支持更为完善,因为它可以用Servlet而不是独立的程序来生成动态内容。另外,SSI实际上只用于简单的包含,而不是面向那些能够处理表单数据、访问数据库的“真正的”程序。

JSP和JavaScript相比

JavaScript能够在客户端动态地生成HTML。虽然JavaScript很有用,但它只能处理以客户端环境为基础的动态信息。除了Cookie之外,HTTP状态和表单提交数据对JavaScript来说都是不可用的。另外,由于是在客户端运行,JavaScript不能访问服务器端资源,比如数据库、目录信息等等。

      编译后的JSP页面生成服务小程序(Servlet),因而并入了所有服务小程序功能.这样servlet 与jsp共享了公共特征,如平台独立性,创建数据库驱动的Web应用及服务器端编程能力.但还有区别的

     1.jsp(javaserver pages)它是在html代码里写JAVA代码,而servlet是在java代码中写html代码

     2.servlet捆绑文件,独立地处理静态表示逻辑与动态业务逻辑.这样,任何文件的变动都需要对此服务程序重新编译.而JSP允许用特殊标签直接嵌入到HTML页面.HTML内容与JAVA内容也可放在单独文件中,HTML内容的任何变动会自动编译装入到服务程序.

     3.JSP页面便于Web开发者与Web设计者独立工作.而Servlet需要两者相结合.

      编译后的JSP页面生成服务小程序(Servlet),因而并入了所有服务小程序功能.这样servlet 与jsp共享了公共特征,如平台独立性,创建数据库驱动的Web应用及服务器端编程能力.但还有区别的

简单的说,JSP是一种服务器端脚本语言(Server Side Script),它包装了 Java Servlet系统的界面,简化Java和Servlet的使用难度,同时通过扩展的JSP标签提供了网页动态执行的能力。尽管如此,JSP仍然没有超出Java和Servlet的范围,不仅JSP页面上可以直接书写Java代码,而且JSP是先被编译成Servlet之后才实际运行的。JSP在服务器端,即Web服务器上 执行 ,并将执行结果输出到客户端(Client)浏览器,基本上与浏览器无关。实际上JSP就是Java,就是Servlet,只是它是一个特别的Java 语言
JSP与Servlet之间的主要差异在于,JSP提供了一套简单的标签,使不了解Servlet的人可以作出动态网叶来。
如果对于Java语言不是很熟悉的人,会觉得JSP 开发 比较方便。JSP修改后立即可以看到结果,不需要手工编译,JSP引擎会自动来做这些工作;而Servlet却需要编译、重新启动Servlet引擎等一系列动作。但是在JSP中,HTML与 程序 代码混杂会显得较为混乱,而且不利于调试和除错,这一点上不如Servlet来得方便。
当Web服务器(或Servlet引擎、应用服务器)支持JSP引擎时,JSP引擎就会按照JSP的 语法 ,将JSP文件转换成Servlet源代码文件,接着Servlet会被编译成Java的可执行字节码,并以一般的Servlet方式载入、执行。
如果除去转换和编译阶段,JSP和Servlet之间的区别实在是不大。JSP引擎通常架构在Servlet引擎之上,其本身就是一个Servlet,把JSP文件转译成Servlet源代码,再调用Java编译器,编译成Servlet。这也是JSP在第一次调用是速度较慢的原因,在第一次编译之后,JSP与Servlet的执行速度相同。在整个运行过程中,JSP引擎会检查编译好的JSP(以Servlet形式存在)是否比原始的JSP文件还新,如果是,JSP引擎不会编译;如果不是,表示JSP文件比较新,就会重新执行一边转译与编译过程。  

servlets是纯粹的java程序,生成网页要在程序内部写好html代码,但有些程序员对页面美观方面不熟;
jsp则是脚本为主,编写简单,祢补servlets的不足,使得java程序和html、xml等页面分离,分别 设计 ,更有利于开发;
jsp的java程序的编写尚要依赖于servlets;
jsp可由jsp引擎解释成servlets,再由jdk编译运行,也像servlets一样,程序运行后,能一直驻留在内存里, 效率 较高。

jsp=java server pages:是一种基于服务器端的脚本语言,它主要依靠服务器端的java脚本引擎解释执行,在客户端得到是超文本标记语言HTML写成的代码,而不是jsp文件。一个servlet仅被初始化一次而执行多次,因此极小的低效性也会随着时间的增加而产生很很大的影响。在代码中需要考虑String对象的使用,如果产生HTML响应需要用到很多字符串时,不应该为每一个字符串生成一个String对象,因为这会产生大量的String和StringBuffer对象,造成大量的对象构造消耗和垃圾收集负担,解决的办法是一行一行的把所有需要写入的直接写入PrintWriter中,或者创建一个StringBuffer对象,并使用append()方法将文本加入。

有时,程序需要花费很长时间执行,在这种情况下应该回送给客户端一些信息,而不是长时间显示白屏,这可以在执行到一定程度就回送一些东西,可以使用PrintWriter的flush()方法强制将现有的内容回送给浏览器

Servlet是对支持Java的服务器的一般扩充。它最常见的用途是扩展Web服务器,提供非常安全的、可移植的、易于使用的CGI替代品。它是一种动态加载的模块,为来自Web服务器的请求提供服务。它完全运行在Java虚拟机上。由于它在服务器端运行,因此它不依赖于浏览器的兼容性。
  servlet容器:
  负责处理客户请求、把请求传送给servlet并把结果返回给客户。不同程序的容器实际实现可能有所变化,但容器与servlet之间的接口是由servlet API定义好的,这个接口定义了servlet容器在servlet上要调用的方法及传递给servlet的对象类。
  servlet的生命周期:
  1、servlet容器创建servlet的一个实例
  2、容器调用该实例的init()方法
  3、如果容器对该servlet有请求,则调用此实例的service()方法
  4、容器在销毁本实例前调用它的destroy()方法
  5、销毁并标记该实例以供作为垃圾收集
  一旦请求了一个servlet,就没有办法阻止容器执行一个完整的生命周期。
  容器在servlet首次被调用时创建它的一个实例,并保持该实例在内存中,让它对所有的请求进行处理。容器可以决定在任何时候把这个实例从内存中移走。在典型的模型中,容器为每个servlet创建一个单独的实例,容器并不会每接到一个请求就创建一个新线程,而是使用一个线程池来动态的将线程分配给到来的请求,但是这从servlet的观点来看,效果和为每个请求创建一个新线程的效果相同。
  
  servlet API
  servlet接口:
  public interface Servlet
  它的生命周期由javax.servlet.servlet接口定义。当你在写servlet的时候必须直接或间接的实现这个接口。一般趋向于间接实现:通过从javax.servlet.GenericServlet或javax.servlet.http.HttpServlet派生。在实现servlet接口时必须实现它的五个方法:
  init():
  public void init(ServletConfig config) throws ServletException
  一旦对servlet实例化后,容器就调用此方法。容器把一个ServletConfig对象传统给此方法,这样servlet的实例就可以把与容器相关的配置数据保存起来供以后使用。如果此方法没有正常结束就会抛出一个ServletException。一旦抛出该异常,servlet就不再执行,而随后对它的调用会导致容器对它重新载入并再次运行此方法。接口规定对任何servlet实例,此方法只能被调用一次,在任何请求传递给servlet之前,此方法可以在不抛出异常的情况下运行完毕。
  service():
  public void service(ServletRequest req,ServletResponse res) throws ServletException,IOException
  只有成功初始化后此方法才能被调用处理用户请求。前一个参数提供访问初始请求数据的方法和字段,后一个提供servlet构造响应的方法。
  destroy():
  public void destroy()
  容器可以在任何时候终止servlet服务。容器调用此方法前必须给service()线程足够时间来结束执行,因此接口规定当service()正在执行时destroy()不被执行。
  getServletConfig():
  public ServletConfig getServletConfig()
  在servlet初始化时,容器传递进来一个ServletConfig对象并保存在servlet实例中,该对象允许访问两项内容:初始化参数和ServletContext对象,前者通常由容器在文件中指定,允许在运行时向sevrlet传递有关调度信息,后者为servlet提供有关容器的信息。此方法可以让servlet在任何时候获得该对象及配置信息。
  getServletInfo():
  public String getServletInfo()
  此方法返回一个String对象,该对象包含servlet的信息,例如开发者、创建日期、描述信息等。该方法也可用于容器。
  
   
  HttpServlet类
  该类扩展了GenericServlet类并对servlet接口提供了与HTTP更相关的实现。
  service():
  protected void service(HttpServletRequest req,HttpServletResponse res) throws ServletException,IOException
  public void service(HttpServletRequest req,HttpServletResponse res)throws ServletException,IOException
  该方法作为HTTP请求的分发器,这个方法在任何时候都不能被重载。当请求到来时,service()方法决定请求的类型(GET,POST,HEAD,OPTIONS,DELETE,PUT,TRACE),并把请求分发给相应的处理方法(doGet(),doPost(),doHead(),doOptions(),doDelete(),doPut(),doTrace())每个do方法具有和第一个service()相同的形式。为了响应特定类型的HTTP请求,我们必须重载相应的do方法。如果servlet收到一个HTTP请求而你没有重载相应的do方法,它就返回一个说明此方法对本资源不可用的标准HTTP错误。
  getLatModified():
  protected long getLastModified(HttpServletRequest req)
  该方法返回以毫秒为单位的的自GMT时间1970年1月1日0时0分0秒依赖的最近一次修改servlet的时间,缺省是返回一个负数表示时间未知。当处理GET请求时,调用此方法可以知道servlet的最近修改时间,服务器就可决定是否把结果从缓存中去掉。
  
  HttpServletRequest接口
  public interface HttpServletRequest extends ServletRequest
  所有实现此接口的对象(例如从servlet容器传递的HTTP请求对象)都能让servlet通过自己的方法访问所有请求的数据。下面是一些用来获取表单数据的基本方法。
  getParameter()
  public String getParameter(String key)
  此方法试图将根据查询串中的关键字定位对应的参数并返回其值。如果有多个值则返回列表中的第一个值。如果请求信息中没有指定参数,则返回null。
  getParametervalues():
  public String[] getParametervalues(String key)
  如果一个参数可以返回多个值,比如复选框集合,则可以用此方法获得对应参数的所有值。如果请求信息中没有指定参数,则返回null。
  GetParameterNames():
  Public Enumeration getParameterNames()
  此方法返回一个Enumeration对象,包含对应请求的所有参数名字列表。
  HttpServletResponse接口
  public interface HttpServletResponse extends servletResponse
  servlet容器提供一个实现该接口的对象并通过service()方法将它传递给servlet。通过此对象及其方法,servlet可以修改响应头并返回结果。
  setContentType():
  public void setContentType(String type)
  在给调用者发回响应前,必须用此方法来设置HTTP响应的MIME类型。可以是任何有效的MIME类型,当给浏览器返回HTML是就是”text/html”类型。
  getWriter():
  public PrintWriter getWriter()throws IOException
  此方法将返回PrintWriter对象,把servlet的结果作为文本返回给调用者。PrintWriter对象自动把Java内部的UniCode编码字符转换成正确的编码以使客户端能够阅读。
  getOutputStream():
  public ServletOutputStream getOutputStream() throws IOException
  此方法返回ServletOutputStream对象,它是java.io.OutputStream的一个子类。此对象向客户发送二进制数据。
  setHeader():
  public void setHeader(String name,String value)
  此方法用来设置送回给客户的HTTP响应头。有一些快捷的方法用来改变某些常用的响应头,但有时也需要直接调用此方法。
  编译条件
  需要从http://java.sun.com/prodUCts/servlet/ 获得一份JSDK的拷贝,并把servlet.jar移动到JDK安装目录下的/jre/lib/ext目录下。如果是JDK1.1,则移动到/lib下,并在CLASSPATH中加入servlet.jar的绝对路径。
  运行条件
  需要Apache Jserv,Jrun Servlet Exec,Java Web Server,Weblogic,WebSphere,Tomcat,Resin等servlet服务器端程序。
 JSP(Java Server Pages?)是Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。它在HTML代码中,插入JSP标记(tag)及Java程序片段 (Scriptlet), 构成JSP页面,其扩展名为 .jsp。当客户端请求JSP文件时,Web服务器执行该JSP文件,然后以HTML的格式返回给客户。前面已经提到过JSP只是构建在Servlet之上的高层次的动态网页标准,因此,从概念上将,相对Servlet而言,JSP并没有什么新的东西,如果读者对前面的Servlet已经十分的了解,那么JSP的概念可说跟Servlet是完全一样的,只不过在实现方法上稍有不同。
  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值