JSP白皮书 之二


Web应用开发的JavaServer Pages技术方法


在开发JSP规范的过程中,太阳微系统公司(Sun Microsystems Inc.)与许许多多主要的Web服务器、应用服务器和开发工具供应商,以及各种各样富有经验的开发团体进行合作 。其结果是找到了一种为应用和页面开发人员平衡了可移植性和易用性的开发方法。

JSP技术在多个方面加速了动态Web页面的开发:

将内容的生成和显示进行分离


使用JSP技术,Web页面开发人员可以使用HTML或者XML标识来设计和格式化最终页面。使用JSP标识或者小脚本来生成页面上的动态内容(内容是根据请求来变化的,例如请求帐户信息或者特定的一瓶酒的价格)。生成内容的逻辑被封装在标识和JavaBeans组件中,并且捆绑在小脚本中,所有的脚本在服务器端运行。如果核心逻辑被封装在标识和Beans中,那么其他人,如Web管理人员和页面设计者,能够编辑和使用JSP页面,而不影响内容的生成。
在服务器端,JSP引擎解释JSP标识和小脚本,生成所请求的内容(例如,通过访问JavaBeans组件,使用JDBCTM技术访问数据库,或者包含文件),并且将结果以HTML(或者XML)页面的形式发送回浏览器。这有助于作者保护自己的代码,而又保证任何基于HTML的Web浏览器的完全可用性。

强调可重用的组件
 

绝大多数JSP页面依赖于可重用的,跨平台的组件(JavaBeans或者Enterprise JavaBeansTM组件)来执行应用程序所要求的更为复杂的处理。开发人员能够共享和交换执行普通操作的组件,或者使得这些组件为更多的使用者或者客户团体所使用。基于组件的方法加速了总体开发过程,并且使得各种组织在他们现有的技能和优化结果的开发努力中得到平衡。


采用标识简化页面开发


Web页面开发人员不会都是熟悉脚本语言的编程人员。JavaServer Page技术封装了许多功能,这些功能是在易用的、与JSP相关的XML标识中进行动态内容生成所需要的。标准的JSP标识能够访问和实例化JavaBeans组件,设置或者检索组件属性,下载Applet,以及执行用其他方法更难于编码和耗时的功能。
通过开发定制化标识库,JSP技术是可以扩展的。今后,第三方开发人员和其他人员可以为常用功能创建自己的标识库。这使得Web页面开发人员能够使用熟悉的工具和如同标识一样的执行特定功能的构件来工作。

JSP技术很容易整合到多种应用体系结构中,以利用现存的工具和技巧,并且扩展到能够支持企业级的分布式应用。作为采用Java技术家族的一部分,以及Java 2(企业版体系结构)的一个组成部分,JSP技术能够支持高度复杂的基于Web的应用。
由于JSP页面的内置脚本语言是基于Java编程语言的,而且所有的JSP页面都被编译成为Java Servlet,JSP页面就具有Java技术的所有好处,包括健壮的存储管理和安全性。
作为Java平台的一部分,JSP拥有Java编程语言“一次编写,各处运行”的特点。随着越来越多的供应商将JSP支持添加到他们的产品中,您可以使用自己所选择的服务器和工具,更改工具或服务器并不影响当前的应用。
当与Java 2平台,企业版(J2EE)和Enterprise JavaBean技术整合时,JSP页面将提供企业级的扩展性和性能,这对于在虚拟企业中部署基于Web的应用是必需的。


JSP页面看上去象什么?
JSP页面看上去象标准的HTML和XML页面,并附带有JSP引擎能够处理和抽取的额外元件。通常,JSP元件创建插入最终页面的文本。

使用示例是描述JSP技术的最好方法。下面的JSP页面非常简单;它打印带年、当月的天,并且根据时间使用"Good Morning"和"Good Afternoon"对您表示欢迎。

该页面结合了普通的HTML和大量JSP元件组成。

对时钟JavaBeans组件的调用
对一个外部文件的包含(用于著作权信息)
JSP表达式和脚本

<%@ page language=="java" imports=="com.wombat.JSP.*" %>

Welcome



Today is




  • Day: <%==clock.getDayOfMonth() %>
  • Year: <%==clock.getYear() %>


<% if (Calendar.getInstance().get(Calendar.AM_PM) ==== Calendar.AM) { %>
Good Morning
<% } else { %>
Good Afternoon
<% } %>
<%@ include file=="copyright.html" %>



这个页面包含下面这些组件:

