版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、王红第2章JSP基础 2022/9/281主要内容第2章 JSP基础2.1 JSP概述 2.2 JSP页面的基本组成 2.3 JSP页面中的注释 2.4 声明 2.5 JAVA代码段2.6 表达式2.7 .JSP指令 2.8 JSP动作 2022/9/2822.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页面测试 2022/9/2832.1.1 第一个JSP页面JSP 是 Sun Microsystems 公司的一种规范.它将 Java
2、 与 HTML 相结合显示与处理分离JSP 可结合其他Java 组件一起使用JSP 是使用Java 开发基于 Web 的应用程序不可或缺的部分典型的web应用组成:applet, JSP, Servlet, Javabean, HTML,XML,EJB,容器2022/9/284JSP概念 JSP的执行2022/9/2852.1.1 第一个JSP页面JSP页面可以用任何编辑器编写,只需要确保以.jsp扩展名保存此文档 第一个简单的JSP页面example2_1.jsp 2022/9/2862.1.2 JSP运行原理JSP页面在运行之前要被解释成Java Servlet ,然后它可以处理HTTP请
3、求并生成响应信息 JSP容器的工作过程如下图所示:判断与JSP文件对应的类的名字 如果该类不存在或比.jsp文件的老 ,容器就会重新创建一个等价的Servlet类并编译它 如果Servlet类存在只是其实例并末运行,容器就载入该Servlet类并创建一个实例 容器启动一个线程在载入的实例中处理当前Http请求 2022/9/287JSP和Servlet的关系My name is jb-aptech!String str = “My name is java”;out.println(str);JSP把静态内容和代码分离标记Servlet第一个请求产生应答被转换为以后的请求2022/9/288J
4、SP和Servlet的关系解析jsp 接受请求生成jsp的servlet 编译servlet 加载servlet 生成响应 JSP Servlet最新?JSP Servlet加载?发送请求nnyy2022/9/289JSP执行过程*.jsp*.java*.classrequestresponse执行jsp parserJSDKservletservlet 分析器2022/9/28102.1.2 JSP运行原理JSP页面的运行过程是由JSP容器和Servlet容器实现的 JSP容器是被Servlet容器所运行的 不同销售商都有自己的JSP容器实现,但是它都是由一个Servlet或者一套Servl
5、et来组成的 JSP容器用以替代早期标准中的术语JSP引擎 2022/9/28112.1.2 JSP运行原理观察一个JSP页面HelloWorld.jsp 观察HelloWorld.jsp 对应的Servlet类HelloWorld_jsp.java 可见,JSP在运行前首先将编译为一个Servlet,这就是理解JSP技术的关键 如下图所示:2022/9/2812JSP和Servlet的关系转换后的servlet JSP文件javax.servlet.jsp.JspPage JspInit()方法 JspDestroy()方法 JspService()方法 实现Servlet接口 init()
6、方法 destroy()方法 service()方法 相似2022/9/28132.1.2 JSP运行原理为什么要把JSP转为Servlet再去运行呢? Servlet扩展Web server上呈现是一种强有力的方法 Servlet提供了公认的Java在独立于平台、独立安全性以及强壮性等方面的优点 服务器端为Servlet提供了很多底层支持,如安全性 Servlet在访问数据时更加直接 2022/9/28142.1.3 JSP与Servlet的关系Servlet就是服务器端小程序Servlet技术是早期为了Java的服务器端应用而开发的 Servlet显示页面非常笨拙 ,因此在Servlet技
7、术之上开发了JSPJSP和Servlet之间有着内在的血缘关系,注意抓住这种联系JSP 页面和Servlets 程序是可以相互操作 2022/9/28152.1.3 JSP与Servlet的关系在HTML页面中内嵌Java代码和Java调用与直接在Servlet程序中编写Java代码相比起来更为方便 比较Servlet代码和JSP代码(example2_2.jsp),它们的运行的结果完全相同的如图2-3所示 2022/9/28162.1.3 JSP与Servlet的关系并不是说Servlet可以不用了 ,Servlet完成简单的业务逻辑和处理JSP不好处理的后台服务以及其他特殊要求等问题 Se
8、rvlet作为MVC(Model-View-Control)设计模式中的控制器 常见的情况是将两者结合使用 2022/9/28172.1.4配置JSP运行环境 并不是说Servlet可以不用了 ,Servlet完成简单的业务逻辑和处理JSP不好处理的后台服务以及其他特殊要求等问题 Servlet作为MVC(Model-View-Control)设计模式中的控制器 常见的情况是将两者结合使用 2022/9/28182.1.3 JSP与Servlet的关系并不是说Servlet可以不用了 ,Servlet完成简单的业务逻辑和处理JSP不好处理的后台服务以及其他特殊要求等问题 Servlet作为MV
9、C(Model-View-Control)设计模式中的控制器 常见的情况是将两者结合使用 2022/9/28192.1.3 JSP与Servlet的关系并不是说Servlet可以不用了 ,Servlet完成简单的业务逻辑和处理JSP不好处理的后台服务以及其他特殊要求等问题 Servlet作为MVC(Model-View-Control)设计模式中的控制器 常见的情况是将两者结合使用 2022/9/28202.1.4 配置JSP运行环境 Apache的Tomcat是一种免费Web服务器,安装主要步骤如下:(1) 安装JDK。(2)从SUN公司的网站免费下载jakarta-tomcat.zip (
10、3) 解压此文件(4)按照提示安装Tomcat(5) 设置环境变量 2022/9/28212.1.4 配置JSP运行环境 (6) 启动Tomcat (7) 通过浏览器中观察主页http:/localhost:8080的主页,运行结果如图2-7所示,表示Tomcat运行正常 。 2022/9/28222.1.4 配置JSP运行环境 (8) 通过点击JSP example并执行所列出的示例之一,确保它正确地提供jsp服务 需要注意的问题:(1)如果Tomcat不能正常启动,检查环境变量的设置 (2)如果Tomcat仍然不能正常启动,检查是否有端口冲突 ,通过 server.xml可以更改Tomca
11、t的端口号。 2022/9/28232.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等 2022/9/28242.1.6 JSP页面测试 运行一个JSP页面的主要步骤如下: 用一种文本编辑器编辑JSP源文件(example2_3.jsp) 将JSP文件
12、保存到C:Tomcatwebappsroot目录下。在IE地址栏中键入http:/localhost:8080/example2_3.jsp,对页面进行测试,运行结果如图2-9所示。 2022/9/28252.1.6 JSP页面测试几点说明: 可以在c:tomcatworklocalhost_下找到example2_3.jsp的字节码文件。 Tomcat服务器有几个默认的WEB服务目录 可以自己新建web目录。新建的web目录可以放在c:tomcatwebapps下面 ,也可以不在 。若不在,则需要修改server.xml 2022/9/28262.1.7 小结 JSP的优点 “编写一次,随处
13、运行”高品质工具支持组件和标记库的重用动态内容与静态内容的分离对脚本和动作的支持多层企业应用程序体系结构的 Web 访问层表示与实现的分离2022/9/28272.2 JSP页面的基本组成 一个JSP页面是由传统的HTML页面标记加上JSP标记和嵌入的JAVA代码组成 。具体地说,由以下4种元素组成:HTML标记、JSP标记、JSP脚本和注释JSP标记包括指令标记和动作标记指令标记是为JSP引擎而设计的 ,并不直接产生任何可见输出 ,只是告诉引擎如何处理其余JSP页面 动作标记是JSP页面特有的标记,它告诉WEB容器去执行某个“动作” JSP脚本是JSP页面中插入的java代码,它又可以细分为
14、声明、代码段和表达式 2022/9/28282.2 JSP页面的基本组成 声明用于定义特定于JSP页面(Servlet)的变量、方法和类;代码段是嵌入的JAVA语句表达式是JAVA脚本中输出语句的简化表示形式 例子example2_4.jsp 说明JSP页面的不同组成成分,运行效果如图2-10所示 2022/9/2829JSP标记类型 :指令JSP指令:用于设置全局值,是向包容器发送的。并且不向客户端产生输出向操作系统发送配置命令JSP指令WEB包容器发送相似2022/9/2830JSP标记类型:脚本和动作脚本元素:可以在JSP页面中插入Java代码。 动作:包容器遇到“动作标记”再执行“动作
15、”。 2022/9/2831JSP通用规则 JSP区分大小写指令和脚本元素所拥有的语法不是基于 XML的,但也可以获得一种可以替代的基于 XML的语法。比如指令:的等价的XML语法为:在标记中出现的属性值总是用引号括起来的:使用单引号或双引号。如果引号是属性值本身的一部分的话,就可以使用特殊的字符串'和(就像在HTML中一样)。 2022/9/2832JSP通用规则(续)在标记中可以使用字符 (反斜杠)来作为换码字符(例如,要使用 %,就要使用 %字符序列)。JSP使用的 URL要遵循 servlet的惯例,并且以一个 /开始的 URL叫做上下文相关路径,如果URL不是以/开始的,就
16、被解释为相对于当前的JSP。 在文档体中的文本中的空白符无关紧要。 2022/9/28332.3 JSP页面中的注释 注释是由程序员插入的、用于解释JSP源代码的句子或短语 注释不影响浏览器对页面的显示,但是可以有助于用户理解生成此页面的HTML和JSP源代码 类型:HTML 注释隐藏注释脚本注释2022/9/28342.3 JSP页面中的注释2.3.1 HTML 注释类似于在 HTML 中使用的那些注释可在其中包括动态内容浏览器察看源文件可看到由于注释不是简单地被JSP忽略,因此它们可以包含内嵌的动态内容。HTML注释之内的JSP表达式将被计算并插入到发送给浏览器的响应中 2022/9/28
17、352.3 JSP页面中的注释如example2_6.jsp ,运行结果如图2-12所示。2022/9/28362.3 JSP页面中的注释再如: HTML注释 未显示上一行的注释。2022/9/28372.3 JSP页面中的注释2022/9/28382.3 JSP页面中的注释再如:要多加练习 !-This page was loaded on - 在源文件中包括当前时间。 2022/9/28392.3 JSP页面中的注释2022/9/2840IE中的源程序有注释2022/9/28412.3 JSP页面中的注释2.3.2 隐藏注释只能通过查看原始 JSP 文件查看JSP 容器忽略此注释的主体在J
18、SP编译成的Servlet中看不到隐藏注释如example2_7.jsp ,运行结果如图2_13所示。 2022/9/2842隐藏注释 A Comment Test A Test of Comments 2022/9/2843隐藏注释 2022/9/2844在IE中查看源代码2022/9/28452.3 JSP页面中的注释2.3.3 脚本注释java脚本中的注释语法形式为:/ 单行注释/* 注释 */不仅能在原始JSP文件中看到,而且在翻译成的servlet中可见 ,可参见其对应的Servlet 举例example2_8.jsp,运行结果如图2-14所示2022/9/28462.3 JSP页面
19、中的注释2022/9/2847JSP脚本元素(scriptlets)使开发者能直接将代码嵌入 JSP 页面 类型:声明代码段表达式 2022/9/28482.4 声明 2.4.1 变量声明2.4.2 方法声明2.4.3 声明类 2022/9/28492.4 声明 用于定义特定于 JSP 页面的(servlet)变量和方法 在jsp初始化是完成初始化等价与静态变量,即一个客户的操作会影响另外客户不会向流中写任何信息可被该jsp页面中其他任何部分使用语法:声明的类型:变量声明方法声明声明类2022/9/2850 声明是JSP中的Java代码块,它用来在所产生的 servlet中定义类范围的变量和方
20、法。产生的servlet实例化时执行代码块。 2.4 声明 2022/9/28512.4 声明 2.4.1 变量声明声明的变量成了 JSP 页面被转换和编译到的 servlet 类的实例变量,各个客户端可共享语法: 等价的XML语法形式为:jsp:declaration 变量声明/jsp:declaration 如:声明的变量类型可以是JAVA语言中允许的任何数据类型 2022/9/28522.4 声明 2.4.2 方法声明定义的方法在整个JSP页面有效 将编译成的 Servlet 类的成员方法可以由页面上所有脚本元素访问其语法形式为:等价的XML语法形式为: jsp:declaration
21、方法声明 /jsp:declaration 方法声明方式跟Java中方法定义的形式一样,要给出方法返回类型、方法名、方法形参和方法体。注意:虽然方法是客户共享的,但方法中的变量并不是客户共享的。 2022/9/28532.4 声明 2.4.2 方法声明如:举例: declareation.jsp example2_4.jsp(声明方法) example2_5.jsp(改进,写文件) example2_6.jsp(共同计算pi)2022/9/28542.4 声明 2.4.2 方法声明举例: example2_9.jsp,运行结果如图2-15所示 2022/9/28552.4 声明 2.4.2 方
22、法声明举例: example2_10.jsp是对example2_9.jsp的改进举例: example2_11.jsp实现所有访问该页面的客户共同参与圆周率的计算。由于声明的变量能被客户共享,因此访问该页面的客户越多,的计算就越精确。运行结果如图2-16所示 2022/9/28562.4 声明 2.4.3 声明类定义的方法将编译成的 Servlet 类的内部类可以由页面上所有脚本元素创建该类对象例example2_12.jsp定义一个Square类,当客户访问该页面时,服务器创建该类的对象,只要客户给出方的边长,就可以求出方的周长和面积。运行结果如图2-17所示 2022/9/28572.4
23、声明 2.4.3 声明类2022/9/28582.5 代码段包含一个或多个有效而完整的语句是在请求处理期间要执行的 Java代码块,可以包含向客户产生输出。语法: 或 / 这里是 Java 代码 例:2022/9/28592.5 代码段 Scriptlet test page % for(int i=0;i 10;i+) out.println(Hello World. This is a scriptlet test + i + ); System.out.println(This goes to the System.out stream + i); % 2022/9/28602.5 代码
24、段需要注意:(1)一个JSP页面可以有多个JAVA代码段,这些代码段被JSP引擎按顺序执行(2)在代码段中也可以声明变量,但这些变量是JSP页面的局部变量 (3)代码段之间可以插入JSP页面的一些其它标记元素 (4)一个用户对JSP页面局部变量的操作不会影响其它客户 (5)代码段中要求是JAVA语句,语句必须以分号结束 2022/9/28612.5 代码段下面例子example2_13.jsp和例子example2_14.jsp功能基本相同,计算1到10的连续和。其中例子example2_14.jsp中包含多个JAVA代码段,并且中间插入HTML标记。此时要特别注意JAVA代码的完整性。运行结
25、果如图2-18所示 2022/9/28622.5 代码段再如: test 2022/9/28632.5 代码段%condition=1;switch(condition)case 0:out.println(You must select condition 0!+); break; case 1: out.println(You must select condition 1!+); 2022/9/28642.5 代码段break; case 2: out.println(You must select condition 2!+); break; default: out.println(
26、Your select not in 0,1,2,select again!+);% 转义符: 双引号 “ ,单引号,反斜杠,回车r,换行n,制表符t,退格b2022/9/2865脚本段执行结果2022/9/28662.6 表达式包含任何语言表达式在请求处理阶段计算值,将结果转成String并输出不以分号结束用于输出单个变量或某个计算的结果 语法: 或 如: 2022/9/28672.6 表达式注意:(1)“%=”是一个完整的符号,“%”和“=”不能插入空格。(2)表达式可以包含任何JAVA语言表达式,只要表达式可以求值。 (3) 表达式中不能插入语句,也不能以分号结束 (4)表达式是JAVA
27、代码段的一种简单书写方式,它的功能和代码段等效,如图2-19所示 2022/9/28682.6 表达式在JSP中out.print(“number” + i);在servlet中相当于假如i值为5,则:打印:number52022/9/28692.6 表达式例example2_15.jsp求各种表达式的结果。运行结果如图2-20所示 2022/9/2870%!、%= 和 %之间的区别 变量声明后面必须带分号表达式可以包含任何语言表达式,并不以分号结束代码段中,如果语言要求语句以分号结束,则必须提供分号2022/9/28712.7 JSP指令 2.7.1 page指令2.7.2 include指
28、令2.7.3 taglib指令 2022/9/28722.7 JSP指令 将有关页面的特殊处理信息传送到JSP容一个指令影响整个JSP文件 。指令以 终止 。 类型:include 指令page 指令taglib 指令2022/9/28732.7 JSP指令 2.7.1 page 指令page 指令将页面特定的信息传递给 JSP 引擎 用来定义和操作许多重要的依赖于页面的属性,这些属性影响整个JSP文件(整个编译后的类文件)在 JSP中的任何地方、以任何顺序,一个页面可以包含任意数量的 page指令。但是任何的属性/值对只能出现一次 。(除import外 )如: 2022/9/28742.7
29、JSP指令2.7.1 page 指令语法: 或 2022/9/28752.7 JSP指令 page 属性 infolanguage contentTypeextendsimportsessionbufferautoFlush isThreadSafeerrorPageisErrorPage等2022/9/28762.7 JSP指令属性描述缺省值language定义要使用的脚本语言。如果在将来 JSP包容器支持多种语言时可使用它“Java”import定义以逗号分隔的类或包的列表,就像在通常的 Java代码中所使用的import语句那样缺省情况下忽略,但已经引入4个包buffer定义对客户的输出
30、流的缓冲模型。如果值为“none”,则没有缓冲,而是所有的输出都被PrintWriter直接写到ServletResponse中。如果定义了缓冲区的尺寸(如“24kb”),则将输出写到不小于该值的缓冲区中与实现有关;至少为 8KB2022/9/28772.7 JSP指令autoFlush如果值为“true”,则当缓冲区满时,自动把输出缓冲输出给客户如果值为“false”,则当缓冲区满时,会有一个运行时异常“true”isThreadSafe如果值为“true”,则JSP引擎会同时向该页面发送多个客户请求。如果值为“false”,则JSP引擎会对发送给该页面的客户请求进行排队和处理,并且按照请求
31、被收到的顺序,在某个时刻只处理一个请求(库操作)。“true”contentType定义JSP的字符编码方式和JSP页面的应答的MIME类型。它的形式可以为MIMETYPE或“MIMETYPE; charset =CHARSET”。MIMETYPE的缺省值为text/html;CHARSET的缺省值为ISO-8859-12022/9/28782.7 JSP指令InfopageEncoding字符串Jsp页面字符编码无缺省默认iso-8859-1extends转换成servlet时指定父类无缺省Extends=“com.lib.myjsp”isErrorPageisELIgnored布尔值,为t
32、rue,jsp容器会自动产生Exception对象。布尔值,是否忽略&的计算 false由版本确定session布尔值,本页是否使用session对象True errorPage本地url,本页面异常时的处理页面无 ,errorPage=“/result/err.jsp2022/9/28792.7 JSP指令 下面的例子演示了page的language、import、contentType、buffer、autoFlush、isThreadSafe2022/9/28802.7 JSP指令 例example2_16.jsp表明info属性的使用,可以通过getServletInfo()取到inf
33、o属性的值,运行结果如图2-21所示 2022/9/28812.7 JSP指令 下例说明errorPage属性和 isErrorPage属性的使用,运行结果如图2-22,2-23,2-24所示 2022/9/28822.7 JSP指令 2.7.2 include 指令使页面作者能将一个文件的内容包括在另一个文件中语法:该指令的作用是在JSP页面中该指令出现的位置静态的插入一个文件。所谓静态插入,是指当前的JSP页面和被嵌入的文件合并成一个新的JSP页面,然后JSP引擎再将这个新页面转换成Servlet。include指令能让你将你的页面内容分成几个组成部分分别管理 2022/9/28832.7
34、 JSP指令 2.7.2 include 指令注意: 出现在一个 JSP 页面中的 include 指令的数量不受限制 静态插入,即内联方式(可看servlet),与include动作的区别 必须为localURL 发生在编译期间,但服务器可自动识别更新 注意合并后的语法2022/9/28842.7 JSP指令 Include directive test page Include directive test page 2002 JB-Aptech Press copyright.html:嵌入2022/9/28852.7 JSP指令 2.7.2 include 指令下面例example2_
35、17.jsp中使用include指令嵌入computer.jsp,运行结果如图2-25所示 2022/9/28862.7 JSP指令 2.7.2 include 指令例example2_18.jsp中嵌入hello.txt。hello.txt的内容是:欢迎你参加激动人心的JSP之旅。运行结果如图2-26所示 2022/9/28872.7 JSP指令 2.7.3 taglib指令自定义标记提供了可重用、可维护及可移植的内容生成解决方案 通知 JSP 容器,页面依赖于自定义标记库标记库是扩展 JSP 的功能的自定义标记的集合所有jsp自定义标记按组存放在标记库中,使用与标记库相关的前缀区分这些标记
36、,这样可以使用不同标记库中的相同标记。 2022/9/28882.7 JSP指令2.7.3 taglib指令编写JSP页面时可以直接使用标记库中的标记,就象使用JSP的标准标记一样Jsp定制标记遵循xml规范,这意味着可以在xml和html中使用用户自定义标记2022/9/28892.7 JSP指令自定义标记的特征:可以由主体也可以为空 可以以任何深度嵌套在其它自定义标记中可以处理主体内容,如过滤和编辑属性的使用可以在同一页面内与其它标记协同工作可以访问页面信息,如请求,响应,会话等可以创建脚本变量2022/9/28902.7 JSP指令自定义标记主要优点:易于安装在多个项目上,提升代码重用性
37、,加快开发速度自定义标记与jsp规范完全兼容标记库使web应用易于维护在JSPT上可找到最好的标记资源。经过多次使用的代码具有更少的bug2022/9/28912.7 JSP指令 2.7.3 taglib指令语法:其中uri是用户子定义标记库的url地址,prefix是用户子定义标记的前缀 2022/9/28922.7 JSP指令 2.7.3 taglib指令要使用用户自定义标记库,需要以下几方面的支持标记处理器 标记库描述文件 web.xml文件中标记库的描述 在jsp页面中使用用户子定义标记其实,使用标记库的关键不是编码,而是能将上述各部分正确的组织起来。这种层次结构非常重要。也正是如此,
38、标记库才既灵活又便于使用 2022/9/28932.7 JSP指令web.xml Demo.tld 标记处理程序类Tagdemo.jsp2022/9/2894标记扩展的工作过程hello.jsp/hello /WEB-INF/tlds/hello.tld web.xmlexample hellotagext.HelloTaghello.tldnew tagext.HelloTag();tagext.HelloTag实例化1. 当在jsp中遇到自定义标记时,要找到标记处理器,首先要实例化标记处理器类2022/9/2895标记扩展的工作过程(续)调用对象的doStartTag()方法调用对象的do
39、EndTag()方法以后在JSP中遇到标记库中的标记,调用标记处理器的相应方法。 2022/9/2896web.xml声明 /hello /WEB-INF/tlds/hello.tld 2022/9/2897标记扩展 的web.xml文件使用标记来让服务器知道当在要在JSP引入标记时,从哪儿可以找到TLD。 /hello标记对应于hello.jsp中的该行代码:标记指明标记描述器的位置。2022/9/2898标记库描述文件 TLD必须符合xml规范/servlet容器对其作dtd验证 1.0 1.1 mytag this is a sample 2022/9/2899标记库描述文件 其中sho
40、rtname和tlibversion必须tlibversion:标记库版本号,N.N.N.N形式,不能省略第一个Njspversion:与该标记库兼容的jsp规范版本号。缺省为1.1。shortname:标记库缺省名空间前缀uri:标记库可用公共副本来源标记库的描述信息2022/9/28100标记库描述文件 TLD 中除了包含关于作为整体的库还包含在库中每个标记和属性的信息。2022/9/28101标记库描述文件 标记元素的信息 Greeting examples.servlets.Greeting empty Tag with Parameter标记库中能够包含任何数量的标记。比如此例子,我
41、们还可以增加另外的标记。Tag可以有很多子标记,但只有name和tagclass是必需的Greeting表示标记名称,也即标记的后缀。2022/9/28102标记库描述文件 如: forProperty com.taglib.wdjsp.mut.ForPropertyTag com.taglib.wdjsp.mut.ForPropertyTei JSP :标记处理程序类助手类,定义标记的脚本编程变量的类 取JSP,empty,tagdependent之一Jsp(默认)servlet容器对内容求值Empty:主体必须为空Tagdependent:由标记处理程序对内容求值2022/9/28103标
42、记库描述文件 标记属性的信息 num1 true false是tag的子标记有三个子标记,name必须name:标记中属性名require:表示属性是否必须rtexprvalue:表示属性是否可由请求时的属性值来指定2022/9/28104标记处理程序 执行与自定义标记关联的动作的 Java 对象必须实现javax.servlet.jsp.tagext包的Tag或Body Tag接口Tag 接口支持以下方法:void setPageContext(PageContext)void setParent(Tag)int doStartTag() throws JspExceptionint doE
43、ndTag() throws JspExceptionvoid release()开发人员很少直接实现tag接口,因为TagSupport和BodyTagSupport类对上述接口做默认实现2022/9/28105标记处理程序 处理过程setPageContext()setParent()doStartTagdoEndTagrelease()停止处理主体注:所有标记都有父标记,顶级标记的父标记为null.通过tag接口可访问其父标记,但父标记的设置方法与页面上下文和servlet容器的实现过程密切相关,jsp开发人员一般不会调用它。2022/9/28106标记处理程序 doStartTag()
44、自定义标记开始时调用返回在标记接口中定义的 int 常量的EVAL_BODY_INCLUDE或 SKIP_BODY,以决定是否处理标记的主题部分。doEndTag()在自定义标记结束时调用返回 EVAL_PAGE 或 SKIP_PAGE,以决定是否处理页面的其余部分。Release():在处理程序结束时,即在jsp页面结尾处被调用,释放各种资源。2022/9/28107标记处理程序示例import java.io.*;import javax.servlet.jsp.tagext.*;public class Greeting extends TagSupport public int doS
45、tartTag() 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; 2022/9/28108标记处理器doStartTag()的两个返回常量: 返回值EVAL_BODY_INCLUDE表示,JSP引擎要分
46、析标记的体内容和它所拥有的任何的子标记返回值SKIP_BODY表示,JSP引擎应该忽略体内容。注意,doStartTag()覆盖了TagSupport()的该方法,会抛出JspTagException异常。2022/9/28109自定义标记doEndTag()方法可有两个返回值:EVAL_PAGE和SKIP_PAGE。EVAL_PAGE会让JSP引擎去分析页面的其余的内容。SKIP_PAGE会终止页面分析过程。2022/9/28110标记扩展目录结构hello.jspWEB-INF/web.xmlclasses/tagext/HelloTag.classtlds/hello.tld 2022/
47、9/281112.8 JSP动作 向其他服务器对象传输控制权或执行操作主要包括:等2022/9/281122.8 JSP动作JSP 动作的作用实例化对象提高组件的可重用性,增强应用的可维护性与服务器端资源进行通信通过标记库定义自定义标记2022/9/281132.8 JSP动作JSP 动作的语法JSP 动作标记遵循 XML 语言的语法起始标记结束标记空标记如: 2022/9/281142.8 JSP动作具有一个名称具有前缀 jsp:用一对尖括号()括起来在尖括号内定义标记:起始标记 - 以元素的名称开头结束标记 - 以正斜线开头,后面紧跟元素名称空标记 - 以元素名称开头,以正斜线结束2022
48、/9/281152.8.1 jsp:include动作可将外部的静态或者动态资源包括在当前页面的输出结果中,可包括Servlet动作语法如下: jsp:include page=relative URL flush=true / page 属性要插入当前页面的文档flush 属性是否刷新当前页面的缓冲器,flush默认为false,应该置为ture,在当前的JSP实现里将flush属性设成false是无效的 Request和session对象相同 标记指定附加的 request 参数2022/9/281162.8.1 jsp:include动作 String _jspx_qStr = “”;
49、out.flush(); pageContext.include(“included2.html” + _jspx_qStr);当包容器遇到这个标记时,就用预先定义的任务的 Java代码来代替它。Servlet代码JSP代码如果include2.html的内容变化了,那么使用包含指令方式浏览器请求jsp页面显示的还是以前的内容,但是使用包含动作方式,浏览器请求jsp页面显示的就是新的内容。2022/9/281172.8.1 jsp:include动作include 指令和 include 动作的区别自动重新编译和类大小静态或动态内容的包括动作可以包含servlet等,因为它包含的是输出结果而不是文本内容合并主页和包括的页面的时间动作在处理请求时才包含进来共享局部变量用动作时,在一个页面中声明的变量不可用于另一文件修改的生效用指令时,修改的生效需刷新页面或去掉已经有的servlet变量的作用域用指令时注意变量名冲突2022/9/281182.8.1 jsp:include动作例子example2_19.jsp动态嵌入两个文件hello1.txt和image.html, 运行结果如图2-29所示 2022/9/281192.8.2 jsp:param动作标记 标记用于将附加 reque
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 未来五年PTA企业县域市场拓展与下沉战略分析研究报告
- 未来五年车用散热器行业跨境出海战略分析研究报告
- 未来五年复杂环境识别软件企业县域市场拓展与下沉战略分析研究报告
- 未来五年彩色胶卷企业县域市场拓展与下沉战略分析研究报告
- 未来五年无线广播电视网企业数字化转型与智慧升级战略分析研究报告
- 人力资源部招聘专员工作职责与绩效考核含答案
- 东方电气机械工程师理论知识考试题含答案
- 楼地面地板砖施工技术交底试卷教案(2025-2026学年)
- 创伤后应激障的护理教案(2025-2026学年)
- 数学西师大版一年级上册连加连减教案
- 2025年沈阳华晨专用车有限公司公开招聘笔试历年参考题库附带答案详解
- 2026(苏教版)数学五上期末复习大全(知识梳理+易错题+压轴题+模拟卷)
- 2024广东广州市海珠区琶洲街道招聘雇员(协管员)5人 备考题库带答案解析
- 蓄电池安全管理课件
- 建筑业项目经理目标达成度考核表
- 2025广东肇庆四会市建筑安装工程有限公司招聘工作人员考试参考题库带答案解析
- 第五单元国乐飘香(一)《二泉映月》课件人音版(简谱)初中音乐八年级上册
- 简约物业交接班管理制度
- 收购摩托驾校协议书
- 2025年浙江省中考数学试卷(含答案)
- 汽车行业可信数据空间方案
评论
0/150
提交评论