第三章 jsp_第1页
第三章 jsp_第2页
第三章 jsp_第3页
第三章 jsp_第4页
第三章 jsp_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第三章第三章JSP语法语法主讲教师:姚俊兵第三章第三章JSP语法语法l什么是JSP?JSP页面HTML,SERVLET,JSP的用例对比JSP还是Servlet ?lJSP的架构模型Model 1,JSP 1层架构Model 2,JSP 2层架构lJSP语法元素JSP语法元素JSP标签类型l使用JSP重用Web组件 lJSP页面一个JSP页面就是指的包含Java代码和HTML标签的web页面 同时它也是一个服务器包含的技术,单纯的HTML页面只是把标签静态的渲染到浏览器,而JSP中的Java代码由服务器处理产生单纯的HTML文本数据而发送到客户端 JSP规范列出了JSP页面中使用到语法及各种语

2、义元素,这些元素就是JSP标签一个JSP页面就是一个混合了动态JSP标签和静态HTML标签的HTML模板。在运行时,模板被用来生成单纯的HTML页面,发送到客户端 l什么是JSP?第三章第三章JSP语法语法lHTML,SERVLET,JSP的用例对比使用HTML,SERVLET,JSP三种技术来比较用Hello来向访问者打招呼的例子Hello User l什么是JSP?第三章第三章JSP语法语法lJSP还是Servlet ?Q1:JSP在第一次运行时,会被容器翻译成相应的servlet,这会不会造成JSP速度比servlet 运行慢?Q2:而在编写页面时,JSP却比 servlet省事的多,是

3、不是 servlet 就不适合WEB编程呢? 首先,JSP是存在第一次执行速度慢的问题,但是执行完第一次后,跟servlet 就没有不同 其次,servlet 编写一个简单的页面就得 out.print N次,的确繁琐,但不代表不适合WEB编程,它可以很方便的处理业务逻辑,比如,addUser到数据库,标准的java代码结论,在一个WEB系统中,通常是servlet 和JSP的结合使用 l结合要点结合要点:JSP页面是用来可视化展现的,比如,操纵页面页面是用来可视化展现的,比如,操纵页面 业务逻辑处理却是业务逻辑处理却是servlet的强项的强项JSP Model 2的基础 l什么是JSP?第

4、三章第三章JSP语法语法lJSP的架构模型l什么是JSP?第三章第三章JSP语法语法Model 1,JSP 1层架构Model 2,JSP 2层架构第三章第三章JSP语法语法lJSP语法元素及标签类型l什么是JSP?元素类别所含元素JSP 标签类型简短描述标签语法Directives指令集pageincludetaglibDirective指定JSP引擎翻译时的指令Declarations声明Java变量,方法的声明定义Declaration声明和定义方法和变量Scriptlets脚本ConditionalIterationScriptlet允许开发者在JSP页面中自由编写Java代码Expr

5、essions表达式Expression作为JSP页面输出HTML代码的便捷方式Actions动作jsp:includejsp:forwardjsp:useBeanjsp:setPropertyjsp:getPropertyjsp:pluginAction向JSP引擎发出提供请求时的指令Comments注释Comment用于文档和注释JSP代码XML-based syntaxXML格式的JSP语法count+; lJSP语法元素及标签类型案例l什么是JSP?第三章第三章JSP语法语法lJSP指令-directivespage 指令:page指令通知JSP引擎证实关于JSP页面的所有属性。这个指

6、令并不仅仅应用在声明它的页面,而是作用于整个翻译单元。include 指令:include指令告诉JSP引擎在当前页面包含其它web组件(HTML,JSP等)。taglib 指令用来关联一个已知的taglib配置文件的前缀。 l什么是JSP?第三章第三章JSP语法语法lJSP页面之page指令l什么是JSP?第三章第三章JSP语法语法lJSP页面之page指令import 属性l书写格式(2种)l隐含导入的包,也就是不必再显式导入的包l注意点可以出现多次import属性,这个是page指令中的唯一特例重复导入的包会被忽略l什么是JSP?第三章第三章JSP语法语法java.lang.*, jav

