JSP技术简介及特点

JSP(Java Server Pages)技术是由Sun公司发布的用于开发动态Web应用的一项技术。它以其简单易学、跨平台的特性,在众多动态Web应用程序设计语言中异军突起,在短短几年中已经形成了一套完整的规范,并广泛地应用于电子商务等各个领域中。在国内,JSP现在也得到了比较广泛的重视,得到了很好的发展,越来越多的动态网站开始采用JSP技术。下面就对JSP及其相关技术进行简单的介绍。JSP技术可以以一种简捷而快速的方法生成Web页面。使用JSP技术的Web页面可以很容易地显示动态内容。JSP技术的设计目的是使得构造基于Web的应用程序更加容易和快捷,而这些应用程序能够与各种Web服务器、应用服务器、浏览器和开发工具共同工作。

JSP技术不是惟一的动态网页技术,也不是第一个,在JSP技术出现之前就已经存在几种优秀的动态网页技术,如CGI、ASP等。下面结合这些技术的介绍,讲述动态网页技术的发展和JSP技术的诞生。

JSP的开发背景及发展历史

在万维网短暂的历史中,万维网已经从一个大部分显示静态信息的网络演化到对股票进行交易和进行购书操作的一个基础设施。在各种各样的应用程序中,对于可能使用的基于Web的客户端,看上去没有任何限制。

基于浏览器客户端的应用程序比传统的基于客户机/服务器的应用程序有几个好处。这些好处包括几乎没有限制的客户端访问和极其简化的应用程序部署和管理(要更新一个应用程序,管理人员只需要更改一个基于服务器的程序,而不是成千上万的安装在客户端的应用程序)。这样,软件工业正迅速地向建造基于浏览器客户端的多层次应用程序迈进。

这些快速增长的精巧的基于Web的应用程序要求开发技术上的改进。静态HTML对于显示相对静态的内容是不错的选择;新的挑战在于创建交互的基于Web的应用程序,在这些程序中,页面的内容是基于用户的请求或者系统的状态,而不是预先定义的文字。

对于这个问题的一个早期解决方案是使用CGI-BIN接口。开发人员编写与接口相关的单独的程序,以及基于Web的应用程序,后者通过Web服务器来调用前者。这个方案有着严重的扩展性问题——每个新的CGI要求在服务器上新增一个进程。如果多个用户并发地访问该程序,这些进程将消耗该Web服务器所有的可用资源,并且系统性能会降低到极其低下的地步。

某些Web服务器供应商已经尝试通过为他们的服务器提供“插件”和API来简化Web应用程序的开发。这些解决方案是与特定的Web服务器相关的,不能解决跨多个供应商的解决方案的问题。例如,微软的Active Server Pages(ASP)技术使得在Web页面上创建动态内容更加容易,但也只能工作在微软的IIS和Personal Web Server上。

还存在其他的解决方案,但都不能使一个普通的页面设计者能够轻易地掌握。例如,像Java Servlet这样的技术就可以使得用Java语言编写交互的应用程序的服务器端的代码变得容易。开发人员能够编写出这样的Servlet,以接收来自Web浏览器的HTTP请求,动态地生成响应(可能要查询数据库来完成这项请求),然后发送包含HTML或XML文档的响应到浏览器。

%注意:一个Java Servlet就是一个基于Java技术的运行在服务器端的程序(与Applet不同,后者运行在浏览器端)。Servlet会在本书第4章介绍。

采用这种方法,整个网页必须都在Java Servlet中制作。如果开发人员或者Web管理人员想要调整页面显示,就不得不编辑并重新编译该Java Servlet,即使在逻辑上已经能够运行了。采用这种方法,生成带有动态内容的页面仍然需要应用程序的开发技巧。

很显然,目前所需要的是一个业界范围内的创建动态内容页面的解决方案。这个方案将解决当前方案所受到的限制。如下:

q 能够在任何Web或应用程序服务器上运行。

q 将应用程序逻辑和页面显示分离。

q 能够快速地开发和测试。

q 简化开发基于Web的交互式应用程序的过程。

JSP技术就是被设计用来满足这样的要求的。JSP规范是Web服务器、应用服务器、交易系统以及开发工具供应商间广泛合作的结果。Sun开发出这个规范来整合和平衡已经存在的对Java编程环境(例如,Java Servlet和JavaBeans)进行支持的技术和工具。其结果是产生了一种新的、开发基于Web应用程序的方法,给予使用基于组件应用逻辑的页面设计者以强大的功能。