一个JSP指示将信息传送到JSP引擎。在这个示例中,第一行指出从该页面即将访问的一些Java编程语言的扩展的位置。指示被设置在<%@和%>标记中。
固定模板数据:所有JSP引擎不能识别的标识将随结果页面发送。通常,这些标识是HTML或者XML标识。在上面的例子中包括无序列表(UL)和H1标识。
JSP动作或者标识:这些通常作为标准或定制标识被实现,并且具有XML标识的语法。在这个例子中,jsp:useBean标识实例化服务器端的Clock JavaBean。
一个表达式:JSP引擎计算在<%==和%>标记间的所有东西。在上面的列表项中,时钟组件(Clock)的Day和Year属性值作为字符串返回,并且作为输出插入到JSP文件中。在上面的例子中,第一个列表项是日子,第二个是年份。
小脚本是执行不为标识所支持的功能或者将所有的东西捆绑在一起的小的脚本。JSP 1.0软件的内置脚本语言是基于Java语言的。在上面示例中的小脚本确定现在是上午还是下午,并且据此来欢迎用户。
这个例子可能小了一点,但是技术上却不是。从业务上可以将关键的处理封装在服务器端的组件中,并且Web开发人员能够使用熟悉的语法和工具很容易地访问这些信息。基于Java的小脚本提供了一种灵活的方式以执行其他功能,而不要求扩展的脚本语言。页面作为整体是可读和可理解的,这就使得查找或者预防问题以及
共享工作更加容易。
这些组件中的一部分在下面有更详细的描述。

JSP指示

JSP页面使用JSP指示将指令传递到JSP引擎。这其中包括:

JSP页面指示传递页面相关的信息,例如缓冲区和线程信息或者出错处理。
语言指示指定脚本语言,以及所有的扩展。
包含指示(在上面例子中有显示)可以被用来在页面中包含一个外部的文档。一个好的例子是著作权文档或者公司信息文档——在一个集中地点保存该文档并且在页面中包含比在各个JSP页面中更新要容易些。当然,被包含的文件也可能是另一个JSP文件。
标识库指示指出页面可以调用的一个客户标识库。

JSP标识

绝大多数JSP处理将通过与JSP相关的基于XML的标识完成。JSP 1.0中包含大量标准标识,这些标识作为核心标识包括:

jsp:useBean 这个标识声明对一个JavaBeans组件实例的使用。如果该组件的实例不存在,JavaBeans组件将实例化和注册这个标识。
jsp:setProperty 这个标识在组件的实例中设置一个属性的值。

jsp:getProperty 这个标识获取一个组件的实例的属性值,将其转化为字符串,并且将它放入隐含对象"out"中。

jsp:include

jsp:forward


1.1版本将包含更多的标准标识。

标识的好处在于它们易于在应用程序间使用和共享。基于标识的语法的真正威力来自于客户标识库的开发,使得工具供应商或其他人员能够为特定的要求创建和分派标识。

脚本元件

JSP页面可以在页面中包含小的脚本,称之为小脚本(scriptlets)。小脚本是一个代码片段,在请求的处理过程中被执行。小脚本可以和页面中的静态元件组合(正如上面的例子一样)起来创建动态生成的页面。

脚本在<%和%>标志中被描述。在这对标志中的所有东西都会被脚本描述语言引擎执行,在我们的例子中是主机上的Java虚拟机。

JSP规范支持所有常用的脚本元件,包括表达式和声明。

JSP页面的应用模型

JSP页面由JSP引擎执行,引擎安装在Web服务器或者使用JSP的应用服务器上。JSP引擎接受客户端对JSP页面的请求,并且生成JSP页面给客户端的响应。

JSP页面通常被编译成为Java Servlet。后者是一个标准的Java扩展,在www.java.sun.com站点有更详细的描述。页面开发人员能够访问全部的Java应用环境,以利用Java技术的扩展性和可移植性。

当JSP页面第一次被调用时,如果它还不存在,就会被编译成为一个Java Servlet类,并且存储在服务器的内存中。这使得在接下来的对该页面的调用有非常快的响应。(这避免了CGI-BIN为每个HTTP请求生成一个新的进程的问题,或是服务器端引用所引起的运行时语法分析。)

JSP页面可以包含在多种不同的应用体系结构或者模型中。JSP页面可以用于由不同协议、组件和格式所组成的联合体中。下面的小节描述了一些可能发生的情况。

一个简单应用

在一个简单实现中,浏览器直接调用JSP页面,JSP页面自己生成被请求的内容(可能会调用JDBC直接从数据库中获取信息)。JSP页面能够调用JDBC或者Java BlendTM组件来生成结果,并且创建标准的HTML,作为结果发送回浏览器。



这个模型基本上用JSP页面(编译成为Java Servlet)代替了CGI-BIN概念。这个方法拥有下列优点:

简单而快速地编程
页面作者可以很容易地根据请求和资源状态生成动态内容
这个结构在许多应用上工作良好,但不能扩展到大量的基于Web的并发客户访问稀少的企业资源,因为每个客户必须建立或者共享一个到可用内容资源的连接。例如,如果JSP页面访问数据库,可能生成许多到数据库的连接,这将影响到数据库的性能。


使用Java Servlet的一个灵活的应用

在另一种可能的配置中,基于Web的客户机可能直接对Java Servlet进行请求,Servlet生成动态内容,将结果捆绑到一个结果对象中并且调用JSP页面。JSP页面从该对象中访问动态内容,并且将结果(例如HTML)发送回浏览器。

这个方法创建了更多的可以为应用程序间共享的可重用的组件,并且可以作为更大的应用的一部分完成。但是,在处理如数据库一样的企业资源的连接时,还是存在扩展性问题。

上一页 下一页 <

小小豆叮

0 Responses to "JSP白皮书 之二"

发表评论