7、ax.servlet.*, javax.servlet.jsp.*, javax.servlet.http.*12l什么是JSP?第三章第三章JSP语法语法lJSP页面之page指令errorPage和isErrorPage属性lJSP页面处理异常的机制普通的try-catch块使用errorPage和isErrorPage属性errorPage也可以是error.htm,但是无法处理出错信息而已l什么是JSP?第三章第三章JSP语法语法lJSP页面之page指令language、extends和info属性l说明页面上的声明,脚本和表达式用的语言,只有java可用lextends属性指定页面

8、生成的servlet的父类用来定制容器生成的JSP对应的servlet类的特性该属性基本上用不到linfo属性,info属性允许我们为生成的servlet的getServletInfo()方法返回的字符串。l什么是JSP?第三章第三章JSP语法语法lJSP页面之page指令buffer和autoFlush属性lbuffer属性,buffer属性指明在生成的内容发送到客户端前的输出缓冲区的最小值,JSP规范指定最小为8kb(只能是kb后缀),如果不用缓冲而直接发送数据到客户端,可设置为 none。lautoFlush属性,autoFlush属性指明一旦缓冲区满缓冲区的数据是否自动发送到客户端。默

9、认值是true。如果设为false,一时缓冲区满,再向缓冲区输出数据就会报出异常。l下列组合就是非法的:翻译成servlet时出错 运行时出错 l什么是JSP?第三章第三章JSP语法语法lJSP页面之page指令contentType和pageEncoding属性 lcontentType属性指明输出的MIME类型和字符编码MIME的默认值为text/html;字符编码的默认值为ISO-8859-1。MIME和字符编码之间用分号;隔开 等价于在servlet中写:response.setContentType(text/html;charset=ISO-8859-1);lpageEncodin

10、g属性指明JSP页面所使用的编码。默认值为ISO-8859-1。中文编码:gb2312,gbklJSP语法元素:Declarations (声明)声明就是在JSP页面中声明和定义变量和方法。声明总是以结尾。 l什么是JSP?第三章第三章JSP语法语法 定义一个count变量,并赋初值0。声明:变量仅在JSP引擎第一次装载页面的时候初始化一次(仅一次),而在接下来的客户端请求中使用该变量的值。两种使用方式等价lJSP语法元素:Scriptlets (脚本)脚本就是嵌套在JSP页面中的Java代码片段。总是以结尾。也得是Java合法语句l什么是JSP?第三章第三章JSP语法语法 脚本每次页面访问都

11、会执行一次,所以count变量每请求一次就会增一% out.print(); count+; out.print(Welcome! You are visitor number + count); out.print();%脚本主要用来嵌套JSP页面的业务逻辑,当然也可以使用脚本来输出HTML语句 lJSP语法元素:Expressions (表达式)表达式就是Java语言中的表达式,表达式也是每次页面访问都执行一次,它的值就被嵌套在输出的HTML语句中。总是以结尾l什么是JSP?第三章第三章JSP语法语法比如: Welcome! You are visitor number 使用表达式,可以输

12、出任何对象或者任何基本数据类型(int, boolean, char等)到输出流。当然也可以打印任何数学运算结果或者布尔表达式或者调用方法的返回值第三章第三章JSP语法语法lJSP语法元素:Expressions (表达式)合法的合法的JSP表达式表达式表达式解释说明输出一个整数一个数学表达式一个布尔变量一个布尔值一个布尔表达式一个返回char类型的方法调用一个返回double值的方法一个指向一个Vector对象的引用变量返回一个float值的方法返回一个float值的方法返回一个String对象的方法l什么是JSP?针对如下声明片段,分析一下合法及不合法的表达式使用 非法的非法的JSP表达式

13、表达式表达式解释说明表达式中不能使用分号;%= int i = 20 %表达式中不能出现任何定义方法没有任何返回值,返回类型是void第三章第三章JSP语法语法lJSP语法元素:Actions (动作)动作是对JSP引擎发出的命令。它们指明引擎在执行页面时执行特定的任务。比如,下面的代码命令引擎在当前输出的JSP页面中包含另外一个JSP页面,copyright.jsp的输出内容。l什么是JSP? jsp:include jsp:forward jsp:useBean jsp:setProperty jsp:getProperty jsp:plugin 标准的JSP动作共6个头两个动作,jsp:

