JSP简介

时间:2022-10-30 08:16:40

天涯部落JSP  [我要发帖]

 

JSP-简介

 

楼主:日汇改  时间:2009-11-08 15:32:00  点击:407  回复:0

回复 收藏 分享 楼主
JSP-简介
 

JSP(JavaServer Pages)是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件(*.jsp)。

 

用JSP开发的Web应用是跨平台的,即能在Linux下运行,也能在其他操作系统上运行。

 

JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计和显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。

 

Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序段,然后将执行结果连同JSP文件中的HTML代码一起返回给客户。插入的Java程序段可以操作数据库、重新定向网页等,以实现建立动态网页所需要的功能。

 

JSP与Java Servlet一样,是在服务器端执行的,通常返回该客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。

 

JSP的1.0规范的最后版本是1999年9月推出的,12月又推出了1.1规范。目前较新的是JSP1.2规范,JSP2.0规范的征求意见稿也已出台。

 

JSP页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。Java Servlet 是JSP的技术基础,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。

 

JSP-JSP技术的强势

 

(1)一次编写,到处运行。在这一点上Java比PHP更出色,除了系统之外,代码不用做任何更改。

 

(2)系统的多平台支持。基本上可以在所有平台上的任意环境中开发,在任意环境中进行系统部署,在任意环境中扩展。相比ASP/PHP的局限性是现而易见的。

 

(3)强大的可伸缩性。从只有一个小的Jar文件就可以运行Servlet/JSP,到由多台服务器进行集群和负载均衡,到多台Application进行事务处理,消息处理,一台服务器到无数台服务器,Java显示了一个巨大的生命力。

 

(4)多样化和功能强大的开发工具支持。这一点与ASP很像,Java已经有了许多非常优秀的开发工具,而且许多可以免费得到,并且其中许多已经可以顺利的运行于多种平台之下。

 

JSP-JSP技术的弱势

 

(1) 与ASP一样,Java的一些优势正是它致命的问题所在。正是由于为了跨平台的功能,为了极度的伸缩能力,所以极大的增加了产品的复杂性。

 

(2) Java的运行速度是用class常驻内存来完成的,所以它在一些情况下所使用的内存比起用户数量来说确实是“最低性能价格比”了。从另一方面,它还需要硬盘空间来储存一系列的.java文件和.class文件,以及对应的版本文件。

 

JSP-JSP六种内置对象

 

request, response, out, session, application, config, pagecontext, page, exception.

 

request对象:

 

该对象封装了用户提交的信息,通过调用该对象相应的方法可以获取封装的信息,即使用该对象可以获取用户提交信息。

 

response对象:

 

对客户的请求做出动态的响应,向客户端发送数据。

 

session对象:

 

1.什么是session:session对象是一个JSP内置对象,它在第一个JSP页面被装载时自动创建,完成会话期管理。

 

从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。当一个客户访问一个服务器时,可能会在这个服务器的几个页面之间反复连接,反复刷新一个页面,服务器应当通过某种办法知道这是同一个客户,这就需要session对象。

 

2.session对象的ID:当一个客户首次访问服务器上的一个JSP页面时,JSP引擎产生一个session对象,同时分配一个String类型的ID号,JSP引擎同时将这个ID号发送到客户端,存放在Cookie中,这样session对象和客户之间就建立了一一对应的关系。当客户再访问连接该服务器的其他页面时,不再分配给客户新的session对象,直到客户关闭浏览器后,服务器端该客户的session对象才取消,并且和客户的会话对应关系消失。当客户重新打开浏览器再连接到该服务器时,服务器为该客户再创建一个新的session对象。

 

aplication对象:

 

1.什么是application:

 

服务器启动后就产生了这个application对象,当客户再所访问的网站的各个页面之间浏览时,这个application对象都是同一个,直到服务器关闭。但是与session不同的是,所有客户的application对象都是同一个,即所有客户共享这个内置的application对象。

 

2.application对象常用方法:

 

(1)public void setAttribute(String key,Object obj): 将参数Object指定的对象obj添加到application对象中,并为添加的对象指定一个索引关键字。

 

(2)public Object getAttribute(String key): 获取application对象中含有关键字的对象。

 

