JSP 技术概要及特性
JSP(java Server Pages)技术是由Sun公司发行的用以Sun微系统开发动态Web应用技术的技术。其简单、跨平台、多应用动态网页编程语言,在短短的几年中,已经形成了一套完整的标准,广泛应用于电子商务等领域。在中国,现在JSP也得到了比较广泛的关注,获得良好的发展,出现越来越多的基于JSP技术的动态网页。本文简要介绍了JSP的相关技术。
JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它[1] 是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML(标准通用标记语言的子集)文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。
它实现了Html语法中的java扩展(以 lt;%, %gt;形式)。JSP与Servlet一样,是在服务器端执行的。通常返回给客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。
JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计的显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。 JSP(JavaServer Pages)是一种动态页面技术,它的主要目的是将表示逻辑从Servlet中分离出来。
Java Servlet是JSP的技术基础,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。
JSP技术成为一个简单的可以快速生成网页的方法。利用JSP技术可以轻松显示网页动态内容。JSP技术的设计使基于Web应用的构建更加简单高效,而这些应用与各种Web服务器、应用服务器、浏览器和开发工具一起工作。
JSP1.2不支持EL,但可以使用外部的JSTL标签以便使用EL。
JSP 2.0的一个主要特点是它支持表达语言(expression language)。JSTL表达式语言可以使用标记格式方便地访问JSP的隐含对象和JavaBeans组件,JSTL的核心标记提供了流程和循环控制功能。自制标记也有自定义函数的功能,因此基本上所有scriptlet能实现的功能都可以由JSTL替代。在JSP 2.0中,建议尽量使用EL而使JSP的格式更一致。
JSP 2.0中加入了新的创建自制标记的API,javax.servlet.jsp.tagext.SimpleTag定义了用来实现简单标记的接口。和 JSP 1.2中的已有接口不同的是,SimpleTag接口不使用doStartTag和doEndTag方法,而提供了一个简单的doTag方法。这个方法在调用该标记时只被使用一次。而需要在一个自制标记中实现的所有逻辑过程、循环和对标记体的评估等都在这个方法中实现。从这个方面来讲, SimpleTag和IterationTag可以达到同等的作用。但SimpleTag的方法和处理周期要简单得多。在SimpleTag中还有用来设置JSP内容的setJspBody和getJspBody方法。Web容器会使用setJspBody方法定义一个代表JSP内容的 JspFragment对象。实现SimpleTag标记的程序可以在doTag方法中根据需要多次调用getJspBody.invoke方法以处理JSP内容。
JSP2.0中的一个主要功能是JSP fragment,它的基本特点是可以使处理JSP的容器推迟评估JSP标记属性。我们知道一般JSP是首先评估JSP标记的属性,然后在处理JSP标记时使用这些属性,而JSP fragment提供了动态的属性。也就是说,这些属性在JSP处理其标记体时是可以被改变的。JSP需要将这样的属性定义为 javax.servlet.jsp.tagext.JspFragment类型。当JSP标记设置成这种形式时,这种标记属性实际上的处理方法类似于标记体。在实现标记的程序中,标记属性可以被反复评估多次。这种用法称为JSP fragment。JSP fragment还可以定义在一个SimpleTag处理程序中使用的自制标记动作。像前面例子说明的,getJspBody返回一个 JspFragment对象并可以在doTag方法中多次使用。需要注意的是,使用JSP fragment的JSP只能有一般的文本和JSP action,不能有scriptlet和scriptlet表达式。
JSP技术并不是唯一的动态网页技术,也不是第一个,在JSP技术出现之前就已经存在几个优秀的动态网页技术,如CGI、ASP、等动态网页技术。
1 JSP发展背景及历史
在网络简短的发展史中,从股票交易信息静态呈现到演变为可以完成收购操作和基础设施的万维网已经能在在各种应用中发挥作用,例如可用于基于WEB的客户端。
基于B/S的应用较之于C/S的应用有许多优点。这些好处包括几乎没有限制客户端访问和极其简化的应用程序部署和管理(更新应用程序,管理人员只需要改变服务器上的程序,而不是成千上万的客户端应用程序的安装)。所以,软件正在迅速发展为基于客户端浏览器上的多层应用。
基于Web应用需求得快速增长要求技术更加进步。静态HTML显示相对静态的内容是正确的选择,而新的挑战在于创建基于Web应用程序的交互,在这些程序中,网页的内容是根据用户的请求或系统的状态,而不是提前定义好的字符。
对于问题的早期解决方案是使用CGI - bin接口。开发人员基于单独Web应用程序编写与程序相关的接口,后者通过web服务器调用前者。这个计划有严重的问题------每个新的可扩展CGI要求在一个新的进程在服务器上。如果多个并发用户访问此进程,这些进程将使用Web服务器的所有可用资源,系统的性能将下降到非常低。
一些Web服务器提供者必须通过为他们的服务器提供插件和“API”的方式简化Web应用程序开发。这些解决方案都与某些Web服务器相关,无法解决跨多个供应商的解决方案。例如,微软的主动服务器网页(ASP)技术在网页中创建动态内容更容易,而且还可以在微软上进行个人web服务器和IIS。
还有其他的解决方案,但不能让普通页面设计者能轻松掌握。例如,如servlet java技术可以使用java语言互动应用服务器代码更容易。开发人员写这样的servlet来接收来自Web浏览器的信号,生成一个HTTP请求,进行动态响应(可能是查询数据库来完成请求),然后发送包含HTML或XML文件的响应给浏览器。
注意:一个是基于在服务器端程序的java servlet java技术操作(不同的程序,在浏览器端操作)。在本书的第4章servlet会详细说明。
使用这种方法,整个网页必须在java servlet做。如果开发人员或网站管理人员要调整页面,即使在逻辑上已经能够运行,也必须编辑和重新编译servlet java,。使用这种方法,动态内容与页面的应用仍然需要一定的开发技能。
显然,需要的是一个行业在页面的范围内创建动态内容的解决方案。该方案将解决目前的方案有限的不能解决的问题。如下:
可以应用于任何Web服务器或应用程序。
将应用和页面显示分离。
可以快速开发和测试。
简化交互Web应用程序的开发。
JSP技术的设计正式是为了满足这样的要求。JSP标准是一个Web服务器、应用服务器、交易系统和开发工具之间广泛的合作供应者。从这个标准来发展现有的一体化和实现java编程环境(例如,java Servlet、JavaBeans)支持的技术和工具的平衡。其结果是一种新的基于Web应用程序的开发方法,使用基于组件的应用程序逻辑页面具有强大的功能。
2 JSP页面的整体语义
一个JSP页面实现类定义了请求的响应对象的_jspservice()映射方法。此转换的一些细节是特定于所使用的脚本语言(参见第9章“Scripting”)。大多数细节不是语言特定的并且会在本章中描述。
JSP页面的内容主要用于描述写入响应输出流中的数据。(JSP容器通常将此数据发送回客户端。)这种描述是基于一个通过隐式对象显现的JspWriter对象,(见第JSP。1.8.3,“隐式对象”)。其值变化:
最初,输出是一个新的JspWriter对象。这个对象不同于getwriter()对象返回的流对象。和可能被认为是插上后为了实现缓冲(见第JSP。1.10.1,“页面”)。这是初始对象。JSP页面作者被禁止直接写与ServletResponse相关的PrintWriter或OutputStream。
JSP容器不应该从getwriter()调用响应,直到第一部份内容被发送到客户端。这使得JSP的许多用途,包括使用JSP作为一种语言来“粘贴”提供二进制内容的操作,或者可靠地转发到servlet,或者在生成内容之前动态地改变响应的内容类型。参见第4章“国际化问题”。
在一些行为的主体,可能是暂时重新指派给另一个(嵌套的)一个jspwriter对象实例。是否如此取决于动作语义的细节。通常,这些临时流的内容被附加到先前引用的流中,然后将其重新分配以引用前一个(嵌套)流。这样的嵌套流总是缓冲的,并且需要对嵌套流进行显式刷新,否则它们的内容将被丢弃。
如果最初的 JspWriter对象是缓冲类型的,那么根据网页的指令自动刷新的属性值,该缓冲区将自动刷新输出流ServletResponse以避免溢出内容,或应抛出信号缓冲区溢出异常。如果最初的JspWriter是非缓冲类型的,那么写的内容会被直接传递到ServletResponse输出流。
JSP页面还可以描述当某些特定事件发生时应该作出何种反应。在JSP 2.1中,唯一可以描述的事件是页面的初始化和销毁。这些事件使用声明元素中的“有名方法名”来描述。
JavaScript是第一种用于浏览器的动态通用的客户端脚本语言。Netscape的首次提出是在1995年,那时它叫JavaScript LiveScript。但是很快Netscape LiveScript改名为JavaScript,从相同的发表声明他们的java开发者。一个java和javascript语句将相辅相成,但它们是不同的,所以很多技术被这两种技术的误解
JavaScript创建用户界面控件提供了脚本语言。其实在浏览器中进入JavaScript代码逻辑。它可以支持这样的效果:当移动用户的网页上的光标输入验证或转换图像。
微软还写出了他们的JavaScript版本和JScript调用。 Microsoft和Netscape支持JavaScript和JScript的核心特征,欧洲制造商是由(ECMA)标准组织,脚本语言的控制标准。 ECMA其脚本语言ECMAScript命名。
Servlet和JSP通常包括组织通用的信息片段,如徽标,版权,商标或导航栏。 Web应用程序使用包含机制在任何需要的地方导入信息,因为在一个地方更容易地更改内容,然后将其维护在使用它的每一段代码中。这些信息中的一些是静态的,从来没有或很少发生变化,例如组织的标志。在其他情况下,信息更具动态性,经常和不可预测的变化,例如必须为每个用户进行本地化的文本问候语。在这两种情况下,您都希望确保servlet或JSP可以独立于其包含的内容进行演进,并且servlet或JSP的实现必要时会正确更新其包含的内容。
您希望在JSP中包含一个不会非常变化的资源(例如表示页眉或页脚的页面片段)。在包含JSP页面中使用include指令,并将附带的JSP段赋予.jspf扩展名。
您希望每次接收到请求时将内容都包含在JSP中,而不是将JSP转换为servlet时。使用jsp:include标准操作。
您希望根据从配置文件导出的值在JSP中动态包含文件。使用jsp:include标准操作。在外部属性文件或部署描述符中的配置参数中提供值。
您希望在JSP文档中包含一个XML文件的片段,或者在XML语法中包含一个JSP页面。对于JSP的每个请求,要使用jsp:include标准操作。如果include操作应在翻译阶段发生,请使用jsp:directive.include元素。
您希望在包含文件的上下文之外添加一个JSP段。使用c:import
3 JSP标签的操作原理和优点
在本节简单介绍JSP和优势的工作原理。
引擎所要求的JSP文件中第一次将JSP Servlet转换为文档JSP。这个引擎本身就是一个Servlet。 JSP的操作过程如下所示:
(1)JSP引擎将JSP文件转换为Java源文件(Servlet),如果发现文件有任何语法错误,JSP,转换过程将中断,并向服务器和客户端输出错误消息。
(2)如果转换,用引擎JSP将javac Java源文件编译成相应的放大文件。
(3)创建一个Servlet(JSP页面),Servlet jspInit()方法的转换被执行,jspInit()方法在Servlet的生命周期中只执行一次。
(4)jspService()方法调用到客户端请求。对于每个请求,JSP引擎创
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[140816],资料为PDF文档或Word文档,PDF文档可免费转换为Word
课题毕业论文、外文翻译、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。