14、include和jsp:forward,使得JSP页面能够重用其它的web组件,参考重用web组件部分。接下来的三个,jsp:useBean, jsp:setProperty和jsp:getProperty用于JSP页面的JavaBeans,参考使用JavaBeans部分最后一个动作,jsp:plugin指明JSP引擎对于嵌套的客户端组件,如applets生成合适的HTML代码。除了这6个标准的动作,JSP页面还可以使用用户自定义的动作,也就是自定义标签(custom tags也就是自定义动作custom actions)。参考自定义标签部分 第三章第三章JSP语法语法lJSP语法元素:Com

15、ments (注释)注释从不会影响JSP页面的输出,但对于文档却是非常有帮助的。l什么是JSP?标准的JSP动作共6个语法如下:几种注释语句Welcome!不会输出到产生的HTML页面, 也不会生成到servlet不会输出到产生的HTML页面,到servlet输出到产生的HTML页面,到servlet第三章第三章JSP语法语法lJSP页面就是页面就是servlets 尽管JSP页面看上去更像HTML页面,但它实际上却是可执行的servlet。JSP引擎语法分析JSP文件,创建相应的Java文件。该文件根据JSP文件的相应元素声明于之对应各成员的映射servlet类。JSP引擎编译这个类,把它载

16、入内存,接着就以可执行的servlet来运行,随之把servlet的输出发送到客户端 lJSP页面生命周期页面生命周期第三章第三章JSP语法语法l理解翻译单元理解翻译单元 翻译单元示意图翻译单元示意图lJSP页面生命周期页面生命周期第三章第三章JSP语法语法l理解翻译单元理解翻译单元 概念及要点概念及要点lJSP页面生命周期页面生命周期概念:就像HTML可以包含其它HTML页面(比如,使用框架frames),JSP页面也可以包含其它JSP页面的内容和静态HTML页面。这可由include指令完成。需要记住的最重要一点就是,在此时JSP引擎为JSP页面生成Java代码,同时也把包含的页面内容插入

17、到生成的servlet类中。用于翻译到单一servlet类的一系列页面就称为一个翻译单元 对于翻译单元要时刻记住的几点:page指令,即页面指令会影响整个翻译单元在同一个翻译单元中一个变量的声明不能出现多次。比如,我们不能在使用include指令被包含的页面中定义一个已经在包含页面中定义过的变量,因为这两个页面属于同一个翻译单元标准的动作不能在同一个翻译单元中定义同一个bean多次。参考使用JavaBeans部分 第三章第三章JSP语法语法lJSP生命周期各阶段生命周期各阶段lJSP页面生命周期页面生命周期阶段描述工作内容Page translation 页面翻译分析页面,生成相应的servl

18、etJava文件读取JSP页面,分析,验证使用tag的语法,还要验证的工作:l指令集和标准动作的属性值对的合法性l同一个JavaBean名称在同一个翻译单元中不能超过一次l如果使用自定义标签库,确保该库是合法的l自定义标签的使用是有效的Page compilation页面编译编译生成的Java文件校验JSP页面中使用的Java代码的合法性Load class装载类装载编译好的类文件跟servlet的生命周期过程非常类似,只不过jsp生成的servlet有其自己的业务方法来对应,比如:_jspService()方法对应service()方法Create instance创建类实例Servlet类

19、实例被创建Call jspInit()调用jspInit()方法这个方法会在其它任何方法可初始化前调用Call _jspService()调用_jspService()方法每个请求都会调用这个方法Call jspDestroy()调用jspDestroy()方法这个方法在servlet容器不再使用该servlet服务时调用第三章第三章JSP语法语法lJSP生命周期示例生命周期示例lJSP页面生命周期页面生命周期翻译后的servlet文件第三章第三章JSP语法语法l理解翻译过程理解翻译过程 JSP引擎分析翻译JSP元素为servlet代码所遵循的规则: lJSP页面生命周期页面生命周期1、JSP