out对象:

 

out对象是一个输出流,用来向客户端输出数据。out对象用于各种数据的输出。

 

Cookie:

 

1.什么是Cookie:

 

Cookie是Web服务器保存在用户硬盘上的一段文本。Cookie允许一个Web站点在用户的电脑上保存信息并且随后再取回它。

 

举例来说,一个Web站点可能会为每一个访问者产生一个唯一的ID,然后以Cookie文件的形式保存在每个用户的机器上。

 

如果您使用IE浏览器访问Web,您会看到所有保存在您的硬盘上的Cookie。它们最常存放的地方是:c:windowscookies(在Window2000中则是C:Documents and Settings您的用户名Cookies )

 

Cookie是以“关键字key=值value“的格式来保存纪录的.

 

2.创建一个Cookie对象,调用Cookie对象的构造函数可以创建Cookie。Cookie对象的构造函数有两个字符串参数:Cookie名字和Cookie值。

 

  Cookie c=new Cookie(“username”,”john”);

 

3. JSP中如果要将封装好的Cookie对象传送到客户端,使用response的addCookie()方法。

 

格式:response.addCookie(c)

 

4.读取保存到客户端的Cookie,使用request对象的getCookies()方法,执行时将所有客户端传来的Cookie对象以数组的形式排列,如果要取出符合需要的Cookie对象,就需要循环比较数组内每个对象的关键字。

 

JSP-JSP动态网站开发技术

 

早期的动态网站开发技术使用的是CGI-BIN接口。开发人员编写与接口相关的单独的程序和基于Web的应用程序,后者通过Web服务器来调用前者。这种开发技术存在着严重的扩展性问题——每一个新的CGI程序要求在服务器上新增一个进程。如果多个用户并发地访问该程序,这些进程将耗尽该Web服务器所有的可用资源,直至其崩溃。

 
 

jsp应用测试如图

 

为克服这一弊端,微软公司提出了Active Server Pages(ASP)技术,该技术利用“插件”和API简化了Web应用程序的开发。ASP与CGI相比,其优点是可以包含HTML标签,可以直接存取数据库及使用无限扩充的ActiveX控件,因此在程序编制上更富有灵活性。但该技术基本上是局限于微软的操作系统平台之上,主要工作环境是微软的IIS应用程序结构,所以ASP技术不能很容易地实现跨平台的Web服务器程序开发。

 

Hypertext Preprocessor(超文本预处理器),即PHP动态网站开发技术与ASP相似,也是一种嵌入HTML文档的服务器端脚本语言。其语法大部分与C、Java、Perl等语言相似,并形成了自己的独有风格,利用该语言Web程序员可以快速地开发出动态网页。PHP在大多数Unix平台、GUN/Linux和微软Windows平台上均可以运行。PHP的优点主要有:安装方便,学习过程简单;数据库连接方便,兼容性强;扩展性强;可以进行面向对象编程等。但PHP也存在一些弱点,主要是PHP是一种解释型语言,不支持多线程结构,支持平台和连接的数据库都有限,特别是在支持的标准方面存在先天不足,对于某些电子商务应用来说,PHP是不适合的。

 

还有一些技术,如Java Servlets技术,利用该技术可以很容易地用Java语言编写交互式的服务器端代码。一个Java Servlets就是一个基于Java技术的运行在服务器端的程序(与Applet不同,后者运行在浏览器端)。开发人员编写这样的Java Servlets,以接收来自Web浏览器的HTTP请求,动态地生成响应(可能需要查询数据库来完成这种请求),然后发送包含HTML或XML文档的响应到浏览器。这种技术对于普通的页面设计者来说要轻易地掌握是很困难的。采用这种方法,整个网页必须都在Java Servlets中制作。如果开发人员或者Web管理人员想要调整页面显示,就不得不编辑并重新编译该Java Servlets。

 

太阳微系统公司(Sun Microsystems Inc.)在Web服务器、应用服务器、交易系统以及开发工具供应商间广泛支持与合作下,整合并平衡了已经存在的对Java编程环境(例如Java Servlets和JavaBeans)进行支持的技术和工具后产生了一种新的、开发基于Web应用程序的方法——JavaServer Pages技术(JSP)。这种动态网站开发技术主要有以下一些特点:

 

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

 