JSP页整体语义

JSP页实施类定义一个_ jspService() 方法映射反应对象的请求。这些变革细节是具体用于脚本语言(参见Chapter JSP.9, “Scripting”)。多数细节不是具体语言,这些细节在这个章节里描述。

JSP页的内容主要致力于描述被写入反应的输出流的数据(JSP容器通常传送返回给客户的数据。)描述是根据JspWriter对象它通过隐含对象暴露。(参见JSP.1.8.3, “Implicit Objects”)。

值的变化:

l 首先, 定义一个JspWriter 对象,这个对象不同于response.getWriter()返回对象。

并且为了实施中间转换,可以认为是插入到buffering。这是最初外在对象。JSP 页作者对于PrintWriter 或OutputStream 相关的ServletResponse被禁止写直接写入。

l JSP容器不响应response.getWriter()直到第一部份内容送到客户。JSP对“glue”动作是一种语言,它是二进制。或于servlet相关, 或在引起内容之前改变反应类型内容。参照JSP.4,“Internationalization Issues”.

l 在一些动作主体中,输出不同于JspWriter对象实例的再分配,这取决于动作的细节。典型临时数据流添加到先前的输出流, 随后输出数据流再分配到先前数据流(嵌套)。Nested streams总被缓冲,并且明确要求缓冲嵌套数据流或被摈除的内容。

l 如果out JspWriter 对象数据缓冲区满, 则取决于autoFlush属性值,缓冲内容自动输入到ServletResponse output stream ,消除溢出;或抛出缓冲溢出的信号。如果JspWriter不溢出, 写入的内容将被直接送入ServletResponse输出流。

JSP页也能描述一些应该发生的具体事件。在JSP 2.1, 可被描述的唯一事件是初始化和页的损坏。在声明元素“well-known methodnames”中描述。(参见JSP.11.1.1.1, “Protocol Seen by theJSP Page Author”).

JavaScript是用于浏览器的第一种具有通用目的、动态的客户端脚本语言。Netscape于1995年首先提出了JavaScript,但当时将其称为LiveScript。后来Netscape迅速地将LiveScript改名为JavaScript,Java的开发商Sun与他们在同一年发表了一项声明。声明中指出Java和JavaScript将互相补充,但它们是截然不同的技术,这样才打消了很多人对这两项技术的错误理解。

JavaScript为创建用户界面控件提供了一种脚本语言。事实上,JavaScript在浏览器中插入了代码逻辑。它可以支持这样的效果:当光标在Web页的某个位置移动时验证用户输入或者变换图像。

Microsoft也编写出了自己的JavaScript版本并将其称为JScript。Microsoft和Netscape都支持一种围绕JavaScript和JScript的核心特性并由(European Computer Manufacturers Association,ECMA)标准组织控制的脚本语言标准。ECMA将其脚本语言命名为ECMAScript。

servlet和JSP经常包括一些组织中常见的信息,如logo、版本、商标或导航条。Web应用程序使用导入机制在任何所需的位置导入这些信息,因为这样可以很容易地在一个地方改变内容,然后维持在所有使用它的代码中。有些信息是静态的,永远不会或很少会改变,如组织的logo。在其他情况下,信息是动态的,经常在不可预见的时候改变,如必须针对每个用户的文本欢迎语。在这两种情况下,你可能都希望保证servlet或JSP可以独立于所导入的内容进行开发,servlet或JSP的实现在必要时正确地更新其导入的内容。

希望在JSP中导入不经常改变的资源。在导入JSP页面中使用include指令,并给予被导入的JSP代码段.jsp扩展名。

希望在JSP每次接收请求时,而不是在JSP转换为servlet时导入内容。使用jsp:include标准动作。

希望在JSP中根据从配置文件取得的值,动态地导入文件。使用jsp:include标准动作。在外部特性文件中提供它的值,或作为部署描述文件中的配置参数来提供。

希望在JSP文档中导入一段XML文件,或导入XML语法的JSP页面。要在每次请求时进行导入,使用jsp:include标准动作。如果要在翻译阶段进行导入,使用jsp:directive、include元素。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

等天晴i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值