20、引擎在翻译阶段使用一些指令集来产生Java代码。 比如,在生成的servlet类中,page指令的import属性就是用来帮助生成import语句,而info属性帮助实现getServletInfo()方法。一些属性仅用来对引擎指明页面的全局属性;如,language 指明引擎使用Java作为脚本语言,pageEncoding属性指明引擎当前页面的字符编码。2、所有JSP声明都将成为产生的servlet类的一部分代码。 它们只是从页面照搬到servlet类。因此,JSP中声明的变量成为servlet类中的实例变量,JSP中声明的方式就成为了servlet类中的实例方法。3、所有JSP脚本都成为

21、生成servlet类中的_jspService()方法的一部分代码。 它们也只是照搬而已。因此,脚本中声明的变量成为_jspService方法的局部变量。脚本中是不允许定义方法的,对吧,在Java编程中无法在方法里面再嵌套方法。4、所有JSP表达式都成为生成servlet类中的_jspService()方法的一部分代码。 它们被out.print()方法使用。5、所有JSP动作被供应商提供的相应类代替。6、所有JSP注释被忽略。7、任何其它文本都成为生成servlet类中的_jspService()方法的一部分代码。它们被out.write()方法使用。这样的文本也叫模板文本。 会导致编译失败

22、http:/localhost:8080/counter/counter.jsp?jsp_precompile=true(预编译预编译jsp)第三章第三章JSP语法语法l理解翻译过程理解翻译过程 之 遵循规则的影响一lJSP页面生命周期页面生命周期使用脚本元素 脚本元素,由于声明,脚本,表达式都允许在JSP页面中编写脚本式语言代码,被统称为脚本元素。使用Java语言作为脚本语言,结果呢,脚本元素的代码行为要遵循Java编程语言编译时期和运行时期的规范。 声明的顺序 Java类中的声明顺序是可以随意的,由此JSP页面声明中的变量和方法的顺序也是无关的。 第三章第三章JSP语法语法l理解翻译过程理

23、解翻译过程 之 遵循规则的影响二lJSP页面生命周期页面生命周期脚本代码的顺序 由于脚本成为生成servlet类的_jspService()方法中的一部分,所有的脚本变量都成为该方法的局部变量,这样它们出现的顺序就变得极为重要。 变量初始化:Java中实例变量会被自动初始化为默认值,而局部变量在使用前必须显示初始化才可。同样的JSP中的声明变量会被初始化为默认值,而JSP脚本声明的变量在它们使用前必须被显示的初始化。正确写法:第三章第三章JSP语法语法l理解翻译过程理解翻译过程 之 遵循规则的影响三lJSP页面生命周期页面生命周期使用条件和循环语句一 脚本就是用来处理业务逻辑,最常用的逻辑无非

24、条件语句和循环语句。与之相对应的JSP和HTML混合代码 第三章第三章JSP语法语法l理解翻译过程理解翻译过程 之 遵循规则的影响三lJSP页面生命周期页面生命周期使用条件和循环语句二 脚本就是用来处理业务逻辑,最常用的逻辑无非条件语句和循环语句。容易犯的错误翻译后正确写法 循环语句第三章第三章JSP语法语法l理解翻译过程理解翻译过程 之 遵循规则的影响四lJSP页面生命周期页面生命周期使用请求时属性表达式 用于这种方式传值给动作属性的表达式,称为请求时属性表达式。jsp:include page= /在这种情况下,表达式不再输出,而是在请求时把值传到jsp:include动作的page属性中

25、。% page buffer= % include file= %必须牢记的是: 这种请求时提供值的机制不能套用到指令集。 为什么呢?指令集只有翻译时的语义,这也就意味着JSP引擎只有在页面翻译时用得到指令集。所以下面是非法的使用:第三章第三章JSP语法语法l理解翻译过程理解翻译过程 之 遵循规则的影响五使用转义字符序列正如其它任何编程语言,JSP脚本语言也有一些用于JSP引擎分析的关键字符。这些字符包括:单引号,双引号,反斜杠,还有字符序列%, %!, %= , , 。如果需要把这些字符当作普通字符来使用,需要在其前面加上反斜杠,以便告诉分析器不是特殊字符。分几种情况:l在模板文本中l在脚本