分离了应用程序的逻辑和页面显示;

 

能够进行快速的开发和测试;

 

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

 
 

JSP-JSP的技术方法

 

为了快速方便地进行动态网站的开发,JSP在以下几个方面做了改进,使其成为快速建立跨平台的动态网站的首选方案。

 

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

 

用JSP技术,Web页面开发人员可以使用HTML或者XML标识来设计和格式化最终页面,并使用JSP标识或者小脚本来

 

JSP程序流程图

 

生成页面上的动态内容(内容是根据请求变化的,例如请求账户信息或者特定的一瓶酒的价格等)。生成内容的逻辑被封装在标识和JavaBeans组件中,并且捆绑在脚本中,所有的脚本在服务器端运行。由于核心逻辑被封装在标识和JavaBeans中,所以Web管理人员和页面设计者,能够编辑和使用JSP页面,而不影响内容的生成。

 

在服务器端,JSP引擎解释JSP标识和脚本,生成所请求的内容(例如,通过访问JavaBeans组件,使用JDBC技术访问数据库或者包含文件),并且将结果以HTML(或者XML)页面的形式发送回浏览器。这既有助于作者保护自己的代码,又能保证任何基于HTML的Web浏览器的完全可用性。

 

2.可重用组件

 

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

 

3.采用标识

 

Web页面开发人员不会都是熟悉脚本语言的编程人员。JSP技术封装了许多功能,这些功能是在易用的、与JSP相关的XML标识中进行动态内容生成所需要的。标准的JSP标识能够访问和实例化JavaBeans组件,设置或者检索组件属性,下载Applet,以及执行用其他方法更难于编码和耗时的功能。

 

4.适应平台

 

几乎所有平台都支持Java,JSP+JavaBeans几乎可以在所有平台下通行无阻。从一个平台移植到另外一个平台,JSP和JavaBeans甚至不用重新编译,因为Java字节码都是标准的与平台无关的。

 
 

JSP视图

 

5.数据库连接

 

Java中连接数据库的技术是JDBC,Java程序通过JDBC驱动程序与数据库相连,执行查询、提取数据等操作。Sun公司还开发了JDBC-ODBC bridge,利用此技术Java程序可以访问带有ODBC驱动程序的数据库,目前大多数数据库系统都带有ODBC驱动程序,所以Java程序能访问诸如Oracle、Sybase、MS SQL Server和MS Access等数据库。

 

此外,通过开发标识库,JSP技术可以进一步扩展。第三方开发人员和其他人员可以为常用功能创建自己的标识库。这使得Web页面开发人员能够使用熟悉的工具和如同标识一样的执行特定功能的构件来进行工作。

 

JSP技术很容易整合到多种应用体系结构中,以利用现存的工具和技巧,并且能扩展到支持企业级的分布式应用中。作为采用Java技术家族的一部分,以及Java 2(企业版体系结构)的一个组成部分,JSP技术能够支持高度复杂的基于Web的应用。

 

由于JSP页面的内置脚本语言是基于Java的,而且所有的JSP页面都被编译成为Java Servlets,所以JSP页面具有Java技术的所有好处,包括健壮的存储管理和安全性。作为Java平台的一部分,JSP拥有Java编程语言“一次编写,各处运行”的特点。

 
 

JSP-JSP的应用模型

 

利用JSP技术,动态信息由JSP页面来表现,JSP页面由安装在Web服务器或者使用JSP的应用服务器上的JSP引擎执行。JSP引擎接受客户端对JSP页面的请求,并且生成JSP页面作为对客户端的响应。

 

JSP页面通常被编译成为Java Servlets,这是一个标准的Java扩展。页面开发人员能够访问全部的Java应用环境,以利用Java技术的扩展性和可移植性。当JSP页面第一次被调用时,如果它还不存在,就会被编译成为一个Java Servlets类,并且存储在服务器的内存中。这就使得在接下来的对该页面的调用中,服务器会有非常快的响应(这避免了CGI-BIN为每个HTTP请求生成一个新的进程的问题)。

 

