《Jaa程序设计基础》第13章:JSP技术基础.ppt

上传人:za****8 文档编号:16087060 上传时间:2020-09-18 格式:PPT 页数:118 大小:774KB
返回 下载 相关 举报
《Jaa程序设计基础》第13章:JSP技术基础.ppt_第1页
第1页 / 共118页
《Jaa程序设计基础》第13章:JSP技术基础.ppt_第2页
第2页 / 共118页
《Jaa程序设计基础》第13章:JSP技术基础.ppt_第3页
第3页 / 共118页
点击查看更多>>
资源描述
第13章 JSP技术基础,学习重点: 网络应用结构 J2EE的主体结构 JSP基本原理 JSP运行环境配制 JSP基本语法 JSP基本指令与标准动作 JSP的内置对象的特点与使用,第13章 JSP技术基础,13.1 网络应用的系统结构 13.1.1 两层结构 13.1.2 三层结构 13.1.3 网络应用构架中的一些补充概念 13.2 J2EE技术简介 13.2.1 J2EE的结构 13.2.2 J2EE中的主要组件 13.3 JSP技术概述 13.3.1 JSP的技术原理 13.3.2 JSP与ASP 13.3.3 JSP与Servlet的比较 13.3.4 JSP运行环境的配置,13.4 JSP基本语法 13.4.1 变量声明与表达式 13.4.2 程序段 13.4.3 基本指令 13.4.4 将JSP与HTML结合起来 13.4.5 本节综合实例 13.5 JSP标准动作 13.5.1 jsp:include动作 13.5.2 使用Java Bean 13.5.3 jsp:forward动作 13.5.4 jsp:plugin动作,13.6 JSP的内置对象 13.6.1 对象的可见范围 13.6.2 与输入输出有关的内置对象 13.6.3 session对象 13.6.4 与上下文有关的内置对象 13.6.5 用于错误处理的内置对象 13.6.6 与Servlet有关的内置对象 13.7 练习题,13.1 网络应用的系统结构,基于网络的应用系统需要有服务器与客户端的交互,需要通过网 络传输数据才能实现应用逻辑。而如何处理好服务器与客户端的关 系,是网络应用要解决的核心问题。,13.1.1 两层结构,传统的网络应用通常是建立在两层结构基础上的,所谓两层结 构,即指客户机/服务器(Client/Server)两层,这类应用系统往往 需要在客户端安装相应的应用程序,一旦应用逻辑即客户需求发生 变化,需要对客户端程序进行修改和升级。,13.1.2 三层结构,这三层服务包括: 第一层用户服务层,提供信息交互、浏览定位、保证用户界面的一致性和完整性。 第二层业务服务和其他的“中间”服务,制订维护和共享业务逻辑,从数据中生成需要的业务信息,保证业务信息的合法性和一致性,使原始数据和用户需求的信息相互独立。 第三层数据服务,数据的定义,永久数据的存贮和检索,数据一致性的保证。,三层结构的特点如下:,把应用逻辑从客户机中分离出来,使客户端程序简单、标准,使用方便,同时提供更丰富的交互式的信息发布形式。 系统维护简单,摆脱了由于客户有多个应用而造成的复杂运行环境的维护。 应用逻辑的改变即不影响底层数据,也不影响用户的使用。,13.1.3 网络应用构架中的一些补充概念,1. Web服务器 Web服务器即万维网服务器是浏览网页需要的最根本的后台支持,它能 够接收来自客户端(通常都是用户使用的浏览器)的请求,并根据请求中的 某些信息做出相应的应答。 在访问Web页面时,通常情况下使用的是HTTP协议,所谓协议,可以认 为它是交互双方的一种约定,更形象地说就像是服务器与客户端之间的语 言,只有双方使用同样的语言,才能互相理解和进行沟通。,几种流行的Web服务器,Apache Microsoft IIS iPlanet Web Server(Netscape Enterprise Server) Novell NetWare WebServer Oracle WebServer IBM WebSphere WebSphere,2. HTTP协议,绝大多数的基于Web的J2EE Client都使用HTTP协议与J2EE服务器 通讯。HTTP协议定义了一个Client,它包括可以向服务器发送哪些 请求(Request)以及服务器可能返回什么样的应答(Reply)。每个请 求都包含一个URL(Uniform Resource Locator,统一资源定位), 它是一个字符串,它能够惟一标识一个Web组件或者一个静态对 象,如HTML页面或者图形文件。 J2EE服务器把HTTP请求转换成HTTP请求对象,并将其发送给这个 请求中URL指向的Web组件,Web组件根据请求,生成一个相应的应 答对象,J2EE服务器再把这个应答对象转换成HTTP应答,返回给 Client。,HTTP请求的常见方法如下:,get获取URL指定的资源 head返回URL指定资源的头部 post向服务器发送一组没有长度限制的数据 put在URL指定的资源中存储数据 delete在URL指定的资源中删除数据 options返回服务器支持的HTTP方法 trace返回trace请求的头部,HTTP应答状态代码,HTTP应答包含有一个结果编号、头部和应答体三个部分,HTTP应答有 以下一些常见结果编号: 404找不到请求的资源 401请求需要HTTP认证 403无访问该资源权限 500服务器内部错误 503服务器忙,3. 静态网页与动态网页,HTML是编制网页的基本语言,但它只能用于静态的网页。 动态页面技术,系统的页面不再是完全的HTML,而是在其中嵌入了很多从后台数据库取回的内容。 例子:在静态页面中,假设用户Teresa打开一个页面时,由于这个页面上所有的信息都是在写好的HTML文件中,所以它只能显示出这样的欢迎词:“你好,尊敬的用户!”,而有了动态页面技术,Teresa可以有自己的账号来登录这个系统,登录上之后,系统能够自动找到所有与这个用户相关的个性化信息,这时,系统的欢迎词可能就是这样的:“你好!Teresa,这是你第10次登录本系统,你上次登录时间是2001年7月3日,你最近购买的产品是:VCD小叮当15集”等。,常见的动态页面技术有4种,即:,CGI(Common Gateway Interface) 公共网管接口,用户可以使用不同的程序编写适合的CGI程序。 ASP(Active Server Pages) ASP是Microsoft公司开发的一种类似HTML和Script(脚本)与CGI(Common GAteway Interface,通用网关接口)的结合体,它没有提供自己专门的编程语言,而是允许用户使用包括VBScript和JavaScript等在内的许多已有的脚本语言编写ASP的应用程序。 PHP(Hypertext Preprocessor,超文本预处理器) PHP是一种易于学习和使用的服务器端脚本语言,是生成动态网页的工具之一。它是嵌入HTML文件的一种脚本语言。 JSP(Java Server Pages) JSP是由Sun Microsystem公司于1999年6月推出的新技术,是基于Java Servlet以及整个Java体系的Web开发技术。利用这一技术可以建立先进、安全和跨平台的动态网站。,13.2 J2EE技术简介,Sun公司的J2EE体系结构是针对上述三层结构中中间层的一个集 成框架,它能够满足低费用、高可用性、高可靠性以及可扩展性的 应用需求。通过提供统一的开发平台,J2EE降低了开发多层应用的 费用和复杂性,同时提供对现有应用程序集成强有力支持。利用 J2EE,各公司可以更为方便地在中间层加速分布式项目部署,而在 企业开发工作中利用这种体系结构,开发者将不必担心系统的运营 环境,从而可以集中精力重视商业逻辑的设计和应用的表示。,13.2.1 J2EE的结构,J2EE将电子商务应用分为4个层次,其中,客户层和企业信息系 统层分别对应上面三层结构的第一、三层,而Web层和业务层对应 三层结构的中间层。,1. 客户层(Client Tier),在一个基于Web 的J2EE 应用中,用户的浏览器在客户层中运行,并从一个Web服务器上下载Web层中的静态HTML 页面或由JSP或Servlets生成的动态HTML 页面 。 在一个不基于Web 的J2EE 应用程序可能是一个独立客户端程序,也可能是运行在其他一些基于网络的系统(如手持设备或汽车电话)中的Applet 程序。这些程序在不经过Web 层就可以直接访问业务层中的组件,以实现业务逻辑。,2. Web层,J2EE Web 组件可以由JSP 页面、基于Web 的Applets 以及显示 HTML 页面的Servlets 组成。 Web上的组件通常是依赖容器(Container)来支持上述服务的。,3. 业务层,负责解决或满足某个特定业务领域(如银行、零售或金融业)需要的业务逻辑,通常由一些特定的组件来完成,即Enterprise Java Beans(EJB)。 业务层有时候也被称作Enterprise Java Beans层,业务层和Web 层一起构成了三层结构的中间层,是电子商务应用的核心部分。,4. 企业信息系统层(EIS),企业信息系统层运行企业信息系统软件,并负责存储企业数 据。,上述J2EE层次如图所示,图中的应用一是基于非Web方式的,而应用二是基于Web方式的。,13.2.2 J2EE中的主要组件,1. Servlet 它是一种简单高效动态页面技术,并且Servlet运行在服务器端。运行 在服务器端就意味着它能够为用户提供非常广泛的功能和数据,而不必受 客户端资源的限制。 它是一种跨平台的纯Java服务器端程序,它扩展了基于“请求应答”机制的Web服务器的功能。 开发Servlet除了有JDK之外,我们还需要有JSDK。,2. Java Beans,Java Beans也是一些Java类,它通常用来实现一些比较常用的简单功能,并可以很容易地被重用或者是插入其他应用程序中去。 Java Beans的设计原则主要是针对其中的公共变量或者属性以及公共方法而言的。,Java Beans的变量必须遵循的原则如下:,可读写、只读、只写。 简单,也就是说Java Beans的变量应该是单值或者数组。,Java Beans的方法必须遵循的原则如下:,对于所有可读的属性,Beans必须提供相应的方法以供外部读取该属性的值。例如,某个Bean拥有可读公共属性: public String name; 那么它还必须提供一个公共方法: public String getName(); 对于所有可写的属性,Beans必须提供相应的方法以供外部修改该属性的值,例如,某个Bean拥有可写公共属性: public String name; 那么它还必须提供一个公共方法: public setName(String newName); 运用在网络上的Java Beans的主要任务就是在后台处理业务逻辑,它可以和JSP或者Servlet等管理页面的技术结合起来使用。,3. EJB,EJB(Enterprise JavaBeans)是一种非常复杂的Java Beans,它 必须定义一些特定的和客户化的方法和属性,来实现企业的核心业 务逻辑。,通常情况下,实现一个EJB需要三段Java程序,即:,远程接口(Remote Interface) 远程接口是一个Interface,用于定义客户可能调用的与业务相关的方法,例如货币转换、加入购物车、购买、付款等业务接口。 本地接口(Home Interface) 本地接口也是一个Interface,用来为用户提供创建、查找以及删除一个EJB对象,即为客户提供一个控制EJB的接口。 Enterprise Bean 它是一个Enterprise Bean类对象,是真正实现业务逻辑的地点,即实现Remote Interface中定义的方法,以及与Home Interface中定义的方法中真正调用的方法,如初始化、退出等。,4. XML,XML(Extensible Markup Language,可扩展标记语言)是一种用于表达和描述文本数据的语言,所有支持XML(API XML)应用程序接口的程序或者工具都能识别用XML描述的数据。 XML在某种程度上和HTML有些相似,但两者的最大不同在于HTML是用来描述输出的,而XML是用于描述数据的。 HTML中使用的tag都是固定的,也就是说不能随便扩展,而XML可以通过一定的定义机制,灵活地使用自己喜欢的tag,而不受任何限制。,例如:, XML Bible Elliotte Rusty Harold 在这段描述中,有“book”和“auther”等自定义的tag,使数据的 语义变得非常清晰,13.3 JSP技术概述,JSP(Java Server Pages)是J2EE平台中的一个重要组成部分, 是现今最流行的动态网络设计方法。JSP技术将服务器端Java和号 称WYSIWYG(what you see is what you get,所见即所得)静态页 面技术HTML完美地结合起来,使得网页的外观设计与隐藏在其后的 商业逻辑截然分开,而且它是与Web服务器和平台都无关的网页开 发技术,只要服务器支持Java,就能够支持JSP。,JSP的主要优势有以下几点:,动静分离 它将Web页面中有关输出格式的表达部分与后端数据相关的业务逻辑部分有效的分离,使程序员从繁重的格式设计中解脱出来,可以专心从事业务逻辑的实现工作,并可以将页面设计工作真正交付给美工来完成,使应用开发效率空前提高。 简单易用 由于上述特性,JSP本身的结构清晰,逻辑简单,可以很容易被非专业人员掌握,便于开发工作的开展。 可移植性 由于Java本身的平台无关性,基于Java的JSP技术也同样继承了可移植性的特点,只要服务器端支持Java,JSP就可以运行。,13.3.1 JSP的技术原理,1. JSP的实质 首先来看一段JSP代码,这段程序的功能是在屏幕上显示当前日期,其代 码如图中上部的方框所示。,其运行结果如图所示,这段代码经过编译之后,会在服务器端变成下面这样一段代码,程序代码 JSP是对Servlet的一种抽象,JSP并没有增加任何本质上不能用 Servlet实现的功能,但是,在JSP中编写静态HTML更加方便,不必 再用 println语句来输出每一行HTML代码。,2. JSP的执行过程,一个JSP程序的执行经历了初始化、服务和退出3个步骤,即依次调用了3 个方法:jspInit()和_jspService()以及jspDestroy(),其中,例子中的 JSP代码都是被嵌入_jspService()这个方法中去的。JSP的执行过程如图 所示。,3. JSP的两种访问模型,JSP有两种不同的访问数据库机制,也就是所谓的模型一(Model 1)和模型二(Model 2),这两种模型的主要区别在于大量的客户请 求在什么地方处理,因此,这两种模型实质上是为开发人员提供了 两种页面程序开发的模式。,(1) 模型一,JSP负责处理浏览器端发送来的客户请求并负责向用户返回结果,其中包 含的业务逻辑通过调用Java Bean来实现,而Java Bean负责与企业数据库 的交互。其结构如图所示。,(2) 模型二,模型二是一种遵循MVC(Model-View-Controller,模型-视图-控制者)模型的先进思想。 模型二如图所示。,13.3.2 JSP与ASP,这两种技术的对比,13.3.3 JSP与Servlet的比较,Servlet向页面输出只能使用out.println()方法,而不能像在JSP中那 样,把原封不动的HTML标记引入程序中。 例如前面HelloWorld的例子,输出同样的结果,如果使用JSP,则只需要下 面代码就可以了: Hello World! Hello World!); % ,13.3.4 JSP运行环境的配置,常见的支持J2EE的部分Web服务器见表13.2 其中,“独立”表示该软件可以独立作为Web服务器,而“插件”表示该软件可以作为其他Web服务器,13.4 JSP基本语法,JSP程序通常由以下3部分组成: 静态的HTML或XML JSP标记 符合Java语法的程序段,13.4.1 变量声明与表达式,1. 变量声明 JSP变量声明的语法格式如下: 例如: ,解释:,凡是程序中要使用的变量和函数都必须事先声明,否则编译会出错,而且建议在声明变量时对其进行初始化,否则,该变量的值为一个随机数。 声明必须以分号结尾。 在中可以一次性声明多个变量,之间用分号分隔。 声明的内容只在一个页面内有效。 也可以在这个地方做一个完整的类声明。 例如: ,2. 表达式,JSP表达式的语法格式如下: 例如: ,表达式通常用于计算并输出变量值,在页面设计中,经常会把它嵌入在HTML中,来显示与用户相关的个性化信息,例如: 欢迎页面 您好: 假设当前用户名为Tierney,则能够看到如图所示的结果,13.4.2 程序段,程序段是真正书写JSP脚本的部分,是我们编写JSP的主体,主要是通过一对tag包围起来的部分。,1. 程序段语法结构,JSP程序段的语法结构如下: 例如: 解释: 程序段中只能包含符合Java语法的代码,不允许出现HTML标记、JSP标记、JSP指令等元素。 程序段中也可以对变量进行声明,就像在编写普通的Java程序一样,但最好对变量进行初始化,否则,有些服务器可能会出错。,2. 注释,JSP注释的语法结构如下: 例如: 解释: 注释的部分在系统进行编译时将被忽略。 在浏览器端查看源文件时,看不到用JSP注释标记注释掉的语句,而使用HTML注释标记()注释掉的,还能在客户端的源文件中看到。 程序段中的注释与Java语法相同。 在代码中适当增加注释是提高程序可读性的好习惯。,13.4.3 基本指令,JSP指令是一些发送给JSP引擎的消息,它们并不直接产生出可见的输出内容,而是告诉JSP引擎如何处理下面的JSP页。 JSP指令的语法格式如下: ,1. Page指令,page指令的语法结构如下: 解释: page指令用于给JSP文件中的全局属性赋值,它的赋值动作能够作用于整个页面,可以写在文件的任何位置,不过建议读者最好写在最前面。,属性:,import = “package.class”或 import =“package.class1,.,package.classN” 用于引入程序中需要使用的Java程序包,多个包之间用逗号。 例如: contenType=“MIME-Type” 或contentType=“MIME-Type;charset=Character-Set” 用于指定输出的MIME类型,默认为“text/html”,默认字符集为ISO-8859-1。 例如: 。,isThreadSafe=“true | false” 如果值为“true”(默认)表示进行普通的Servlet处理,多个请求将被一个Servlet实例并行处理。值为“false”时表示Servlet以单线程模式(SingleThreadModel)工作,一个Servlet同时只能为一个请求服务,多个并行的请求可能会分配给不同的Servlet来处理。 session=“true | false” 如果值为“true”(默认)表示session是可用的,值为“false”时表示session不可用。这时如果试图使用与session相关的元素,会出现错误。关于session的使用,我们在后面作详细介绍。 buffer=“sizekb | none” 该属性的作用是为JspWriter,即out对象的输出确定缓冲大小。默认由服务器而定,一般是8KB。 autoflush=“true | false” 如果值为true(默认),表示当缓冲满时将自动清空;值为false时,表示当缓冲满时递出一个异常(exception),这个选项很少使用。当buffer=“none”时,此属性的值不能为false。,extends=“package.class” 该属性指出将要生成的Servlet使用哪个超类。使用该属性应当十分小心,因为服务器可能已经在用自定义的超类。 info = “message” 定义当前JSP文件的一些相关信息,如作者、功能描述等,可以通过调用getServletInfo()方法得到它的值。 errorPage = “URL” 指定一个JSP页面来处理任何当前页面并未处理的意外错误。 isErrorPage =“true | false” 该属性指示当前页面是否可以作为另一JSP页面的错误处理页面。默认值为false。 language=“java” 声明脚本使用的语言,不过,目前惟一的合法选项就是“java”。,2. include指令,include指令用于在JSP文件转换成Servlet时引入一个静态文件,这个文件可以是JSP和HTML以及文本文件等。 Include指令的语法格式如下: ,解释:relativeURL指欲引入文件的相对路径。 例如,许多网站的每个页面都有一个同样的导航条,这样的话,同一份HTML代码就可能重复出现在整个网站的每个页面上。为了避免重复,可以单独编写一个页面来描述这个导航条,然后利用include指令,把这个文件包含在每个主页面里。这样的文件即清晰又方便维护。例如: JSP语法 ,13.4.4 将JSP与HTML结合起来,将JSP的Java风格代码嵌入HTML是非常简单的,基本上也没有什么规则可言。 两者在编写页面时可以随意互相嵌入,但过于频繁的转换可能会影响页面的响应速度。,例13.2 JSP与HTML互相嵌入,其功能是在屏幕上显示“hello”。 程序代码 其运行结果如图所示,例13.3 用JSP独立实现输出功能,程序代码 此程序的运行结果如图所示,13.4.5 本节综合实例,例13.4 基本语法部分综合实例 这个程序的功能是在屏幕上请用户输入姓名,然后向用户问好。 程序代码 这个程序分成了两个.jsp页面,程序的主要部分放在greeting.jsp中,其中的内容包括显示图片、显示用户名输入框以及提交按钮,程序另外还提供了一个response.jsp,作用是将返回给用户的问候显示出来,主程序通过include指令将这段.jsp页面包含进来。,该程序的运行结果如图所示 在输入框中输入你的名字,按Submit按钮,得到如图所示的结果,其中的“Hello,Tierney!”就是由response.jsp显示出来的,13.5 JSP标准动作,JSP动作是利用XML语法格式的标记来控制Servlet引擎的行为。利用JSP动作可以动态地插入文件、重用Java Beans组件、把用户重定向到另外的页面和为Java插件生成HTML代码。,13.5.1 jsp:include动作,include动作的目的是把其他文件的正文插入到这个程序中来 。 include动作的语法 include动作的语法格式如下: flush= true / 或者 flush= true / + ,例13.5 include动作,下面的JSP页面把四则新闻摘要插入一个“Whats New ?”页面。改变新闻摘要时只需改变这4个文件,而主JSP页面却可以不进行修改。 程序代码,2. include动作的属性,include动作的属性如下: page=relativeURL| 被包含文件的相对路径或者用一个表达式的值来代替表示这个相对路径。 flush=“true” 通常情况下,此属性值必须为true。 / 子句能够为引入的文件传递参数。,13.5.2 使用Java Bean,jsp:useBean动作 jsp:useBean动作的语法格式如下: type= package. class /| other elements ,解释: 该动作用来装载一个将在JSP页面中使用的Java Bean。这个功能非常有用,因为它使得我们可以发挥Java组件重用的优势。其含义是创建一个package.class的实例,然后把它绑定到变量id上,并使用scope定义Bean的作用范围。 属性: id=“beanInstanceName” 用来绑定Bean实例的变量。 class|type=“package.class” 表明该Bean是对哪个类的实例化。 scope= “page |request| session| application” 表示该Bean的有效范围。,2. jsp:setProperty动作,jsp:setProperty动作的语法格式如下: / 解释: 这个动作的含义就是使用Bean中相应的set()方法设置一个或多个属性的值,值的来源是通过value属性明确给出,或者利用Request对象中相应的参数。,属性:,name=“beanInstanceName” 这个属性是必须的,用来表明对哪个Bean实例执行下面的动作,这个值和jsp:useBean中定义的id必须对应起来,包括大小写都必须一致,否则会导致错误。 property=“*”或者“propertyName” 这个属性是必须的,它表示要设置哪个属性。如果property的值是“*”,表示所有名字和Bean属性名字匹配的请求中的参数都将被传递给相应的属性set()方法。 value=“string | ” 这个属性是可选的,它用来指定Bean属性的值。字符串数据会在目标类中通过标准的valueOf()方法自动转换成数字、boolean,Boolean,byte,Byte,char和Character。 param=“parameterName” 这个属性是可选的,它指定用哪个请求参数作为Bean属性的值。如果当前请求没有参数,则什么事情也不做,系统不会把null传递给Bean属性的set()方法。,3. jsp:getProperty动作,jsp:getProperty动作的语法格式如下: 解释: 这个动作提取指定Bean属性的值,转换成字符串,然后输出。,属性:,name=“beanInstanceName” 这个属性是必须的,用来表明对哪个Bean实例执行下面的动作,这个值和jsp:useBean中定义的id必须对应起来,包括大小写都必须一致,否则会导致错误。 property=“propertyName” 这个属性是必须的,它表示要获取哪个属性的值。,4. 实例,例13.6 使用Java Bean 下面是一个很简单的例子,它的功能是装载一个Bean,然后设置/读取它的message属性。 程序代码 其运行结果如图所示,例13.7 利用请求变量为Bean设置属性,程序代码 其运行结果如图所示 在文本框中输入“Hello guys”,按Submit按钮, 便得到如图所示的结果,13.5.3 jsp:forward动作,jsp:forword动作的语法格式如下: /| / 解释: 该动作把请求转到另外的页面,jsp: forward以下的代码将不能被执行。,属性:,page=“relativeURL | ” 该属性包含的是一个相对URL,其值即可以直接给出,也可以在请求的时候动态计算。 param 向动态文件发送一个或多个参数,如果使用了这个属性,前面page属性定向的必须是能够处理这些参数的动态文件。,例13.8 页面跳转,在这个例子中,有两个.jsp页面程序,第一个页面的任务就是跳转到第二个页面。 myForward/login.jsp第一个页面的源代码如下: 程序代码 MyForward/userData.jsp第二个页面的源代码如下: 程序代码 这个例子的运行结果如图所示,实际应用中,前面的页面总需要做一些处理,为后面的页面服务,下面我们就看看从第一个页面向第二个页面如何发送参数。,程序代码 大家注意看,在login.jsp中,在向userData.jsp跳转时,发送了这样一个参数,其参数名是name,值是Tierney。 下面看userData.jsp是如何拿到这个参数的。 程序代码 在这个.jsp页面程序中,程序通 过request.getParameter就可以 得到前面页面发送过来的参数 值。其运行结果如图所示,13.5.4 jsp:plugin动作,jsp:plugin动作的语法格式如下: / + text message for user 解释: jsp:plugin动作用来根据浏览器的类型,插入通过Java插件运行Java Applet所必须的object或embed元素。,属性:,type = “bean | applet” 插件将执行的对象的类型,用户必须在Bean或applet中指定一个,因为,这个属性没有默认值。 class=“classFileName” 插件将执行的Java类文件的名称,在名称中必须包含扩展名。且此文件必须在用“codebase”属性指明的目录下。 codebase=“classFileDirectoryName” 包含插件将运行的Java类的目录或指向这个目录的路径,默认为此JSP文件的 路径。 name=“instanceName” Bean或 applet的实例的名称,使得被同一个JSP文件调用的Bean或 applet之间的通信成为可能。 archive = “URLToArchive,” 以逗号分隔的路径名列表,是那些用以codebase指定的目录下的类装载器预装载的存档文件所在的路径名。,例13.9 在页面中嵌入applet,程序代码 运行结果,13.6 JSP的内置对象,所谓内置对象,是JSP引擎提供的一些不需要事先声明和实例化就可以使用的一些对象。它通常是由Web容器创建的,其中包含了许多与特定用户请求、页面或者应用程序相关的信息。,13.6.1 对象的可见范围,Page 所谓page,就是指在本页内可见,要利用本页可见,就要使用pageContext对象。例如,我们来看这样两段程序,在第一个.jsp程序中,在pageContext中存储两个参数,并在本页内打印,然后跳转到另外一个页面中,再打印这两个参数。,例13.10 page的可见范围,程序代码 这段代码在pageContext中设置了name和password两个变量,然后在这页打印出如图所示的结果 在这个页面中,两个参数的值都能取到,然后,单击next page按钮,跳转到下一页,再打印这两个参数,结果如图所示,2. request,request范围是指在一个.jsp页面的请求到另外一个.jsp页面请求时有效,然后就失效了,也就是说在有请求关系的页面之间有效。例如,我们来看两段程序,在第一个程序中,我们为request设置两个变量,然后,到第一页请求的第二个页面中看结果。,例13.11 request的可见范围,程序代码 这段代码给两个request参数赋值,然后跳转到第二页。 程序代码 在第二页中,直接打印两个参数的值,其执行结果如图所示。,3. session与application,session的可见范围在于一个用户从登录到退出之间全部可见,包括正常退出或者由于其他原因,如超时等非正常结束用户与服务器之间的会话。 application是所有可见范围中范围最大的,其范围是整个应用程序,即从为某个应用而服务的服务器启动直到它关闭为止。,13.6.2 与输入输出有关的内置对象,与输入输出有关的内置对象主要有3个,即request和response以及out,前一个用于存储与上下文相关的属性-值对,而后两个用于从服务器向客户端输出信息。,1. request对象,request是javax.servlet.HttpServletRequest的子类,它包含了在客户端与服务器之间传送的数据,即所有客户端对服务器的请求信息,如请求的来源、头信息(header)和cookies以及一些与请求有关的参数值等。,HttpServletRequest定义了访问如下信息的方法:,参数 主要是那些用于在客户端与Servlet之间传送信息的数据。 对象属性 主要用于在Servlet容器与Servlet之间,或者协作的Servlet之间传递信息的数据。 关于客户端与Servlet之间通讯协议的信息。 本地信息,要访问客户端请求数据,可以使用getParameter()方法,它能够返回一个命名参数的值,如果参数是多值的,如一个CheckBox,就需要使用getParameterValues()方法来获取它的值,它会返回这个命名参数值组成的数组。这两个方法的语法分别为:,public java.lang.String getParameter(java.lang.Stringname) public java.lang.String getParameterValues(java.lang.Stringname) 其中,它们的调用参数都是要获取其值的参数的名字,第一个方法的返回值是这个参数值的字符串型返回值;而第二个方法返回的是这个多值参数所有值组成的字符串型数组。,我们来看一段程序,截取自一个书店的例子。,catalog.jsp的部分源代码如下: 在程序中使用了request.getParameter(Add)来获取request中的一个变量add的值,这个值是顾客加入购物车的书的编号,然后利用这个编号将书真正加入购物车。其中,request变量add的值是在它的上一个页面bookdetails.jsp中传过来的。 bookdetails.jsp的部分源代码如下: /catalog?Add=Add To Your Shopping Cart ,利用request获取整个输入流,然后自己在对整个流进行分析,得到自己想要的值。,具体方法是,如果要读取字符数据,使用getReader()方法,它将返回一个BufferredReader类型的变量,如果要读取二进制数据,使用getInputStream()方法,它将返回一个ServletInputStream类型的结果。,request主要处理的是基于HTTP协议的请求,在JSP环境下,一个HTTP请求也可以说是一个HTTP请求URL 其格式通常为 http:/host:portrequest path?query string 其中,request path一般由3部分组成: context path:是Servlet应用程序的根所处的上下文环境,通常由一连串的“/” 组成。 servlet path:激活这个请求的组件别名,其路径通常由“/”开始。 path info:是请求路径中出了上述两部分之外的路径描述。,例如:假设context path为/catalog,那么各组成部分的取值分别见表,query string通常由参数及其取值这样的对子组成,生成query string的方法有两个,一是由Servlet生成Web页面时生成。 如一个HTML页面在生成的时候,含有这样一个链接:Add To Cart,那么程序就可以利用上面讲到的getParameter()方法将参数add的值取到。 另外,query string还可以在表单中使用隐藏域添加到URL后面,待表单以get()方法提交时,就被传送到下一页去了。,另外,request中还有一些非常有用的方法,请参见下表,2. response对象,response是与request相对的一个对象,其作用在于向客户端做出响应。所有的response对象都实现了ServletResponse接口,这个接口定义了一些方法,允许做以下的事情: 获取从服务器向客户端发送的输出流。 指示由response返回信息的类型,例如text/html。 指明是否对输出流做缓冲,默认情况下,所有输出流会马上被发送到客户端。 设置一些本地信息。,例如,在书店的例子中,bookDetailsServlet.java中使用了下述代码获取一本书的详细信息:,程序代码 程序中使用缓冲区的目的是,如果在应答信息组成过程中发生了错误,那么由于已经输出的信息还在缓冲区里面,就不会被客户看到,这时候只要将错误信息覆盖到缓冲区就可以了。否则用户可能会看到一部分正常的返回信息,后面紧跟着错误信息。,3. out对象,javax.servlet.jsp.JspWriter类对象,用于在服务器与客户端之间传递信息的输出流。,13.6.3 session对象,所谓(Session)会话就是指从用户登录系统到其主动退出或者因为超时而被系统结束其访问之间的全过程。 1. session的应用背景 Servlet提供了一种与众不同的HttpSession API方案。HttpSession API是一个基于cookie或者URL改写机制的高级会话状态跟踪接口 。,2. session的使用,主要的操作包括:查看和当前请求关联的会话对象,必要的时候创建新的会话对象,查看与某个会话相关的信息,在会话对象中保存信息,以及会话完成或中止时释放会话对象。 (1)获取当前请求的会话对象 获取当前请求的会话对象可以通过调用HttpServletRequest的getSession()方法实现。 具体语法如下: HttpSession session = request.getSession(true);,(2)获取和设置session变量,获取某个session变量的值可以使用getAttribute()方法 ,它返回的是一个object对象。 setAttribute()方法可以设置session变量,这个方法需要两个参数,即变量的名称name和变量的值value,它们分别是String和Object类型。,(3)获取与session自身相关的信息,getID 返回会话的惟一标识。 isNew 如果客户(浏览器)还没有绑定到会话则返回true,通常意味着该会话刚刚创建,而不是引用自客户端的请求。对于原来已存在的会话,返回值为false。 getCreationTime 该方法返回建立会话的以毫秒计的时间,从1970.01.01(GMT)算起。 getLastAccessedTime 该方法返回客户最后一次发送请求的以毫秒计的时间,从1970.01.01(GMT)算起。 getMaxInactiveInterval 返回以秒计的最大时间间隔,如果客户请求之间的间隔不超过该值,Servlet引擎将保持会话有效。负数表示会话永远不会超时。,3. 会话的生命周期,session是有一定的生命周期的,一个session可以用isNew()方法来判断它是否为一个新的session。 session在一段时间内没有发生任何动作,就会自动失效。 session的失效时间是可以通过程序设置的。,4. 实例,例13.12 显示会话信息 下面这个例子生成一个Web页面,在该页面中显示有关当前会话的信息。 程序代码 在程序中,我们判断了该session是否为新的会话,然后,获取了它的ID、创建时间和上次访问时间。其执行结果如图所示。,例13.13 设置与获取信息,这是一个在两个页面之间利用session变量传递信息的例子 程序代码 在Login.jsp中,我们利用session.setAttribute给变量username赋值为Tierney,在这个页面中,单击login按钮,就会到下一页。 程序代码 在这一页中,我们取出username的值并显示在页面上。这两页的执行结果如图所示。,例13.14 综合实例购物车,在购物车程序中有两个文件,一是提供商品列表的静态页面Carts.html,另外一个是提供购物车处理的动态页面shoppingCart.jsp。 Carts.html的源代码 shoppingCart.jsp的源代码 其执行结果如图所示,13.6.4 与上下文有关的内置对象,所谓上下文,我们可以理解成为一定范围内程序执行的环境。 1. application application实现了javax.servlet.ServletContext接口,它的主要功能在于获得或者修改Servlet的一些设置信息,包括: 初始化参数 与Web环境相关的资源 参数-值对 记录日志,例13.15 利用application对象限制用户访问,在这个例子中,我们利用application变量来限制访问网站的用户IP地址。 我们有一个文件List.props,用来存储允许访问的IP地址如下: IP-Acess1 = 10.1.1.1 IP-Acess2 = 10.1.1.2,然后,利用两个.jsp程序来进行限制。第一个程序setProperty.jsp,设置允许访问的列表,第二个程序,从列表中读取允许访问的IP地址,然后判断用户是否可以进入。,setProperty.jsp的源代码 GetProperty.jsp的源代码 在这段程序中,我们先获取允许的IP地址,如果和本机的IP不匹配,就输出错误信息,否则跳转到nextPage.jsp页。 由于我们使用的是localhost,其IP为127.0.0.1,所以必然不匹配,因此得到如图所示的结果。,2. pageContext,pageContext是javax.servlet.jsp.PageContext类变量,它是 一个抽象类,主要用来维护JSP页面的上下文。利用pageContext, 可以方便地访问一个JSP页面中所有的命名变量,同时,它还提供 了访问页面属性的方法。,它的主要功能如下:,提供了单一API用于管理各类有一定可见范围的对象。 提供了一些方便的访问公共对象的方法。 提供了获取JspWriter的机制。 提供了管理session使用方法的机制。 提供了将页面指令属性开放给脚本环境的机制。 提供了将当前请求传递给应用程序内其他组件的方法。 提供了错误处理机制。,它还提供了一系列方便地访问内置对象的方法,如,getOut(),getException(),getPage(),getRequest(),getResponse(),getSession(),getServletConfig()和getServletContext()。,13.6.5 用于错误处理的内置对象,用于错误处理的内置对象值有一个exception,在程序发生错误的 时候,可以利用这个对象获取一些错误信息。不过在使用它之前, 必须在page指令中做如下声明: 否则,可能产生编译错误。,13.6.6 与Servlet有关的内置对象,与Servlet有关的内置对象有以下两个: page 表示Servlet本身,即当JSP页面被编译之后的Servlet,实际上它很少被使用,它在某种程度上有点像this变量,我们可以用它的getServletInfo()方法来获取一些与Servlet有关的信息。 config 其中存放着一些Servlet初始的数据结构,config对象和page对象一样,都很少被使用,它提供了getInitParameterNames()和getInitParameter()两个方法来获取Servlet的初始参数,另外,还可以使用getServletName()方法来获取JSP页面被编译后的Servlet的名字。,13.7 练 习 题,1. 选择题 (1)网络应用的3层结构指哪些层? A.Web层 B.用户层 C.业务层 D.数据层,(2)哪些不是J2EE结构中的层次? A.Web层 B.EIS层(Enterprise Information System企业信息系统层) C.网络层 D.会话层,2. 编程题,(1)在自己的机器上安装并启动Tomcat服务器,试运行例子中的JSP程序,检验是否安装正确。 (2)将我们给出的用JSP编写的HelloWorld程序编辑成HelloWorld.jsp文件,放到http:/localhost:8080/examples/jsp/程序目录/下面,在浏览器上执行,观察其执行 结果。,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!