26、元素中 l在属性中 l不被浏览器正确解释的标签,可以使用其ascii码 lJSP页面生命周期页面生命周期第三章第三章JSP语法语法l理解翻译过程理解翻译过程 之 遵循规则的影响五使用转义字符序列在模板文本中JSP中所有的脚本元素都是以%字符作为标签开始的声明(%!),脚本(%)和表达式(%=),JSP分析器就会寻找字符序列%作为JSP标签的开始,所以,在文本中使用%就得使用反斜杠()来避免与字符%关键字符冲突。lJSP页面生命周期页面生命周期The opening tag of a scriptlet is 既然是文本了,JSP引擎还会分析%吗? 当然不会。Out.write()出来 第三章第

27、三章JSP语法语法l理解翻译过程理解翻译过程 之 遵循规则的影响五使用转义字符序列在脚本元素中所有的脚本元素都必须以%标签结束。一旦读到标签头,分析器就会寻找%作为结束标签。如果想在脚本元素中显示%就得使用来转义 lJSP页面生命周期页面生命周期%= The opening tag of a scriptlet is % 同样的%并没有使用转义字符,因为它已经在分析器的表达式中的中间了。Out.print ()出来 第三章第三章JSP语法语法l理解翻译过程理解翻译过程 之 遵循规则的影响五使用转义字符序列在属性中在属性中使用这些关键字符,都得进行转义 lJSP页面生命周期页面生命周期% pag

28、e info=A sample use of , , , characters. %对于使用单引号来写属性的值,则要对单引号进行转义% page info=A sample use of , , , characters. %X jsp:include page= /jsp:include page= / jsp:include page= / 修正为:第三章第三章JSP语法语法l理解翻译过程理解翻译过程 之 遵循规则的影响五使用转义字符序列不被浏览器正确解释的标签,可以使用其ascii码 不被浏览器正确解释的标签,可以使用其ascii码 ,同样可以进行转义 ,对于任何一个关键字符都适用。lJ

29、SP页面生命周期页面生命周期The opening tag of a scriptlet is <%The closing tag of a scriptlet is %>同样也可以避免与关键字符(任何)的冲突 第三章第三章JSP语法语法l使用JSP重用Web组件 在JSP的世界中,重用web组件无非就是包含内容或者在JSP页面中输出另外一个组件 静态重用l静态包含重用就是在JSP文件翻译时期把另外JSP文件的web组件包含进来,生成一个servlet 类文件。动态重用l动态包含重用就是在JSP页面在请求时期把另外JSP页面的web组件包含进来,输出。l使用使用JS

30、P重用重用Web组件组件 第三章第三章JSP语法语法l静态包含 静态包含的语法: l使用使用JSP重用重用Web组件组件 第三章第三章JSP语法语法l静态包含 从被包含的文件中访问变量l既然被包含的页面代码成为了包含页面的一部分,所以在每个页面中定义的变量和方法都可以被其它的页面访问(如果被包含页面和包含页面定义了一个同名变量,翻译就会出错),也可以一个页面定义,其它页面使用 静态包含所造成的影响,也就是要遵守的规则l由于在翻译时期不会处理任何业务,这就意味着,file属性的值不能是一个表达式(没有执行嘛,只是翻译成java文件而已),所以下面这种使用方法是非法的。l由于请求参数是请求的一部分

31、,故在翻译时期请求对请求参数也是一无所知的,所以file属性的值不能传递任何参数到被包含的页面。基于此,使用下面的方式也是不合法的。l被包含的文件有可能无法被单独编译通过(被包含的文件或者包含的文件里面定义变量,而另外一方使用变量而不需要再定义)。当然,避免页面之间依赖的最好方式就是使用隐含pageContext的pageContext.setAttribute()和pageContext.setAttribute()方法来共享静态包含页面间的对象l使用使用JSP重用重用Web组件组件 第三章第三章JSP语法语法l动态包含 动态包含的语法: 语法中的page属性是必填的。它也必须是一个相对URL,它可以指向一个静态的抑或动态的web组件,包括可以是Servlet。也可以是一个请求时的表达式,比如:jsp:include page= / l使用使用JSP重用重用Web组件组件 第三章第三章JSP语法语法l动态包含 使用 jsp:includel使用使用JSP重用重用Web组件组件 由于的语义和RequestDispatcher.include()方法是等价的,故

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论