JSP页面可以包含在多种不同的应用体系结构或者模型中,可以用于由不同协议、组件和格式所组成的联合体中。基于JSP的动态信息发布技术是一个开放的、可扩展的建立动态Web页面的标准。不论采用什么创建工具,开发人员都可以使用JSP页面来创建可移植的Web应用,在不同的Web应用服务器上运行。

 
 

JSP-JSP2.0的最新改进

 

JSP2.0版是对JSP1.2的升级,引入的最主要的新特性包括:

 

1、一种简单的表达式语言(ONGL),能够用来容易地从JSP页面访问数据,这种表达式语言 简化了基于JSP的不含脚本的应用程序的编写,不需要使用Java Scriptlet或者Java表达 式;

 

2、用于直接使用JSP技术来定义可重用的自定义行为的新语法,该语法使用.tag和.tagx 文件,这类文件可由开发人员或者网页作者编写;

 
 

一. JSP表达式语言 - EL扩展表达式语言

 

在JSP2.0之前,网页作者只能使用 表达式访问系统的值,   比如:">或者

 

而表达式语言允许网页作者使用简单的语法访问对象。比如要访问一个简单变量,可以 像下面这样写:

 

二. 简单标志库扩展 _SimpleTag

 

在jsp1.2时代已经有标记库了, 并且功能强大,但标记库的编程和调用都比较复杂,导 致真正使用到WEB开发中的还是不多。JSP2.0推出的简单标记库扩展解决了以上的问题。 简单标记库相对JSP1.2中的标记库来说,优点在于: 对后台程序员来说:结构更简单,实现接口更少,可以轻松实现后台程序

 

JSP 2.0中加入了新的创建自制标记的API:javax.servlet.jsp.tagext.SimpleTag,该 API定义了用来实现简单标记的接口。和JSP 1.2中的已有接口不同的是,SimpleTag接口 不使用doStartTag()和doEndTag()方法,而提供了一个简单的doTag()方法。这个方法在 调用该标记时只被使用一次。而需要在一个自制标记中实现的所有逻辑过程、循环和对 标记体的评估等都在这个方法中实现。从这个方面来讲,SimpleTag可以和IterationTag达到同等的作用。但SimpleTag的方法和处理周期要简单得多。在SimpleTag中还有用来 设置JSP内容的setJspBody()和getJspBody()方法。Web容器会使用setJspBody()方法定 义一个代表JSP内容的JspFragment对象。实现SimpleTag标记的程序可以在doTag方法中 根据需要多次调用getJspBody().invoke()方法以处理JSP内容。 对于前台WEB页面制作人员:在JSP1.2时代,Taglib页面调用实际上是比较复杂的,SimpleTag+EL表达式语言极大的简化了Taglib调用,真正达到不懂JAVA的人员也可以轻松编写 JSP页面的目的。

 
 

JSP-主要句法

 

一个JSP页面可以被分为以下几部分:

 

静态数据

 

  静态数据在输入文件中的内容和输出给HTTP 响应的内容完全一致。此时,该JSP输入文件会是一个没有内嵌JAVA或动作的HTML页面。而且,客户端每次请求都会得到相同的响应内容。

 

JSP 指令

 

  JSP指令控制JSP编译器如何去生成 servlet,以下是可用的指令:

 

  包含指令include – 包含指令通知JSP编译器把另外一个文件完全包含入当前文件中。效果就好象被包含文件的内容直接被粘贴到当前文件中一样。这个功能和C preprocessor所提供的很类似。被包含文件的扩展名一般都是 “jspf” (即 JSP Fragment,JSP碎片);

 

  页面指令page – 页面指令有以下几个选项:

 

  import 使一个JAVA导入声明被插入到最终页面文件。

 

  contentType 规定了生成内容的类型。当生成非HTML内容或者当前字符集character set并非默认字符集时使用。

 

  errorPage 处理HTTP请求时,如果出现异常则显示该错误提示信息页面。

 

  isErrorPage 如果设置为TRUE,则表示当前文件是一个错误提示页面。

 

  isThreadSafe 表示最终生成的servlet 是否安全线程( thread safe)。

 

  标签库指令taglib – 标签库指令描述了要使用的JSP标签库。该指令需要指定一个前缀prefix(和C++的命名空间很类似)和标签库的描述URI:;

 

