版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第五章 JSP基本语法JSP基本原理JSP语法JSP的元素脚本元素(Scripting Elements)JSP指令元素(Directives Elements) JSP动作元素(Action Elements) 页面的复用技术 在本节中,您将了解以下内容: 什么是JSPJSP的执行过程 JSP基本原理JSP基本原理一、什么是JSPJSP基本原理5.1节 纯Servlet编写的网站?Servlet是功能非常强大的Web组件,用它可以实现非常复杂的Web应用逻辑。虽然可以使用Servlet生成用户页面,但是有以下问题:java代码和HTML语句混杂在一起,使得当客户端的显示需要调整时,必须修改源
2、代码,并重写译servlet。由于Servlet模糊了内容的提供与内容的表示的区别、在servlet类中出现大量的HTML文本使得servlet很难维护也就是说,Servlet的长处在于处理逻辑,而不是处理表示。为了方便地处理表示,可使用JavaServerPage(Java 服务器页面)一、什么是JSPJSP基本原理5.1节 换一种思路既然Servlet的长处在于处理逻辑,而不是处理表示。我们希望有一种技术,其长处在于处理表示,以弥补Servlet的缺点。这就是JSP。JSP( JavaServer Pages )是由Sun 公司倡导、许多其他公司参与一起建立的一种新动态网页技术标准。JSP
3、页面从形式上就是在传统的网页HTML 文件( *.htm,*.html )中加入Java程序片段( Scriptlet )和JSP标签。Servlet/JSP容器收到客户端发出的请求时,首先执行其中的程序片段,然后将执行结果以HTML格式响应给客户端。其中程序片段可以操作数据库、重新定向网页以及发送 E-Mail 等等, 这些都是建立动态网站所需要的功能。所有程序操作都在服务器端执行,网络上传送给客户端的仅是得到的结果,与客户端的浏览器无关,因此,JSP称为Server-SideLanguage 一、什么是JSPJSP基本原理5.1节第一个JSP页面JSP页面从形式上看就是在HTML文档中嵌入
4、了一些java代码。 Helloworld.JSP CH5 - helloworld.jsp 标记中的是Java代码,该代码在响应用户请求时才动态运行。一、什么是JSPJSP基本原理5.1节JSP页面的好处动态页面。当JSP页面被访问时,JSP会生成不同的动态页面;JSP页面是由容器解释执行的。因此,网站维护人员不必安装Java开发工具就可以方便的使用Notepad等修改;JSP完全与Servlet规范兼容。实际上,JSP总是被翻译成Servlet目标代码并在Web应用中缓存起来,以加快相应速度;JSP页面与HTML兼容。JSP页面与普通HTML页面并无根本区别,具有HTML编程体验的程序员很
5、容易上手。当用户访问JSP页面时,JSP页面的处理过程如图所示:二、JSP的执行过程JSP基本原理5.1节当客户第一次请求JSP页面时,JSP引擎会通过预处理把JSP文件中的静态数据(HTML文本)和动态数据(java脚本)全部转换为java代码,这个转换工作实际上是非常直观的,对于HTML文本只是简单的用out.println()方法包裹起来,对于java脚本只是保留或做简单的处理。随即,JSP引擎把生成的.java文件编译成servlet类文件(.class)。对于Tomcat服务器而言,生成的class文件默认的情况下存放在work目录下 。 编译后的class对象被加载到容器中,并根据
6、用户的请求生成HTML格式的响应页面HTML格式的响应页面返回到客户端二、JSP的执行过程JSP基本原理5.1节转译和请求 在执行JSP 网页时,通常可分为两个时期:转译时期(Translation Time)和请求时期(RequestTime) 。转译时期:JSP 网页转译成Servlet 类,然后编译成Class文件;用户请求处理时期:Servlet 类执行后,响应结果至客户端。转译请求二、JSP的执行过程JSP基本原理5.1节转译结果的缓存在Tomcat中,部署一个名为Hello的Web应用。将helloworld.jsp部署在/hello下。Tomcat将所有Web应用的一份缓存保存在
7、workStandalonelocalhost下。但是现在没有hello应用。这是因为还没有客户访问该应用。当在浏览器中访问hello/helloworld.jsp后,Tomcat执行转译工作,并将转译结果缓存到work目录下。两个文件被生成: hellowork$jsp.class helloworld$jsp.java二、JSP的执行过程JSP基本原理5.1节转译的结果 helloworld$jsp.java package org.apache.jsp;import javax.servlet.*;public class helloworld$jsp extends HttpJspBa
8、se public final void _jspx_init() public void _jspService(HttpServletRequest req, HttpServletResponse resp) public void _jspDestroy() 二、JSP的执行过程JSP基本原理5.1节public final void _jspx_init()_jspInit( ):当JSP 网页一开始执行时,最先执行此方法。因此,我们通常会把初始化的工作写在此方法中。二、JSP的执行过程JSP基本原理5.1节public void _jspDestroy()_jspDestroy()
9、是JSP 网页最后执行的方法。通常在此执行与资源释放相关的工作,如释放文件、释放内存、释放数据库连接等。二、JSP的执行过程JSP基本原理5.1节void _jspService(HttpServletRequest req, HttpServletResponse resp)该方法处理用户请求。 转译过程中JSP网页最主要的代码都是在此方法中。如: out.write(rnrnrnCH5 helloworld.jsp+ rnrnrn); out.println(Helloworld,JSP!); out.write(rnrn); 二、JSP的执行过程JSP基本原理5.1节JSP的本质publ
10、ic class helloworld$jsp extends HttpJspBase 二、JSP的执行过程JSP基本原理5.1节关于效率: JSP页面的转译、编译工作是在该页面第一次被访问时进行的。所以JSP引擎在第一次处理JSP请求时,请求用户在收到响应前可能有较长的延迟。但在后续的请求中,这些工作都已经完成,时间延迟问题将不复存在。也就是说,当处理后续的用户访问时, JSP和Servlet的执行速度是一样的。第五章 JSP基本语法JSP基本原理JSP语法JSP的元素脚本元素(Scripting Elements)JSP指令元素(Directives Elements) JSP动作元素(A
11、ction Elements) 页面的复用技术 在本节中,您将了解:一、元素 (Elements)与模板数据(Template Data) 二、注释 客户端可以看到的批注 开发程序员专用的批注三、转义JSP语法JSP语法5.2节JSP 网页主要分为元素 (Elements)与模板数据(Template Data)部分Helloworld.JSP CH5 - helloworld.jsp JSP语法一、元素 (Elements)与模板数据(Template Data)模板数据:JSP容器 不处理的部分,例如HTML 的内容,会直接送到Client 端执行。元素:必须经由JSP 容器 处理的部分,
12、而大部分元素都以XML 作为语法基础,并且大小写必须要一致。一、元素 (Elements)与模板数据(Template Data)JSP语法5.2节元素有两种表达式第一种为起始标签(包含Element 名称、属性),中间为一些内容,最后为结尾标签。如下所示: body 另一种是标签中只有元素的名称、属性,称为空元素(Empty Elements)。如下所示: 元素有三种类型指令元素(Directive Elements)脚本元素(Scripting Elements)动作元素(Action Elements)。JSP语法5.2节概念JSP注释是程序员写入JSP的、不影响运行结果的程序注解。它的
13、目的一般在于对程序元素的功能进行说明。注解必须使用特殊的标记以区别于HTML模板和元素。分类客户端可以看到的批注:!- comment -例如:!- 现在时间为: -在客户端的HTML 源文件中显示为:开发程序员专用的批注: 或者 二、注释JSP语法5.2节JSP页面程序如下!可以在客户端源代码中看到 -CH5 A Comment TestA Test of Comments 从用户的浏览器中,看到的源代码如下A Comment TestA Test of Comments二、注释JSP语法5.2节概念在JSP页面中, 等符号都是有特殊用途的。如JSP是以标签作为代码结束。所以当需要在JSP
14、代码中输出 这些符号时,应该进行转义。 CH5 - escape1.jsp 转义示例程序2 % out.println(JSP 遇到 、 时需要做适当的修改); %三、转义第五章 JSP基本语法JSP基本原理JSP语法JSP的元素脚本元素(Scripting Elements)JSP指令元素(Directives Elements) JSP动作元素(Action Elements) 页面的复用技术 声明(Declarations)小脚本(Scriptlets)表达式 (Expressions)脚本元素(Scripting Elements)例子%! int i = 0; int a, b, c
15、; Double d = new Double(2.3); public String f(int i) if ( i 3 ) return (i=3); ;%脚本元素(Scripting Elements)一、声明(Declarations)脚本元素(Scripting Elements)5.3节概念在JSP 程序中,使用声明来为JSP页面中的Java代码定义合法的变量和方法。语法声明是以 为结尾。中间以;号分隔各语句。 可以将多个声明写入一行,中间用分号分隔。也可以将每条声明写入单独一行。但最后仍要有分号。在声明中编写方法,只要遵循一般的Java语法即可。所有这些声明一定要包含在标记对之间
16、。一、声明(Declarations) 脚本元素(Scripting Elements)5.3节使用声明的注意事项使用可以声明在JSP 程序中要用的变量和方法,可以一次声明多个类变量和方法,只要最后以分号“;”结尾就行,当然这些声明在Java 中要是合法的。每一个声明仅在一个页面中有效,如果想每个页面都用到一些声明,最好把它们写成一个单独的JSP 网页,然后用或元素包含进来。使用方式所声明的变量是类成员变量。在helloworld.jsp页面中声明的变量,在转译后将成为Servlet类helloworld$jsp的成员变量。因此,同其他Servlet类一样,我们必须慎重处理同步访问问题。例子Y
17、ou must input your name.二、小脚本( Scriptlet )脚本元素(Scripting Elements)5.3节概念Scriptlet是在JSP页面中嵌入的、包含Java代码的程序片段。所有满足Java标准语法的代码都可在Scriptlet中出现。通常对客户请求进行的处理也都写在这里面语法Scriptlet以 为结尾。如: 二、小脚本( Scriptlet )脚本元素(Scripting Elements)5.3节使用小脚本的注意事项JSP容器在转译JSP页面时,会将包含在中的Java代码原封不动地保留在Servlet类的_jspService()方法中,即在内定义
18、的变量将是_jspService()方法的局部变量,而在内定义的代码将在jspService()方法中被执行。由于在内定义的变量是_jspService()方法的局部变量,JSP将为每个客户线程保存单独的拷贝,因此不存在用定义的类变量的多线程同步问题,使用上是线程安全的。当JSP收到客户端的请求时,会调用_jspService()方法,因此Scriptlet 就会被执行,如同Servlet的doGet()、doPost(),如果Scriptlet 有显示的内容会被存在out 对象中,然后再利用out 对象中的println()方法显示出结果。三、表达式( Expressions )脚本元素(S
19、cripting Elements)5.3节概念在JSP页面中,一个Expressions在被JSP引擎执行后会被自动转化为字符串,然后显示出来。语法Expressions 标签是以 为结尾,其中间内容包含一段合法的Java表达式, 例如三、表达式( Expressions )脚本元素(Scripting Elements)5.3节使用表达式的注意事项不能使用分号“;”来作为表达式的结束符号,如下: 是错误的。同样的表达式,用在Scriptlet中就需要以分号来结尾。我们可以通过查看JSP转义生成的Servlet源程序,来了解JSP容器是如何处理的,例如,JSP代码 在生成的Servlet源文
20、件中,将会以下面的形式出现在_jspService方法中: out.println(new java.util.Date();由此可见,JSP容器对表达式元素的处理是非常简单的,它所做的工作只是在JSP表达式外包装了out.println()方法。第五章 JSP基本语法JSP基本原理JSP语法JSP的元素脚本元素(Scripting Elements)JSP指令元素(Directives Elements) JSP动作元素(Action Elements) 页面的复用技术 在本节中,您将了解到什么是JSP指令JSP指令的分类,包括:Page指令Include指令Taglib指令JSP指令元素(
21、Directives Elements)JSP指令元素(Directives Elements)什么是JSP指令指令元素(Directives Elements)5.4节JSP指令的用途非常简单,它只是告诉JSP引擎对JSP页面如何编译。因此它不包含业务逻辑,也不修改out流。JSP指令在使用时的一般形式为:其中,可用下列关键字替代directive占位符:PageIncludeTaglibJSP指令的一般书写格式指令元素(Directives Elements)5.4节JSP指令在使用时的一般形式为:这种形式虽然简单明了,但是不符合XML规范。JSP指令的内部就是一些指令和和一连串的属性设定
22、,如下所示:亦可以写成:一、Page指令指令元素(Directives Elements)5.4节功能page 指令是最复杂的JSP指令,它的主要功能为设定整个JSP 网页的属性和相关功能。具体是设置哪种功能,是由其属性指定的。基本语法page 指令是以结束: 然而像所有JSP 标签元素一样,page 指令也支持另一种以XML为基础的语法,如下所示: 一、Page指令指令元素(Directives Elements)5.4节属性Page指令使用属性表明其功能。如:需要说明的是page指令的属性只有import可以重复设定,其他则不可以。如下面的page 指令示例是非法的,因为session 属
23、性重复设定两次:属性定义language =“语言主要指定JSP 容器 要用什么语言来编译JSP 网页。JSP 1.2 规范中指出,目前只可以使用Java 语言,不过未来不排除增加其他语言,如C、C+、Perl 等等。默认值为Java语言 extends = “基类名 主要定义此JSP 网页产生的Servlet 是继承哪个父类import= importList 定义此JSP 网页可以使用哪些Java类库 session=true | false 决定此JSP 网页是否可以使用session 对象。默认值为truebuffer=none|size in kb决定输出流(output strea
24、m) 是否有缓冲区。默认值为8KB 的缓冲区autoFlush=true | false 决定输出流的缓冲区是否要自动清除,缓冲区满了会产生异常(Exception)。默认值为true isThreadSafe=true | false告诉JSP 容器,此JSP 网页是否能同时处理多个请求。默认值为true,如果此值设为false, 转义生成的Servlet会实现SingleThreadModel接口。info =text 表示此JSP 网页的相关信息errorPage=error_url 表示如果发生异常错误时,网页会被重新指向指定的URL isErrorPage=true | false
25、表示此JSP Page 是否为专门处理错误和异常的网页contentType = ctinfo 表示MIME 类型和JSP 网页的编码方式,其作用相当于HttpServletResponse接口的setContentType()方法Page指令中常见的属性一、Page指令指令元素(Directives Elements)5.4节Page指令的转译pageComparing Apples and Oranges QuarterApplesOranges First Quarter23073476 Second Quarter14534132 Third Quarter48924332 Forth
26、 Quarter34022543response.setContentType(application/vnd.ms-excel; charset=GBK);二、Include指令指令元素(Directives Elements)5.4节概念include 指令用于指示JSP容器在JSP 编译时插入一个包含文本或代码的文件,这个包含的过程是静态的,而包含的文件可以是JSP 网页、HTML 网页、文本文件,或是一段Java 程序。语法include 指令的语法如下:include 指令只有一个属性,那就是file,而relativeURLspec 表示此file 的路径。像所有JSP 标签元素一
27、样,include 指令也支持以XML 为基础的语法,如下所示: 二、Include指令指令元素(Directives Elements)5.4节要注意事项包含文件中要避免使用、,因为这将会影响在原来JSP 网页中同样的标签,这样做有时会导致错误; 指令是一种静态的SSI(服务器端包含)。1、所谓的静态是指file不能为一变量,例如: 而以下指令是错误的: % include file = “” %2、SSI意味着不可以在file 所指定的文件后接任何参数,如下: 同时,file 所指的路径必须是相对于此JSP 网页的路径。二、Include指令指令元素(Directives Elements
28、)5.4节 Helloworld.html Say Hello from Helloworld.html Include.jspCH5 - Include.jspinclude 指令 Include.jspCH5 - Include.jspinclude 指令Say Hello from Helloworld.html二、Include指令指令元素(Directives Elements)5.4节二、Include指令指令元素(Directives Elements)5.4节Include指令的执行过程由该执行过程可以得到一个重要结论:在A.jsp已转译的情况下,如B.jsp发生变化,不会引发
29、A.jsp的重新转译。这是因为JSP引擎仅仅在监视到A.jsp发生变化且再次被用户访问时,才会对A.jsp重新进行转译。而仅仅修改B.jsp是不能触发上述条件的。当A.jsp第一次被调用时,会引起A.jsp的转译。其中的include指令指示JSP容器将B.jsp的内容插入到include指令所在的地方,共同形成Servlet源文件A$jsp.java, 随后,java文件被编译成class文件,并由容器调用,向客户端返回响应报文。 三、Taglib指令指令元素(Directives Elements)5.4节概念Taglib 指令是JSP 1.1新增进来的功能,能够让用户使用第三方JSP标签
30、,大大简化JSP页面的结构。关于JSP定制标签的详细介绍可参阅本教材第9、10章。语法Taglib 指令的常用语法为: 像所有JSP标签元素一样,taglib指令也支持以XML为基础的语法: 属性uri说明taglibrary(标签库) 的存放位置属性prefix用来在本jsp页面中区分多个自定义标签库的前缀三、Taglib指令指令元素(Directives Elements)5.4节一个使用标签库的JSP页面CH5 - TaglibDirective 引入标签库后,所有在JSP页面中出现的标签,将由容器转交给标签库进行处理,处理的结果以重新插入到标签所在位置处。引入标签库,使得下面使用的标签
31、等生效。三、Taglib指令指令元素(Directives Elements)5.4节使用标签库的JSP页面结果第五章 JSP基本语法JSP基本原理JSP语法JSP的元素脚本元素(Scripting Elements)JSP指令元素(Directives Elements) JSP动作元素(Action Elements) 页面的复用技术 在本节中您将了解到以下内容:JSP动作元素的概念基本的JSP动作元素JSP动作元素(Action Elements)JSP动作元素(Action Elements)什么是JSP动作元素动作元素(Action Elements)5.5节JSP技术规范定义了一些
32、所有兼容的Web容器都必须实现的标准JSP动作元素。这些JSP动作与JSP指令作用在JSP的翻译阶段不同,它们是在用户请求处理阶段才被JSP引擎处理的。JSP1.2规范中,主要有以下几项动作元素:动作元素(Action Elements)5.5节概念元素允许在一个JSP响应中动态包含来自该JSP外的其他内容。这种包含是动态的,在每次JSP被调用时,被包含的内容将被重新计算。这一点与指令是不同的。语法 jsp:include page=“urlSpec | ” flush=“true | false ” /或 jsp:include page=urlSpec | flush=true | fal
33、se jsp:param name=PN value=PV | / page可以代表一个相对路径,即你所要包含进来的文件位置或是经过表达式所运算出的相对路径。flush接受的值为boolean,假若为true,缓冲区满时,将会被清空。flush 的默认值为false。在JSP 1.2 之前,flush 必须设为true。若page属性需要参数,则可在元素中指定参数的名称和值。参数值甚至可以指定表达式。例子: 动作元素(Action Elements)5.5节动作元素的工作原理动作元素(Action Elements)5.5节动作元素的工作特点一、注意与include指令的区别。include指
34、令是在JSP转译前起作用的。假设A.jsp用包含指令包含了B.jsp,则包含进来的B.jsp的原文。B.jsp的内容将直接影响转译的结果。因此,一般对B.jsp内容有一定要求,如:要避免使用、等。include动作是在用户请求时起作用的。假设A.jsp用包含动作包含了B.jsp,其实包含进来的是B.jsp的运行结果。B.jsp的内容并不参与A.jsp的转译过程。二、每次访问A.jsp都会引起对B.jsp的调用假设A.jsp用包含动作包含了B.jsp,则当用户访问A.jsp时,A$jsp.class会动态调用B$jsp.class。如果B.jsp发生的变化,在运行必然会引起JSP容器检查B.js
35、p是否发生变化,B.jsp重新转译后才输出结果给A.jsp。动作元素(Action Elements)5.5节 B.jspA.jspCH5 - A.jsp两个包含动作将在A$jsp.java的_jspService方法中留下两个“代码片断”,这些代码片断负责向B.jsp发出请求并获得结果。 在A$jsp.class运行时,向B.jsp请求的结果被合并到A.jsp的输出中。动作元素(Action Elements)5.5节与include指令相同,include动作也是位置敏感的,即被包含JSP的运行结果将输出在include动作的位置上。动作元素(Action Elements)5.5节概念动
36、作将客户端所发出来的请求,从一个JSP 网页转交给另一个JSP网页。forward动作将会引起Web服务器的请求目标转发。转发的工作机制与重定向不同,这些工作都是在服务器端进行的,不会引起用户端的二次请求,因此效率较重定向要高。不过有一点要特别注意,标签之后的程序将不能执行。语法 与include动作相同,可以使用jsp:param设定转发的请求参数。动作元素(Action Elements)5.5节 ForwardFrom.jsp CH5 - ForwardFrom ForwardTo.jsp CH5 - ForwardTo由ForwardFrom.jsp传递过来的参数为:动作元素(Acti
37、on Elements)5.5节工作原理客户端向服务器的ForwardFrom.jsp发出请求 ForwardFrom.jsp在处理过程中,遇到动作ForwardFrom.jsp向客户端返回响应。注意这个响应其实是由ForwardTo.jsp返回的。ForwardFrom.jsp向ForwardTo.jsp发出请求,并从ForwardTo.jsp捕获响应。动作元素(Action Elements)5.5节客户端访问ForwardFrom.jsp的结果。在整个过程中,客户端完全不了解服务器端ForwardTo.jsp的存在。 完全是一种服务器端行为。动作元素(Action Elements)5.5节概念用来提供key/value 的信息,它通常与、和 一起搭配使用。的语法有两个属性:name 和val
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026届长治市襄垣县三年级数学第二学期期末教学质量检测模拟试题含答案解析
- 2026年四川省峨眉山市高三数学下册期末考试模拟考试卷附答案(夺分金卷)
- 2026年山东省高密市高三数学下册期末考试模拟测试卷及完整答案【名师系列】
- 2026年河北省深州市高三数学下册期末考试模拟测试卷及答案【新】
- 2026年贵州省都匀市高三数学下册期末考试模拟考试卷及完整答案(易错题)
- 2026年吉林省和龙市高三数学下册期末考试模拟检测卷(能力提升)附答案
- 2026年山东省蓬莱市高三数学下册期末考试模拟考试卷附答案(A卷)
- 2026年贵州省兴义市高三数学下册期末考试模拟检测卷【考点梳理】附答案
- 电子控制节气门体:成熟市场中的结构性机会
- 矿产勘查野外工作方法
- 2025年军事理论知识竞赛试题库及答案(完整版)
- 小班美工《图形添画》课件
- 街道辅助人员笔试试题(附答案)
- 职场动物进化手册
- 银行分流引导课件
- 初中语文统编版(五四学制)六年级上册第四单元13 穷人 公开课一等奖创新教学设计
- 贫血病人疑难病例讨论
- 系统工程课件完整版
- 粤语教学课件
- 军队文职人员(中医学)科目近年考试真题(200题)
- 医学课件酸碱平衡紊乱
评论
0/150
提交评论