版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第九章:JSP数据显示教学目标理解JSP的概念和作用掌握JSP常用指令、内置对象和脚本程序的用法掌握EL表达式的写法掌握JSTL标签的用法12EL表达式56AgendaJSP概述JSP指令JSTL标签JSP脚本内置对象34JSP脚本程序1JSP概述引例JSP(JavaServerPages)是一种动态网页技术,该技术为创建显示动态生成内容的Web页面提供了一种简捷而快速的方法。虽然返回到每个用户的浏览器中的注册信息都是不同的,但是其实这些HTML页面都是由服务器执行同一个JSP产生的结果。JSP概述JSP是JavaServerPages的简称,在形式上表现为一个.jsp文件。它是在传统HTML网页中插入Java程序段和JSP标签形成的动态网页技术。在MVC架构中,JSP是直接面向用户的组件。它以可视化的方式,展示了系统的业务流程和数据,是用户通过系统完成业务功能的重要组件。JSP的数据显示在MVC架构中,JSP的数据显示与Servlet有直接关系,也分为三种方式:(1)直接输出内容:直接在JSP的页面中通过标签或者脚本程序输出内容。(2)请求转发:将数据封装在请求中再转发至其他程序中。前述章节因还未涉及JSP,所以是转发至其他Servlet中。常规做法是将请求转发至JSP,这种方式的好处是转发过来的数据不会驻留在内存中。(3)重定向:一般是将数据存储在session中,然后页面地址跳转至JSP中。在JSP中再获取session变量来显示数据。由于session本身有一定的驻留时间,所以这种方式显示的数据,会在内存中驻留一定时间。久而久之,就会占据大量的内存,导致内存溢出。因此,该方式一般用于登录场合,只有用户登录的信息才有长时间存在于内存中的必要。重定向还可在URL中以键值对的方式携带数据,然后在JSP或者Servlet中获取并显示。这种方式也不占用内存资源,但仅用于少量数据,且不涉及隐私的场合。2JSP指令JSP指令JSP指令主要用来提供整个JSP网页相关的信息,并且用来设定JSP页面的相关属性,共分为编译指令和动作指令两大类编译指令一般用于设置JSP的程序属性,它不直接生成输出,而是用于实现JSP页面的特定设置,一共有page指令、include指令和taglib指令。JSP指令的一般语法形式为:<%@指令名属性="值"%>编译指令:page指令page指令定义JSP文件中的全局属性。它的作用范围是整个JSP页面。page指令具有以下常用属性:(1)language:该属性用于指定当前JSP页面将使用的语言。例如:<%@pagelanguage="java"%>
(2)import:该属性用于指定当前页面需要导入的包或类,与Java程序中的import语句类似。如果需要导入多个包或类,则用逗号隔开。例如:<%@pageimport="java.util.*,java.sql.*"%>编译指令:page指令(3)contentType:该属性用于指定向客户端输出内容的类型。例如:<%@pagecontentType="text/html;charset=gb2312"%>(4)errorPage:该属性用于指定一个JSP作为专门的错误处理页来处理当前页面所有抛出的未被处理的意外错误。例如:
<%@pageerrorPage="errorPage.jsp"%>(5)isErrorPage:该属性用于指定当前页面是否可以处理来自其它页面的错误,缺省为“false”。例如:<%@pageisErrorPage="true"%>编译指令:include指令include指令也称为包含指令,其实现的是将一段HTML或者JSP代码直接嵌入至当前JSP页面中。假设需要嵌套的页面为a.jsp,被嵌套页面是b.jsp,将b.jsp嵌入a.jsp代码如下。<%@includefile=”b.jsp”%>编译指令:taglib指令taglib指令也称为标签指令,主要用于引入自定义标签库,以便在JSP页面中使用自定义标签来实现特定的功能或逻辑。标签指令语法如下。<%@tagliburi="taglib-uri"prefix="taglib-prefix"%>uri属性指定了自定义标签库的唯一标识符(URI),通常是一个URL,用于指向标签库描述TLD文件的位置。而prefix属性则指定了在JSP页面中引用自定义标签时使用的前缀。假设项目中有一个名为xtags的自定义标签库,其TLD文件位于/WEB-INF/tags/xtags.tld,那么其引用代码如下。<%@tagliburi="/WEB-INF/tags/xtags.tld"prefix="x"%>在该页面中引入xtags.tld之后,在所需位置通过如下代码来调用定义好的标签,代码如下。<x:helloWeb/>其中x即引入标签时的前缀,helloWeb则是xtags.tld中定义的某个具体类的引用名称。编译指令:taglib指令xtags.tld是一个xml文件,而<x:helloWeb>标签在其中的定义可如下所示。从该代码可知,helloWeb对应的程序为tagslib.HelloTag,因此HelloTag的内容就决定了<x:helloWeb/>的输出内容。编译指令:taglib指令HelloTag是一个Java类,其定义如下该自定义标签方法非常简单,实现的是根据参数输出值。根据该定义,之前的<x:helloWeb/>不会在JSP中显示任何内容,因为它没有指定message参数。要使其有内容输出,则需要做如下修改。<x:helloWebmessage=”helloJavaWeb”/>在使用该标签的地方,就会输出”helloJavaWeb”的文本。动作指令动作指令是用于执行特定操作或调用Java组件的指令。与编译指令不同,动作指令以“<jsp:”开头,由JSP引擎来执行特定的功能。动作指令一共有7种,分别为forward、param、include、plugin、useBean、setProperty和getProperty,其中param不是独立的指令,需要配合其他指令一起使用。常用动作指令forward指令:forward指令用于将页面响应转发至其他页面,目标页面既可以是静态的HTML页面,也可以是JSP或Servlet等动态程序。示例:<jsp:forward
page="target.jsp"/>
include指令:include指令用于将其他页面包含至当前页面中,其功能与编译指令中的include指令相同,只是写法上有所区别。示例:<jsp:includepage=”a.jsp"/>常用动作指令useBean指令:userBean指令用于创建一个Java类的实例示例:<jsp:useBeanid="news"class="bean.tnews"scope="page"/>useBean创建的实例对应的类,必须是项目中存在的。此处的id即该类的实例名,在此定义后使用setProperty和getProperty指令时,通过指定id类来决定调用哪个类的实例。class即类所在的位置,scope则是指有效范围,page是指当前页面有效,request则是请求转发时有效,session则用户会话期间有效,application则是整个项目运行期间都有效。setProperty指令:setProperty指令是针对指定JavaBean设置其属性值示例:<jsp:setPropertyname="news"property="newstitle"value="测试标题"/>其中name属性,对应于useBean指令中的id属性,紧接着上例getProperty指令:getProperty指令是获取指定JavaBean某一个属性值示例:<jsp:getPropertyname=“news”property=“newstitle”/>该指令属性规则和Property相同3JSP内置对象JSP脚本程序JSP内置对象是JSP提供的具有特定功能的对象。它们可在页面中直接使用,无需声明。事实上,由于JSP就是经过封装的Servlet,因此这些对象就是Servlet中部分对象的封装。JSP内置对象一共有request、response、out、page、session、application、exception、pageContext和config。其中page、exception和config不常用,因此不作过多介绍。常用内置对象的作用如图所示。4JSP脚本程序JSP脚本程序JSP脚本程序,即JSP页面中的Java代码,通常包含在一对“<%……..%>”中间,以实现一些业务功能。之所以称之为脚本,是因为它表面上具有和脚本语言类似的特点。因为这些代码是镶嵌在HTML代码中,从表面上看伴随HTML代码一起执行。事实上,JSP也需要经过编译才能运行,并不是纯粹的脚本语言,只是感觉上像而已。JSP脚本程序,共分为声明、表达式和代码脚本三种。声明脚本声明脚本,顾名思义,是用于定义JSP页面中的Java属性、方法和内部类等程序的。它以“<%!”开头,以“%>”结尾。这段声明脚本,声明了一个变量w和一个方法。需要说明的是,在声明脚本中,只可以声明定义变量和脚本,并不能直接使用它们。如果在hello方法的下方,去尝试调用该方法,则会报错。可见,声明脚本只能用声明,并不能执行业务功能。表达式脚本表达式脚本,即一个Java等式,其作用等同于在页面中直接输出内容,它是以“<%=”开头,以“%>”结尾。接上例,要输出w变量的值和调用hello方法,并该输出其结果,则在声明下方,输入如下代码。代码脚本代码脚本,即普通的Java语句,它以“<%”开头,以“<%>”结尾。代码脚本是用于实现业务逻辑的主要代码。在代码脚本中不能定义变量和方法,但是可以利用在声明脚本中定义的变量和方法,同时还可以和HTML代码嵌套使用。代码脚本是实现业务数据显示的主要手段。代码脚本从这两个例子可知,代码脚本写法较为灵活,结合HTML就可以控制页面元素的显示,及相关内容的生成。这也是JSP能够成为视图层实现组件的重要原因。在上述循环中,如果通过request内置对象,能够从Servlet获取到一个信息集合,再对该信息集合进行循环遍历,将集合中的每一条信息均写入一行中,以此就可以实现业务数据的展示。需说明的是,上述代码中request.getAttribute("nlist");是获取从请求转发过来的变量。之所以能这么做,必须有一个Servlet通过request.setAttribute方法,设置了nlist这个变量,然后再转发至这个页面。否则,该页面会因为newslist变量为空而抛出异常。
通常这一工作是在servlet中完成,再通过请求转发至当前页面。5EL表达式EL表达式概述EL是ExpressionLanguage的缩写,是JSP2.0中新增的一种表达式语言。它提供了更为简洁、方便的形式来访问变量和参数,以使得JSP页面更加简洁,使开发者的逻辑更加清晰。EL表达式的运行结果即输出表达式计算结果的内容,可认为是对原先表达式脚本的简化。EL表达式的语法非常简单,即${EL表达式}EL表达式以“${”开头,以“}”结尾,中间则是特殊的表达式。它通过内置对象,以及运算符来完成变量的计算,并将结果直接输出在JSP页面中。EL运算符EL表达式定义了许多运算符,其中基本运算符有算术运算符、比较运算符和逻辑运算符、.运算符、[]运算符和条件运算符。(1)基本运算符算术运算符、比较运算符和逻辑运算符是EL中的基本运算符,其计算逻辑和常规的基本运算符类似。(2).(点)运算符.(点)运算符一般用于访问JavaBean的属性或者方法,其语法规则:${变量名.属性名/方法名}其中变量名是必须已经存在于当前页面中的,否则会编译错误。之前示例已经使用了useBean指令生成了tnewsJavaBean的实例,并对其newstitle设置了属性值,且使用了getProperty指令输出其属性值。如果用EL的点运算符来实现属性输出,代码要简洁地多,代码如下。(3)[]运算符[]运算符用于访问数组或者列表等复合类型数据的元素,其语法规则也较为简单:${复合类型变量[索引号]}该代码在页面中显示“10”。需注意的是,在脚本中定义的nums是不能被EL直接访问的。EL只能访问指定生存范围的变量。所以本例又定义好的num存入了页面上下文环境中,否则不会有任何结果。(4)条件运算符条件运算符是双分支if语句的简写,其语法和Java的条件运算符完全一致,语法规则为${条件表达式?表达式1:表达式2}即条件表达式为true,则输出表达式1的值,否则输出表达式2的值。以判断成绩为例,代码如下。EL内置对象EL内置对象与JSP内置对象类似,均可以无需定义,就可以实现特定功能。
从这些定义可知,EL内置对象简化了数据的获取与展示。若获取请求转发过来数据,假设为新闻集合newslist,则代码为:${requestScope.nlist.size()}如果采取代码脚本来写,首先需获取nlist对象,并将其转换为List类型,再通过size方法来获取其条数。但使用EL,其简洁性不言而喻。再结合JSTL标签,降低循环读取的复杂性,又可进一步简化代码。6JSTL标签JSTL概述JSTL是由Apache的Jakarta小组维护的通用标准标签库,它封装了JSP应用的通用核心功能。标签库的原理和作用已经做了详细的讲解,其复杂的过程,初学者可以不需要彻底搞清楚。初学者只需知道,JSTL标签是为了简化JSP开发而设置的。使用JSTL的目的是尽可能地不使用Java代码脚本,使得JSP开发更加规范简洁。JSTL需要下载第三方的jar包来支持。Tomcat9.x是该jar包版本的分水岭,在9.x及之前版本,要使用jstl-1.2.jar。而从Tomcat10开始,则需要使用taglibs-standard-impl-1.2.5.jar,这一点需要注意。否则在运行时,程序会抛出部分类找不到的异常。本课程为Tomcat为9.0.85,因此需要下载jstl-1.2.jar,其下载地址为:/artifact/javax.servlet/jstl/1.2下载完成后,将该jar包拷贝至项目的lib文件夹中,在需要使用标签的JSP页面顶部加入如下代码。
<%@tagliburi="/jsp/jstl/core"prefix="c"%>其中uri即指向定义的核心标签库,其所关联的类均定义在jstl-1.2.jar中,而prefix=“c”,则是该核心库的引用名。加入引用后,在需使用JSTL标签的地方,就可以<c:“功能名”参数=“值”>的方式来调用。JSTL的常用功能JSTL标签库按功能,可分为核心标签、格式化标签、SQL标签、XML标签和JSTL函数。光从这个分类就可以看出,JSTL具有复杂的标签体系,可以视为是一种程序设计语言,其涉及的内容及用法也较多。(1)out标签:out标签用于在JSP页面中,直接输出指定内容。示例1:<c:outvalue=“HelloWorld”/>,在JSP页面中输出HelloWorld。示例2:<c:outvalue=“${requestScope.nlist.size()}”/>,输出请求转发过来的新闻的数量(2)set标签:set标签的作用是将从请求或会话等范围内的值,以变量形式存储在指定的范围中。指定scope:<c:setvar=“newslist”value=“${requestScope.nlist}”scope=“page”/>,将value值设置给变量var,并设置其有效范围。scope范围和EL的相同,page:当前页面有效;request:数据存入请求中,可随请求进行转发;session:存储至会话中;application:存储至应用中,只要应用程序服务器不重启或者不关闭,均有效。设置值后,再使用c:out取值:<c:outvalue="${newslist.size()}"/>JSTL的常用功能set标签的第二种用法将值存入至JavaBean中。<c:setvar="newslist"value="${requestScope.nlist}"scope="page"/><jsp:useBeanid="newsobj"class="bean.tnews"/><c:settarget="${newsobj}"property="newstitle"valu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 买房签了协议书被限购了
- 幼儿膳食营养分析
- 电网 空白三方协议书
- 透析病人的护理常规
- 物业服务创新管理亮点
- 肺部手术术后护理宣教
- 招投标管理办法
- 2026湖北武汉市第三医院眼科招聘备考题库附答案详解(完整版)
- 2026湖南株洲攸县中医院高校毕业生就业见习人员招聘37人备考题库附答案详解(精练)
- 2026中国科学院广州地球化学研究所科研助理招聘2人备考题库(应用矿物学学科组)及参考答案详解(综合题)
- 过程审核表(产品组评分矩阵评审提问表(评分))-2024年百度过
- 土建工程施工质量验收范围划分表
- 工业机器人虚拟仿真与离线编程(ABB)课件全套 巫云 第1-7章 认识、安装工业机器人仿真软件-带数控机床(CNC)的自动化生产线仿真
- 市政设施日常维护与维修服务投标方案(技术方案)
- 厦门事业单位笔试真题及答案2024
- 一年级小学数学下册应用题800道
- (正式版)JBT 11270-2024 立体仓库组合式钢结构货架技术规范
- QCT 291-2023 汽车机械式分动器总成性能要求和台架试验方法 (正式版)
- T-NAHIEM 101-2023 急诊科建设与设备配置标准
- GB/Z 43281-2023即时检验(POCT)设备监督员和操作员指南
- 管壳式换热器的结构设计
评论
0/150
提交评论