




已阅读5页,还剩130页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
王红,第2章JSP基础,2019/4/3,2,主要内容,第2章 JSP基础 2.1 JSP概述 2.2 JSP页面的基本组成 2.3 JSP页面中的注释 2.4 声明 2.5 JAVA代码段 2.6 表达式 2.7 .JSP指令 2.8 JSP动作,2019/4/3,3,2.1 JSP概述,2.1.1 第一个JSP页面 2.1.2 JSP运行原理 2.1.3 JSP与Servlet的关系 2.1.4配置JSP运行环境 2.1.5可以支持JSP运行的其他服务器 2.1.6 JSP页面测试,2019/4/3,4,2.1.1 第一个JSP页面,JSP 是 Sun Microsystems 公司的一种规范. 它将 Java 与 HTML 相结合 显示与处理分离 JSP 可结合其他Java 组件一起使用 JSP 是使用Java 开发基于 Web 的应用程序不可或缺的部分 典型的web应用组成:applet, JSP, Servlet, Javabean, HTML,XML,EJB,容器,2019/4/3,5,JSP概念,JSP的执行,2019/4/3,6,2.1.1 第一个JSP页面,JSP页面可以用任何编辑器编写,只需要确保以.jsp扩展名保存此文档 第一个简单的JSP页面example2_1.jsp,2019/4/3,7,2.1.2 JSP运行原理,JSP页面在运行之前要被解释成Java Servlet ,然后它可以处理HTTP请求并生成响应信息 JSP容器的工作过程如下图所示: 判断与JSP文件对应的类的名字 如果该类不存在或比.jsp文件的老 ,容器就会重新创建一个等价的Servlet类并编译它 如果Servlet类存在只是其实例并末运行,容器就载入该Servlet类并创建一个实例 容器启动一个线程在载入的实例中处理当前Http请求,2019/4/3,8,JSP和Servlet的关系,2019/4/3,9,JSP和Servlet的关系,解析jsp,接受请求,生成jsp的servlet,编译servlet,加载servlet,生成响应,JSP Servlet最新?,JSP Servlet加载?,发送请求,n,n,y,y,2019/4/3,10,JSP执行过程,*.jsp,*.java,*.class,servlet,servlet 分析器,2019/4/3,11,2.1.2 JSP运行原理,JSP页面的运行过程是由JSP容器和Servlet容器实现的 JSP容器是被Servlet容器所运行的 不同销售商都有自己的JSP容器实现,但是它都是由一个Servlet或者一套Servlet来组成的 JSP容器用以替代早期标准中的术语JSP引擎,2019/4/3,12,2.1.2 JSP运行原理,观察一个JSP页面HelloWorld.jsp 观察HelloWorld.jsp 对应的Servlet类HelloWorld_jsp.java 可见,JSP在运行前首先将编译为一个Servlet,这就是理解JSP技术的关键 如下图所示:,2019/4/3,13,JSP和Servlet的关系,转换后的servlet,2019/4/3,14,2.1.2 JSP运行原理,为什么要把JSP转为Servlet再去运行呢? Servlet扩展Web server上呈现是一种强有力的方法 Servlet提供了公认的Java在独立于平台、独立安全性以及强壮性等方面的优点 服务器端为Servlet提供了很多底层支持,如安全性 Servlet在访问数据时更加直接,2019/4/3,15,2.1.3 JSP与Servlet的关系,Servlet就是服务器端小程序 Servlet技术是早期为了Java的服务器端应用而开发的 Servlet显示页面非常笨拙 ,因此在Servlet技术之上开发了JSP JSP和Servlet之间有着内在的血缘关系,注意抓住这种联系 JSP 页面和Servlets 程序是可以相互操作,2019/4/3,16,2.1.3 JSP与Servlet的关系,在HTML页面中内嵌Java代码和Java调用与直接在Servlet程序中编写Java代码相比起来更为方便 比较Servlet代码和JSP代码(example2_2.jsp),它们的运行的结果完全相同的如图2-3所示,2019/4/3,17,2.1.3 JSP与Servlet的关系,并不是说Servlet可以不用了 ,Servlet完成简单的业务逻辑和处理JSP不好处理的后台服务以及其他特殊要求等问题 Servlet作为MVC(Model-View-Control)设计模式中的控制器 常见的情况是将两者结合使用,2019/4/3,18,2.1.4配置JSP运行环境,并不是说Servlet可以不用了 ,Servlet完成简单的业务逻辑和处理JSP不好处理的后台服务以及其他特殊要求等问题 Servlet作为MVC(Model-View-Control)设计模式中的控制器 常见的情况是将两者结合使用,2019/4/3,19,2.1.3 JSP与Servlet的关系,并不是说Servlet可以不用了 ,Servlet完成简单的业务逻辑和处理JSP不好处理的后台服务以及其他特殊要求等问题 Servlet作为MVC(Model-View-Control)设计模式中的控制器 常见的情况是将两者结合使用,2019/4/3,20,2.1.3 JSP与Servlet的关系,并不是说Servlet可以不用了 ,Servlet完成简单的业务逻辑和处理JSP不好处理的后台服务以及其他特殊要求等问题 Servlet作为MVC(Model-View-Control)设计模式中的控制器 常见的情况是将两者结合使用,2019/4/3,21,2.1.4 配置JSP运行环境,Apache的Tomcat是一种免费Web服务器,安装主要步骤如下: (1) 安装JDK。 (2)从SUN公司的网站免费下载jakarta-tomcat.zip (3) 解压此文件 (4)按照提示安装Tomcat (5) 设置环境变量,2019/4/3,22,2.1.4 配置JSP运行环境,(6) 启动Tomcat (7) 通过浏览器中观察主页http:/localhost:8080的主页,运行结果如图2-7所示,表示Tomcat运行正常 。,2019/4/3,23,2.1.4 配置JSP运行环境,(8) 通过点击JSP example并执行所列出的示例之一,确保它正确地提供jsp服务 需要注意的问题: (1)如果Tomcat不能正常启动,检查环境变量的设置 (2)如果Tomcat仍然不能正常启动,检查是否有端口冲突 ,通过 server.xml可以更改Tomcat的端口号。,2019/4/3,24,2.1.5 可以支持JSP运行的其他服务器,JavaServer Web Development Kit (JSWDK) Allaire Jrun New Atlanta的ServletExec Gefion的LiteWebServer (LWS) Sun的Java Web Server WebLogic Server 除了上述WEB服务器外,目前还有很多WEB服务器,如Resin,Jboss等,2019/4/3,25,2.1.6 JSP页面测试,运行一个JSP页面的主要步骤如下: 用一种文本编辑器编辑JSP源文件(example2_3.jsp) 将JSP文件保存到C:Tomcatwebappsroot目录下。 在IE地址栏中键入http:/localhost:8080/example2_3.jsp,对页面进行测试,运行结果如图2-9所示。,2019/4/3,26,2.1.6 JSP页面测试,几点说明: 可以在c:tomcatworklocalhost_下找到example2_3.jsp的字节码文件。 Tomcat服务器有几个默认的WEB服务目录 可以自己新建web目录。新建的web目录可以放在c:tomcatwebapps下面 ,也可以不在 。 若不在,则需要修改server.xml,2019/4/3,27,2.1.7 小结,JSP的优点 “编写一次,随处运行” 高品质工具支持 组件和标记库的重用 动态内容与静态内容的分离 对脚本和动作的支持 多层企业应用程序体系结构的 Web 访问层 表示与实现的分离,2019/4/3,28,2.2 JSP页面的基本组成,一个JSP页面是由传统的HTML页面标记加上JSP标记和嵌入的JAVA代码组成 。具体地说,由以下4种元素组成:HTML标记、JSP标记、JSP脚本和注释 JSP标记包括指令标记和动作标记 指令标记是为JSP引擎而设计的 ,并不直接产生任何可见输出 ,只是告诉引擎如何处理其余JSP页面 动作标记是JSP页面特有的标记,它告诉WEB容器去执行某个“动作” JSP脚本是JSP页面中插入的java代码,它又可以细分为声明、代码段和表达式,2019/4/3,29,2.2 JSP页面的基本组成,声明用于定义特定于JSP页面(Servlet)的变量、方法和类; 代码段是嵌入的JAVA语句 表达式是JAVA脚本中输出语句的简化表示形式 例子example2_4.jsp 说明JSP页面的不同组成成分,运行效果如图2-10所示,2019/4/3,30,JSP标记类型 :指令,JSP指令:用于设置全局值,是向包容器发送的。并且不向客户端产生输出,向操作系统发送配置命令,2019/4/3,31,JSP标记类型:脚本和动作,2019/4/3,32,JSP通用规则,JSP区分大小写 指令和脚本元素所拥有的语法不是基于 XML的,但也可以获得一种可以替代的基于 XML的语法。比如指令:的等价的XML语法为: 在标记中出现的属性值总是用引号括起来的:使用单引号或双引号。如果引号是属性值本身的一部分的话,就可以使用特殊的字符串(就像在HTML中一样)。,2019/4/3,33,JSP通用规则(续),在标记中可以使用字符 (反斜杠)来作为换码字符(例如,要使用 %,就要使用 %字符序列)。 JSP使用的 URL要遵循 servlet的惯例,并且以一个 /开始的 URL叫做上下文相关路径,如果URL不是以/开始的,就被解释为相对于当前的JSP。 在文档体中的文本中的空白符无关紧要。,2019/4/3,34,2.3 JSP页面中的注释,注释是由程序员插入的、用于解释JSP源代码的句子或短语 注释不影响浏览器对页面的显示,但是可以有助于用户理解生成此页面的HTML和JSP源代码 类型: HTML 注释 隐藏注释 脚本注释,2019/4/3,35,2.3 JSP页面中的注释,2.3.1 HTML 注释 类似于在 HTML 中使用的那些注释 可在其中包括动态内容 浏览器察看源文件可看到 由于注释不是简单地被JSP忽略,因此它们可以包含内嵌的动态内容。HTML注释之内的JSP表达式将被计算并插入到发送给浏览器的响应中,2019/4/3,36,2.3 JSP页面中的注释,如example2_6.jsp ,运行结果如图2-12所示。,2019/4/3,37,2.3 JSP页面中的注释,再如: HTML注释 未显示上一行的注释。 ,2019/4/3,38,2.3 JSP页面中的注释,2019/4/3,39,2.3 JSP页面中的注释,再如: 要多加练习 在源文件中包括当前时间。 ,2019/4/3,40,2.3 JSP页面中的注释,2019/4/3,41,IE中的源程序有注释,2019/4/3,42,2.3 JSP页面中的注释,2.3.2 隐藏注释 只能通过查看原始 JSP 文件查看 JSP 容器忽略此注释的主体 在JSP编译成的Servlet中看不到隐藏注释 如example2_7.jsp ,运行结果如图2_13所示。,2019/4/3,43,隐藏注释, A Comment Test A Test of Comments ,2019/4/3,44,隐藏注释,2019/4/3,45,在IE中查看源代码,2019/4/3,46,2.3 JSP页面中的注释,2.3.3 脚本注释 java脚本中的注释 语法形式为: / 单行注释 /* 注释 */ 不仅能在原始JSP文件中看到,而且在翻译成的servlet中可见 ,可参见其对应的Servlet 举例example2_8.jsp,运行结果如图2-14所示,2019/4/3,47,2.3 JSP页面中的注释,2019/4/3,48,JSP脚本元素(scriptlets),使开发者能直接将代码嵌入 JSP 页面 类型: 声明 代码段 表达式,2019/4/3,49,2.4 声明,2.4.1 变量声明 2.4.2 方法声明 2.4.3 声明类,2019/4/3,50,2.4 声明,用于定义特定于 JSP 页面的(servlet)变量和方法 在jsp初始化是完成初始化 等价与静态变量,即一个客户的操作会影响另外客户 不会向流中写任何信息 可被该jsp页面中其他任何部分使用 语法: 声明的类型: 变量声明 方法声明 声明类,2019/4/3,51,声明是JSP中的Java代码块,它用来在所产生的 servlet中定义类范围的变量和方法。产生的servlet实例化时执行代码块。, ,2.4 声明,2019/4/3,52,2.4 声明,2.4.1 变量声明 声明的变量成了 JSP 页面被转换和编译到的 servlet 类的实例变量,各个客户端可共享 语法: 等价的XML语法形式为: jsp:declaration 变量声明/jsp:declaration 如: 声明的变量类型可以是JAVA语言中允许的任何数据类型,2019/4/3,53,2.4 声明,2.4.2 方法声明 定义的方法在整个JSP页面有效 将编译成的 Servlet 类的成员方法 可以由页面上所有脚本元素访问 其语法形式为: 等价的XML语法形式为: jsp:declaration 方法声明 /jsp:declaration 方法声明方式跟Java中方法定义的形式一样,要给出方法返回类型、方法名、方法形参和方法体。 注意:虽然方法是客户共享的,但方法中的变量并不是客户共享的。,2019/4/3,54,2.4 声明,2.4.2 方法声明 如: ,举例: declareation.jsp example2_4.jsp(声明方法) example2_5.jsp(改进,写文件) example2_6.jsp(共同计算pi),2019/4/3,55,2.4 声明,2.4.2 方法声明 举例: example2_9.jsp,运行结果如图2-15所示,2019/4/3,56,2.4 声明,2.4.2 方法声明 举例: example2_10.jsp是对example2_9.jsp的改进 举例: example2_11.jsp实现所有访问该页面的客户共同参与圆周率的计算。由于声明的变量能被客户共享,因此访问该页面的客户越多,的计算就越精确。运行结果如图2-16所示,2019/4/3,57,2.4 声明,2.4.3 声明类 定义的方法将编译成的 Servlet 类的内部类 可以由页面上所有脚本元素创建该类对象 例example2_12.jsp定义一个Square类,当客户访问该页面时,服务器创建该类的对象,只要客户给出方的边长,就可以求出方的周长和面积。运行结果如图2-17所示,2019/4/3,58,2.4声明,2.4.3 声明类,2019/4/3,59,2.5 代码段,包含一个或多个有效而完整的语句 是在请求处理期间要执行的 Java代码块, 可以包含向客户产生输出。 语法: 或 / 这里是 Java 代码 例:,2019/4/3,60,2.5 代码段,Scriptlet test page Hello World. This is a scriptlet test “ + i + “); System.out.println(“This goes to the System.out stream “ + i); % ,2019/4/3,61,2.5 代码段,需要注意: (1)一个JSP页面可以有多个JAVA代码段,这些代码段被JSP引擎按顺序执行 (2)在代码段中也可以声明变量,但这些变量是JSP页面的局部变量 (3)代码段之间可以插入JSP页面的一些其它标记元素 (4)一个用户对JSP页面局部变量的操作不会影响其它客户 (5)代码段中要求是JAVA语句,语句必须以分号结束,2019/4/3,62,2.5 代码段,下面例子example2_13.jsp和例子example2_14.jsp功能基本相同,计算1到10的连续和。其中例子example2_14.jsp中包含多个JAVA代码段,并且中间插入HTML标记。此时要特别注意JAVA代码的完整性。运行结果如图2-18所示,2019/4/3,63,2.5 代码段,再如: test ,2019/4/3,64,2.5 代码段,“); break; case 1: out.println(“You must select condition 1!“+“);,2019/4/3,65,2.5 代码段,break; case 2: out.println(“You must select condition 2!“+“); break; default: out.println(“Your select not in “0,1,2“,select again!“+“); % 转义符: 双引号 “ ,单引号,反斜杠,回车r,换行n,制表符t,退格 b,2019/4/3,66,脚本段执行结果,2019/4/3,67,2.6 表达式,包含任何语言表达式 在请求处理阶段计算值,将结果转成String并输出 不以分号结束 用于输出单个变量或某个计算的结果 语法: 或 如: ,2019/4/3,68,2.6 表达式,注意: (1)“%=”是一个完整的符号,“%”和“=”不能插入空格。 (2)表达式可以包含任何JAVA语言表达式,只要表达式可以求值。 (3) 表达式中不能插入语句,也不能以分号结束 (4)表达式是JAVA代码段的一种简单书写方式,它的功能和代码段等效,如图2-19所示,2019/4/3,69,2.6 表达式,2019/4/3,70,2.6 表达式,例example2_15.jsp求各种表达式的结果。运行结果如图2-20所示,2019/4/3,71,%!、%= 和 %之间的区别,变量声明后面必须带分号 表达式可以包含任何语言表达式,并不以分号结束 代码段中,如果语言要求语句以分号结束,则必须提供分号,2019/4/3,72,2.7 JSP指令,2.7.1 page指令 2.7.2 include指令 2.7.3 taglib指令,2019/4/3,73,2.7 JSP指令,将有关页面的特殊处理信息传送到JSP容 一个指令影响整个JSP文件 。 指令以 终止 。 类型: include 指令 page 指令 taglib 指令,2019/4/3,74,2.7 JSP指令,2.7.1 page 指令 page 指令将页面特定的信息传递给 JSP 引擎 用来定义和操作许多重要的依赖于页面的属性,这些属性影响整个JSP文件(整个编译后的类文件) 在 JSP中的任何地方、以任何顺序,一个页面可以包含任意数量的 page指令。但是任何的属性/值对只能出现一次 。(除import外 ) 如: ,2019/4/3,75,2.7 JSP指令,2.7.1 page 指令 语法: 或 ,2019/4/3,76,2.7 JSP指令,page 属性 info language contentType extends import session buffer autoFlush isThreadSafe errorPage isErrorPage等,2019/4/3,77,2.7 JSP指令,2019/4/3,78,2.7 JSP指令,2019/4/3,79,2.7 JSP指令,session,布尔值,本页是否使用session对象,True,errorPage,本地url,本页面异常时的处理页面,无 ,errorPage=“/result/err.jsp,2019/4/3,80,2.7 JSP指令, ,下面的例子演示了page的language、import、contentType、buffer、autoFlush、isThreadSafe,2019/4/3,81,2.7 JSP指令,例example2_16.jsp表明info属性的使用,可以通过getServletInfo()取到info属性的值,运行结果如图2-21所示,2019/4/3,82,2.7 JSP指令,下例说明errorPage属性和 isErrorPage属性的使用,运行结果如图2-22,2-23,2-24所示,2019/4/3,83,2.7 JSP指令,2.7.2 include 指令 使页面作者能将一个文件的内容包括在另一个文件中 语法: 该指令的作用是在JSP页面中该指令出现的位置静态的插入一个文件。 所谓静态插入,是指当前的JSP页面和被嵌入的文件合并成一个新的JSP页面,然后JSP引擎再将这个新页面转换成Servlet。 include指令能让你将你的页面内容分成几个组成部分分别管理,2019/4/3,84,2.7 JSP指令,2.7.2 include 指令 注意: 出现在一个 JSP 页面中的 include 指令的数量不受限制 静态插入,即内联方式(可看servlet),与include动作的区别 必须为localURL 发生在编译期间,但服务器可自动识别更新 注意合并后的语法,2019/4/3,85,2.7 JSP指令,2019/4/3,86,2.7 JSP指令,2.7.2 include 指令 下面例example2_17.jsp中使用include指令嵌入computer.jsp,运行结果如图2-25所示,2019/4/3,87,2.7 JSP指令,2.7.2 include 指令 例example2_18.jsp中嵌入hello.txt。hello.txt的内容是:欢迎你参加激动人心的JSP之旅。运行结果如图2-26所示,2019/4/3,88,2.7 JSP指令,2.7.3 taglib指令 自定义标记提供了可重用、可维护及可移植的内容生成解决方案 通知 JSP 容器,页面依赖于自定义标记库 标记库是扩展 JSP 的功能的自定义标记的集合 所有jsp自定义标记按组存放在标记库中,使用与标记库相关的前缀区分这些标记,这样可以使用不同标记库中的相同标记。,2019/4/3,89,2.7 JSP指令,2.7.3 taglib指令 编写JSP页面时可以直接使用标记库中的标记,就象使用JSP的标准标记一样 Jsp定制标记遵循xml规范,这意味着可以在xml和html中使用用户自定义标记,2019/4/3,90,2.7 JSP指令,自定义标记的特征: 可以由主体也可以为空 可以以任何深度嵌套在其它自定义标记中 可以处理主体内容,如过滤和编辑 属性的使用 可以在同一页面内与其它标记协同工作 可以访问页面信息,如请求,响应,会话等 可以创建脚本变量,2019/4/3,91,2.7 JSP指令,自定义标记主要优点: 易于安装在多个项目上,提升代码重用性,加快开发速度 自定义标记与jsp规范完全兼容 标记库使web应用易于维护 在JSPT上可找到最好的标记资源。 经过多次使用的代码具有更少的bug,2019/4/3,92,2.7 JSP指令,2.7.3 taglib指令 语法: 其中uri是用户子定义标记库的url地址,prefix是用户子定义标记的前缀,2019/4/3,93,2.7 JSP指令,2.7.3 taglib指令 要使用用户自定义标记库,需要以下几方面的支持 标记处理器 标记库描述文件 web.xml文件中标记库的描述 在jsp页面中使用用户子定义标记 其实,使用标记库的关键不是编码,而是能将上述各部分正确的组织起来。这种层次结构非常重要。也正是如此,标记库才既灵活又便于使用,2019/4/3,94,2.7 JSP指令,web.xml Demo.tld 标记处理程序类 Tagdemo.jsp,2019/4/3,95,标记扩展的工作过程,1. 当在jsp中遇到自定义标记时,要找到标记处理器,首先要实例化标记处理器类,2019/4/3,96,标记扩展的工作过程(续),以后在JSP中遇到标记库中的标记,调用标记处理器的相应方法。,2019/4/3,97,web.xml声明, /hello /WEB-INF/tlds/hello.tld ,2019/4/3,98,标记扩展 的web.xml文件,使用标记来让服务器知道当在要在JSP引入标记时,从哪儿可以找到TLD。 /hello标记对应于hello.jsp中的该行代码: 标记指明标记描述器的位置。,2019/4/3,99,标记库描述文件,TLD必须符合xml规范 /servlet容器对其作dtd验证 1.0 1.1 mytag this is a sample ,2019/4/3,100,标记库描述文件,其中shortname和tlibversion必须 tlibversion:标记库版本号,N.N.N.N形式,不能省略第一个N jspversion:与该标记库兼容的jsp规范版本号。缺省为1.1。 shortname:标记库缺省名空间前缀 uri:标记库可用公共副本来源 标记库的描述信息,2019/4/3,101,标记库描述文件,TLD 中除了包含关于作为整体的库还包含在库中每个标记和属性的信息。,2019/4/3,102,标记库描述文件,标记元素的信息 Greeting examples.servlets.Greeting empty Tag with Parameter ,标记库中能够包含任何数量的标记。比如此例子,我们还可以增加另外的标记。 Tag可以有很多子标记,但只有name和tagclass是必需的 Greeting表示标记名称,也即标记的后缀。,2019/4/3,103,标记库描述文件,如: forProperty com.taglib.wdjsp.mut.ForPropertyTag com.taglib.wdjsp.mut.ForPropertyTei JSP :标记处理程序类 助手类,定义标记的脚本编程变量的类 取JSP,empty,tagdependent之一 Jsp(默认)servlet容器对内容求值 Empty:主体必须为空 Tagdependent:由标记处理程序对内容求值,2019/4/3,104,标记库描述文件,标记属性的信息 num1 true false ,是tag的子标记 有三个子标记,name必须 name:标记中属性名 require:表示属性是否必须 rtexprvalue:表示属性是否可由请求时的属性值来指定,2019/4/3,105,标记处理程序,执行与自定义标记关联的动作的 Java 对象 必须实现javax.servlet.jsp.tagext包的Tag或Body Tag接口 Tag 接口支持以下方法: void setPageContext(PageContext) void setParent(Tag) int doStartTag() throws JspException int doEndTag() throws JspException void release() 开发人员很少直接实现tag接口,因为TagSupport和BodyTagSupport类对上述接口做默认实现,2019/4/3,106,标记处理程序,处理过程,注:所有标记都有父标记,顶级标记的父标记为null.通过tag接口可访问其父标记,但父标记的设置方法与页面上下文和servlet容器的实现过程密切相关,jsp开发人员一般不会调用它。,2019/4/3,107,标记处理程序,doStartTag() 自定义标记开始时调用 返回在标记接口中定义的 int 常量的EVAL_BODY_INCLUDE或 SKIP_BODY,以决定是否处理标记的主题部分。 doEndTag() 在自定义标记结束时调用 返回 EVAL_PAGE 或 SKIP_PAGE,以决定是否处理页面的其余部分。 Release():在处理程序结束时,即在jsp页面结尾处被调用,释放各种资源。,2019/4/3,108,标记处理程序示例,import java.io.*; import javax.servlet.jsp.tagext.*; public class Greeting extends TagSupport public int doStartTag() try pageContext.getOut().print(“Hello!”); catch (IOException e) e.printStackTrace(); return SKIP_BODY; public int doEndTag() try pageContext.getOut().print(“”); catch (IOException e) e.printStackTrace(); return EVAL_PAGE; ,2019/4/3,109,标记处理器,doStartTag()的两个返回常量: 返回值EVAL_BODY_INCLUDE表示,JSP引擎要分析标记的体内容和它所拥有的任何的子标记 返回值SKIP_BODY表示,JSP引擎应该忽略体内容。 注意,doStartTag()覆盖了TagSupport()的该方法,会抛出JspTagException异常。,2019/4/3,110,自定义标记,doEndTag()方法可有两个返回值:EVAL_PAGE和SKIP_PAGE。 EVAL_PAGE会让JSP引擎去分析页面的其余的内容。 SKIP_PAGE会终止页面分析过程。,2019/4/3,111,标记扩展目录结构,hello.jsp WEB-INF/ web.xml classes/ tagext/ HelloTag.class tlds/ hello.tld,2019/4/3,112,2.8 JSP动作,向其他服务器对象传输控制权或执行操作 主要包括: 等,2019/4/3,113,2.8 JSP动作,JSP 动作的作用 实例化对象提高组件的可重用性,增强应用的可维护性 与服务器端资源进行通信 通过标记库定义自定义标记,2019/4/3,114,2.8 JSP动作,JSP 动作的语法 JSP 动作标记遵循 XML 语言的语法 起始标记 结束标记 空标记 如: ,2019/4/3,115,2.8 JSP动作,具有一个名称 具有前缀 jsp: 用一对尖括号()括起来 在尖括号内定义标记: 起始标记 - 以元素的名称开头 结束标记 - 以正斜线开头,后面紧跟元素名称 空标记 - 以元素名称开头,以正斜线结束,2019/4/3,116,2.8.1 jsp:include动作,可将外部的静态或者动态资源包括在当前页面的输出结果中,可包括Servlet 动作语法如下: jsp:include page=“relative URL“ flush=“true“ / page 属性要插入当前页面的文档 flush 属性是否刷新当前页面的缓冲器,flush默认为false,应该置为ture,在当前的JSP实现里将flush属性设成false是无效的 Request和session对象相同 标记指定附加的 request 参数,2019/4/3,117,2.8.1 jsp:include动作, , String _jspx_qStr = “”; out.flush(); pageContext.include(“included2.html” + _jspx_qStr); ,当包容器遇到这个标记时,就用预先定义的任务的 Java代码来代替它。,Servlet代码,JSP代码,如果include2.html的内容变化了,那么使用包含指令方式浏览器请求jsp页面显示的还是以前的内容,但是使用包含动作方式,浏览器请求jsp页面显示的就是新的内容。,2019/4/3,118,2.8.1 jsp:include动作,include 指令和 include 动作的区别 自动重新编译和类大小 静态或动态内容的包括 动作可以包含servlet等,因为它包含的是输出结果而不是文本内容 合并主页和包括的页面的时间 动作在处理请求时才包含进来 共享局部变量 用动作时,在一个页面中声明的变量不可用于另一文件 修改的生效 用指令时,修改的生效需刷新页面或去掉已经有的servlet 变量的作用域 用指令时注意变量名冲突,2019/4/3,119,2.8.1 jsp:include动作,例子example2_19.jsp动态嵌入两个文件hello1.txt和image.html, 运行结果如图2-29所示,2019/4/3,120,2.8.2 jsp:param动作标记, 标记用于将附加 request 参数发送至转发的页 可与 和 标记一起使 语法形式为: name 属性指定参数的名称 value 属性指定参数的值 如: ,2019/4/3,121,2.8.2 jsp:param动作标记,例子example2_20.jsp动态包含tom.jsp并向其
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高中劳技课课件
- 高三诗歌鉴赏
- 高一军训课件
- 离婚协议书与房产转让及租金收益分配范本
- 知识产权保密及互联网广告合作合同
- 离婚程序中财产分割与子女抚养权法律援助合同
- 离婚抚养权争夺子女监护与财产分割合同范本
- 地产销售会议总结报告
- 企业文化建设中的员工沟通保障
- 提高组织效率课程推动计划
- 教育事业十五五(2026-2030)发展规划
- 安e赔考试试题及答案
- 建设工程设计合同(业主、管理人、设计人三方)
- 农业产业绿色发展的技术与政策支持研究报告
- 计算机一级Msoffice知识点总结试题及答案
- 新生儿竞赛试题及答案
- TCCEAS001-2022建设项目工程总承包计价规范
- 输变电工程施工质量验收统一表式附件4:电缆工程填写示例
- 山东省中药材生产质量管理药材质量标准制定模板及示例
- 幼儿园大班数学测加减法口算练习题
- 餐饮内部稽核管理制度
评论
0/150
提交评论