JSP脚本元素和变量

 

  标准脚本变量:以下是永远可用的脚本变量:

 

  out – JSPWriter用来写入响应流的数据

 

  page – servlet自身

 

  pageContext – 一个 PageContext 实例包括和整个页面相联系的数据,一个给定的HTML页面可以在多个JSP之间传递。

 

  request – HTTP request 对象

 

  response – HTTP response 对象

 

  session – HTTP session 对象,在多个请求之间追踪一个客户的信息。

 

  脚本元素:有三个基本的脚本元素,作用是使JAVA代码可以直接插入 servlet.

 

  一种是声明标签,在JAVA SERVLET的类体中放入一个变量的定义。静态的数据成员也可以如此定义。

 

  一种是脚本标签,在JAVA SERVLET的类的_jspService()方法中放入所包含的语句。

 

  一种是表达式标签,在JAVA SERVLET的类中放入待赋值的表达式,表达式注意不能以分号结尾。

 

JSP 动作

 

  JSP动作是一系列可以调用内建于网络服务器中的功能的XML标签。JSP提供了以下动作:

 

  jsp:include 和子过程类似,JAVA SERVLET暂时接管对其它指定的JSP页的请求和响应。当处理完该JSP页后就马上把控制权交还当前JSP页。这样JSP代码就可以在多个JSP页*享而不用复制。

 

  jsp:param 可以在jsp:include, jsp:forward 或 jsp:params块之间使用。指定一个将加入请求的当前参数组中的参数。

 

  jsp:forward 用于处理对另一个JSP或SERVLET的请求和响应。控制权永远不会交还给当前JSP页。

 

  jsp:plugin Netscape Navigator 的老版本和 Internet Explorer 使用不同的标签以嵌入一个applet。这个动作产生为嵌入一个APPLET所需要的指定浏览器标签。

 

  jsp:fallback 如果浏览器不支持APPLETS则会显示的内容。

 

  jsp:getProperty 从指定的JavaBean。

 

  jsp:setProperty 在指定的JavaBean中设置一个属性值。

 

  jsp:useBean 创建或者复用一个JavaBeans 变量到JSP页。

 

JSP标签库

 

  除了JSP预定义动作之外,开发者还可以使用JSP标签扩展API添加他们自定义的动作。开发者写一种实现一个标签的界面和一个标签库的XML描述文件的JAVA类,这就能指定标签和实现标签的JAVA类。

 
 

JSP-与ASP的比较

 

JSP(Java Server Page)与ASP(Active Server Page)两者都是常用的动态网页技术,也都是可以嵌入HTML中的程序,但两者是有着本质的不同,主要从以下几个方面对其进行比较:

 

  1.Web服务器的支持:大多数通用的 Web服务器如:Apache、Netscape和Microsoft IIS都支持JSP页面,只有微软本身的Microsoft IIS和Personal Web Server可以支持ASP。

 

  2.平台的支持:JSP具有平*立性,只要是一般的Java程序可以运行的平台,都支持JSP程序。Windows平台可以很好的支持ASP,但ASP对于基于Win32逐渐模型的依赖,使得它难于一直到其它平台上。

 

  3.组件模型:JSP是建立在可重用的、跨平台的组件(如:JavaBeans、Enterprises JavaBeans 和用户定制的标签库等组件)之上的,而ASP使用的是基于Win32的COM组件模型。

 

  4.脚本语言:JSP可以使用Java编程语言或JavaScript作为脚本语言,而ASP使用VBScript或Jscript作为脚本语言。

 

  5.安全性:JSP使用Java安全模型,而ASP使用Windows NT的安全结构。

 

  6.与Access数据库的连接:JSP使用JDBC建立与Access数据库的连接,而ASP对Access数据库使用Data Active Objects。

 

  7.用户定制的标签:JSP可以使用用户定制标签库进行扩充,而ASP中没有用户定制标签库,ASP是不能扩充的。

 
 

登录注册

 

请遵守天涯社区公约言论规则,不得违反国家法律法规