第4章JSP基本语法_第1页
第4章JSP基本语法_第2页
第4章JSP基本语法_第3页
第4章JSP基本语法_第4页
第4章JSP基本语法_第5页
已阅读5页,还剩76页未读 继续免费阅读

下载本文档

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

文档简介

1、第第4章章 JSP基本语法基本语法JSP语法指令元素(DIRECTIVE) 例如: 脚本元素(SCRIPTING)动作元素(ACTION) 例如: ,JSP语法分为三种不同的类型 本章学习目标: 掌握JSP的脚本元素:“隐藏注释”、“声明”、“表达式” 掌握JSP的指令元素:page、include 掌握JSP的动作元素:、 掌握include指令和的区别 掌握JSP的动作元素:、和 了解JSP的动作元素:4.1 JSP文件的结构 在传统的的网页HTML(*.htm、*.html)中加入Java程序片断,就构成了JSP网页(*.JSP)。Web服务器在遇到访问JSP网页的请求时,首先执行其中的

2、程序片断,然后将执行结果以HTML格式返回给客户端。JSP文件结构 HTML、CSS、JavaScriptXMLJSP脚本元素:声明、表达式、脚本元素:声明、表达式、Java程序程序片段(片段(Scriplets)、隐藏注释)、隐藏注释指令元素(指令元素(page、include、taglib)动作元素(动作元素(include、useBean、param、forward、setProperty、getProperty)静态部分静态部分动态部分动态部分以下是一段简单的JSP程序,其中包含了最基本的Java语法及重要的JSP网页结构。【例4-1】 第一个JSP程序helloJSP.jsp我的第一

3、个JSP程序! 4.1.1 创建第一个JSP文件 在浏览器中查看此网页,并刷新,其结果如图4-1所示。 图4-1 helloJSP.jsp执行结果4.1.2分析JSP文件的组成元素helloJSP.jsp网页例子的结构page指令这行代码为page指令,page是JSP指令元素的一种批注区块里的程序代码,程序执行的过程中,这些标识的程序代码都将被忽略。批注在程序中可有可无,然而为了程序日后便于维护,为程序加上良好的批注,是一个优秀的程序员必须养成的习惯。数据输出out对象进行指定字符串的输出。out是JSP中的默认对象,主要用来输出数据到客户端网页上。println则是out对象提供将字符串等

4、数据输出网页的方法,接受一个特定类型的参数,并且将参数的内容输出到网页上。且其中每一行完整的程序语句,均必须以分号(;)作为结束。而下面的这行代码使用的是表达式,也是脚本元素的一部分,在表达式中调用count方法,计算访问该页面的人数,并在页面上输出结果。 声明这段代码表示的是声明,这里声明了一个公有的变量number,还声明了一个共有的方法count。这里还需要注意的是,声明是脚本元素的一部分,在后面的4.2节中将详细为读者介绍脚本元素。 JSP原始代码中包含了JSP元素和Template(模板) data两类 Template data指的是JSP引擎不处理的部分,即标记以外的部分,例如代

5、码中的HTML的内容等 ,这些数据会直接传送到客户端的浏览器 JSP元素则是指将由JSP引擎直接处理的部分,这一部分必须符合JSP语法,否则会导致编译错误。 4.2 JSP的脚本元素 JSP的脚本,即Scripting Elements,包含以下4部分(1)隐藏注释(Hidden Comment) (2)声明(Declaration) (3)脚本段(ScriptLets) (4)表达式(Expression) 4.2.1隐藏注释(Hidden Comment) JSP 语法格式如下: 不发送到客户端。 注意:隐藏注释内容可以写任意字符串,但是在注释内容中不能使用“-%”,如果要使用“-%”,则

6、必须写成“-%” JSP语句中的隐藏注释镶嵌在JSP程序的源代码中,使用隐藏注释的目的并不是提醒用户,而是为了: 使程序设计人员和开发人员阅读程序方便,增强程序的可读性。 在增强程序可读性的同时,又顾及程序系统的安全性。如果用户通过Web浏览器查看该JSP页面,是看不到隐藏注释的内容的。 “隐藏注释”写在JSP程序代码中,但不发送到客户端。 【例4-2】 隐藏注释hidden-comment.jsp隐藏注释示例隐藏注释测试 将此程序执行后,可在浏览器上看到如图4-2所示结果。查看源文件,注释的语句没有显示出来。图4-2 hidden-comment.jsp页面运行效果隐藏注释和HTML注释的比

7、较 HTML注释语法格式如下: !- 注释 - 这种注释发送到客户端,但不直接显示,在源代码中可以查看到。【例4-3】 HTML注释html-notes.jspHTML注释未显示上一行的注释。HTML注释 将此程序执行后,可在浏览器上看到如图4-3所示结果。查看源文件,注释的语句会显示出来。图4-3 html-notes.jsp页面运行效果 【例4-4】比较两种注释方式comparison-notes.jspScriptlets中的注释由于Scriptlets包含Java代码,所以Java中的注释规则在Scriptlets中也适用。常用的Java注释使用“/”表示单行注释,使用“/* */”表

8、示多行注释。例如也可以这样4.2.2声明语句(Declaration) 可以在JSP页中定义方法或变量,这些方法和变量可被同一页面的其他代码访问。在大多数情况下,应该在JavaBean中定义方法,然而有时候在网页内定义方法可能更方便一些,尤其是当代码只用于一页时。 JSP 语法格式如下: 在JSP里,声明是一段Java代码,它用来定义在产生的类文件中类的属性和方法。声明后的变量和方法可以在JSP的任意地方使用,可以声明方法,也可以声明变量。注意:声明并不在JSP页内产生任何输出。它们仅仅用于定义,而不生成输出结果。要生成输出结果,应该用JSP表达式或脚本段 在声明方法或变量时,应该注意以下方面

9、: 声明必须以“;”结尾,在这一点上JSP语法中的Scriptlet语句有同样的规则,但是JSP语法中的表达式就不能以“;”结尾。 可以直接使用在中被包含进来的已经声明的变量和方法,不需要对它们重新进行声明。 一个声明仅在一个页面中有效,对于一些在每个页面都用得到的声明,最好把它们写成一个单独的文件,然后用或语句把该文件及文件中的各个元素包含进来。 由于声明不会有任何输出,因此它们往往和JSP表达式或Scriptlet结合在一起使用。 JSP的变量可以分为局部变量和全局变量,在JSP中声明变量时,要注意变量的定义域。 在程序片断中声明的变量,即在中声明的变量是JSP的局部变量,它们对外部函数是

10、不可见的。 在中声明的变量是全局变量,这种变量在整个JSP页面内都有效。因为JSP引擎将JSP页面编译成Java文件时,将这些变量做为类的成员变量,这些变量的内存空间直到服务器关闭后才释放。 在中声明的方法,该方法在整个JSP页面内有效,但是在该方法内定义的变量只在该方法内有效。 【例4-5】比较局部变量和全局变量的不同之处wellcome.jsp 【例4-6】 方法的声明dec-method.jsp 4.2.3脚本段(Scriptlets) JSP 语法格式如下: 脚本段内还能定义局部变量。 注意:脚本段内不能定义方法,这与声明不同,这是因为JSP引擎会把脚本段内的代码放到Servlet内的

11、方法内,而方法是不能被嵌套定义的。 如果要使用“%”,则必须写成“%” 一个Scriptlet能够包含多个JSP语句、方法、变量、表达式。有了Scriptlet,用户可以进行以下操作。 声明将要用到的变量或方法。 编写JSP表达式。 使用任何隐含的对象和任何用声明过的对象。 编写JSP语句 (如果使用Java语言,这些语句必须遵从Java Language Specification,即Java语言规范)。 填写任何文本和HTML标记,注意JSP元素必须在Scriptlet之外。 【例4-7】程序scriptlets.jsp混合了静态HTML代码和Scriptlet 。 注意: 如果要在Scr

12、iptlet内部使用字符“%”,必须写成“%”。 脚本段内不能定义方法,这与声明不同,这是因为JSP引擎会把脚本段内的代码放到Servlet内的方法内,而方法是不能被嵌套定义的。 4.2.4表达式(Expression) 用于在页面上输出信息,语法格式如下: 计算Java表达式得到的结果被转换成字符串,然后插入到页面。表达式值页面被请求时进行,例如: /输出系统当前时间 /输出Hello /输出9 表达式的值在执行后会被自动转化为字符串,然后显示出来。 在JSP页面中使用表达式时请注意以下两点: 不能用分号“;”作为表达式的结束符,这一点与Scriptlet不同,同样的表达式用在Scriptl

13、et中时,就需要以分号来作为一句Scriptlet语句的结尾。 有时候表达式也能作为其他JSP元素的属性值,一个表达式能够变得很复杂,它可能由一个或者多个表达式组成,这些表达式的顺序是从左到右。 注意: JSP的表达式中没有分号,除非在加引号的字符串部分才使用分号。 如Current time: 表达式实际上是被转换成out.println()方法中的内容。如: 相当于JSP页面中的: 错误4.3 JSP指令元素 JSP有三个指令元素,page,include和taglib。这些指令元素是针对JSP引擎的,并不会直接产生任何看得见的输出。它们包含在“”里。两个主要的指令是page与includ

14、e,taglib指令只有在使用标签库编程时才使用。4.3.1 Page指令 “Page”指令用于定义JSP文件中的全局属性。 JSP 语法格式如下: Language属性属性language属性用来设定编写JSP网页使用的程序语法,目前处理JSP网页服务器中的JSP引擎都只支持Java,因此这个属性的默认值为Java。 Extends属性属性 extends=“package.class”,extends属性定义了由JSP页面产生的servlet的父类,一般来说,这个属性不会用到,但是当需要实现一些特殊功能时,也是比较方便的。 Import属性属性 import属性用来指定所要加载的非预设Ja

15、va包或类 。 默认加载的包类有java.lang.*、javax.servlet.*、javax.servlet.jsp.*和javax.servlet.http.* 载入非预设包,如加载了2个包java.util.*和java.io.*,以逗号作分隔。 Session属性属性session属性的属性值可为true或false,用来设定JSP网页是否使用内建的session对象与功能,默认值为true。Session对象的类型是javax.servlet.http.HttpSession。 Buffer属性属性 设定JSP网页所使用的缓冲区大小。 缓冲区是用来暂存一些要传送給客户端的数据,默

16、认值为8kb。 设定值none,表示不使用缓冲区的功能,直接将服务器响应的输出写到客户端的浏览器上。 设定缓冲区的大小值必须大于8kb: autoFlush说确定是否自动刷新输出缓冲,如果设成true,则当输出缓冲区满的时候,刷新缓冲区而不是抛出一个异常 isThreadSafe属性属性 isThreadSafe属性的属性值可为true或false缺省值是true,用来设置JSP文件是否能多线程使用。如果被设置为true,那么多个客户请求发向JSP引擎时,可以一次被处理。JSP程序员要处理同步时共享的状态,以保证同步时确实是安全的。如果设置成false,则采用单线程模式控制客户端访问该页。 I

17、nfo属性属性 设定一个代表当前这个JSP网页的信息。 设定內容可在程序中使用getServletInfo()方法来取得。 设定info属性: contentType=“mineType” 定义MIME类型和JSP网页的编码方式 ErrorPage 设定当前网页产生例外错误时,可取得与显示这个例外错误信息的另一个网页地址: 当目前的网页发生例外错误时,网页被重定向到error.jsp ,error.jsp中可直接使用exception对象来获取相关的错误信息。 isErrorPage 用来设定网页是否可显示其它网页所产生的例外信息,此属性的默认值为false。 “”指令作用于整个JSP页面,同

18、样包括静态的包含文件。但是“”指令不能作用于动态的包含文件,比如 “”。 可以在一个页面中用上多个“”指令,但是其中的属性只能用一次,不过也有例外,那就是import属性。因为import属性和Java中的import语句类似(参照Java Language,import语句引入得是Java语言中的类),所以此属性就能多用几次。 无论把“”指令放在JSP的文件的哪个地方,它的作用范围都是整个JSP页面。不过,为了JSP程序的可读性,以及好的编程习惯,最好还是把它放在JSP文件的顶部。 【例4-8】 中文编码示范setCharset.jsp。 【例4-9】 setInfo.jsp简单示范了inf

19、o属性的设置方式。 【例4-10】 说明了出错页面pageError.jsp如何从error.jsp取得发生的错误信息。 4.3.2 include指令 include指令:向当前页中插入一个静态文件的内容。 JSP 语法格式如下: 或 include指令将会在JSP编译时插入被包含文件的内容,被包含的文件内容常常是代码段,因此代码片断的后缀名最好时以“f”(fragment的第一个字母)结尾,例如,“.htmlf”、”.jspf”等,这么做的好处是避免JSP编译器对该文件内容进行语法检查。 如果要改变filename的内容,不需重新编译JSP文件, 它的执行效率高。 include指令将会在

20、JSP编译时插入一个文件,而这个包含过程是静态的。所谓静态的是指file属性值不能是一个变量,例如,下面为file属性赋值方式是不合法的。 % include file=“”% 也不可以在file所指定的文件后添加任何参数,下面的这行代码是不合法的。 由于使用include指令,可以把一个复杂的JSP页面分成若干简单的部分,这样大大增加了JSP页面的管理性。当要对页面进行更改时,只需要更改对应的部分就可以了。 被包含文件可以是JSP文件、HTML文件、文本文件、inc文件等。如果包含的文件包含可执行代码,那么这个包含的文件的代码将会被执行。 在通常情况下把页面分成多个区,典型的JSP分区方法如

21、图所示。头部Header.jsp左边side.jsp菜单页面主体:body.jsp功能区尾部:footer.jsp版权声明等 【例4-11】 文件include.jsp中静态包含了四个文件 动作语法包括, , ,和。 4.4 JSP动作元素 分类项目功能说明JavaBean 使用JavaBean 设定JavaBean的属性值 取得JavaBean的属性值 设定传送参数 一般元素载入Java Applet或JavaBean 网页重新导向 载入HTML或JSP文件 XML(2.0新增)设定卷标属性 动态设定XML卷标主体 动态设定XML卷标 4.4.1 包含一个静态或动态文件. JSP 语法格式如

22、下:1jsp:include page=relativeURL | flush=true / 的属性1page=relativeURL | 参数为一相对路径,或者是代表相对路径的表达式。 2flush=“true” 表示缓冲区可用,缓冲区不可用时设置为false 。 例:下面的例子表示将hello.jsp包含到当前的页面中来。下面的例子表示将login.jsp包含到当前的页面中来,同时设置参数username=myvalue: 子句能让你传递一个或多个参数给动态页面。 标签允许你包含动态文件和静态文件,但是这两种包含文件的结果是不同的,如果文件仅仅是静态文件,那么这种包含仅仅是把包含文件的内容

23、加到JSP文件中去,这个被包含的文件不会被JSP编译执行。相反地,如果被包含文件是动态文件,那么这个被包含文件会被JSP编译器执行。 如果被包含文件是动态的,那么还可以用传递参数名和参数值。 JSP中include指令与include动作的区别简单说来: include指令是指把其它页面的JAVA代码(源码)加进来,跟本页面的代码合并在一起,相当于把源码从那个页面复制到本页面中来,然后再编译。并且由于本页面编译时已经包含了别的文件的源码,所以以后其它页面更改时,本页面并不理会,因为已经编译过了。 动作是指两个页面的代码运行完以后,再把包含的那个页面运行后的HTML结果页面加到本页面运行后的HT

24、ML结果页面中来。所以是运行时包含,并且还可以传递参数给被包含的页面。 【例4-12】 通过一个具体的例子来阐述动作元素的用法。文件jsp_include.jsp静态包含文件static.html,动态包含action.jsp。 和指令不同的是, 包含的内容可以是动态改变的,它在执行时才确定,而前者包含的内容是固定不变的,一经编译,就不能改变 表两种include的异同语法状态对象描述编译时包含静态JSP引擎将对所包含的文件进行语法分析运行时包含静态和动态JSP引擎将不对所包含的文件进行语法分析 主要用于将客户端的请求从一个JSP页面跳转到另一个JSP页面。 JSP 语法格式如下:1jsp:f

25、orward page=relativeURL | / 2jsp:forward page=relativeURL | jsp:param name=parameterName value=parameterValue | / (“”指可以有多个“”标记。)4.4.2 属性: 1、page=relativeURL | 这里是一个表达式或是一个字符串用于说明你将要定向的文件或URL。这个文件可以是JSP,程序段,或者其它能够处理request对象的文件(如asp,cgi,php)。 2.jsp:param name=parameterName value=parameterValue | / 向

26、一个动态文件发送一个或多个参数,这个文件必须是动态文件。如果想传递多个参数,可以在一个JSP文件中使用多个“”;“name”指定参数名,“value”指定参数值。注意 “”标签从一个JSP文件向另一个文件传递一个包 含 用 户 请 求 的request对象。“”标签以后的代码,将不能执行。 执行时查看浏览器地址栏,跳转后地址并没有发生变化。 【例4-13】 usingForward.jsp重定向到页面forwardTo.jsp可以很清楚地了解操作元素的使用方法与功能。 操作典型的使用就是登录。如进行权限验证的页面。当验证通过后,就把页面forword到登录成功的页面;当验证不通过时,就把页面f

27、orword到登录页面。 【例4-14】 login.jsp是用户登录界面,checklogin.jsp是登录验证界面,如果验证成功,它把页面forword到success.jsp页面,如果不成功,它把页面forword到login.jsp页面进行重新验证。 4.4.3 传递参数給JSP程序。 语法: 元素使用时必须要设定其name属性属性表示传递参数的名称,value属性用来设定该参数的值。 JSP操作元素和HTML不同,设定元素的属性时必须加上双引号 。 在JSP程序中以如下的程序代码来获取该参数的值。 request.getParameter(“参数名称); 操作元素的使用必须配合、以及

28、等元素。4.4.4 、 和动作 所谓JavaBean,其实是一个Java类,封装了一些常用的复杂的操作,一般可以使用JavaBean进行数据库连接、实现业务逻辑等,可以使得前台显示和后台业务逻辑更好地分离。使用JavaBean有利于代码重用,提高程序结构清晰性,这些Java类放在“WEB-INF/classes”目录内,可以使用进行实例化,并指定一个名字和作用域。 JSP 语法格式如下: optional properties tags 属 性用 法id命名引用该Bean的变量。如果能够找到id和scope相同的Bean实例,jsp:useBean动作将使用已有的Bean实例而不是创建新的实例

29、class指定Bean的完整包名scope指定Bean在哪种上下文内可用,可以取page,request,session和application四个值之一 page(是默认值)表示该Bean只在当前页面内可用(保存在当前页面的PageContext内) request表示该Bean在当前的客户请求内有效(保存在ServletRequest对象内) session表示该Bean对当前HttpSession内的所有页面都有效 application表示该Bean对所有具有相同ServletContext的页面都有效scope之所以很重要,是因为jsp:useBean只有在不存在具有相同id和sco

30、pe的对象时才会实例化新的对象;如果已有id和scope都相同的对象则直接使用已有的对象,此时jsp:useBean开始标记和结束标记之间的任何内容都将被忽略type指定引用该对象的变量的类型,它必须是Bean类的名字、超类名字、该类所实现的接口名字之一。请记住变量的名字是由id属性指定的beanName指定Bean的名字。如果提供了type属性和beanName属性,允许省略class属性属性以及用法 1id=bean_Name 在所定义的范围中确认Bean的变量,使之能在后面的程序中使用此变量名来分辨不同的Bean ,这个变量名对大小写敏感,必须符合所使用的脚本语言的规定,这个规定在Jav

31、a Language 规范 已 经 写 明 。 如 果 B e a n 已 经 在 别 的“”标记中创建,则当使用这个已经创建过Bean时,id的值必须与原来的那个id值一致;否则则意味着创建了同一个类的两个不同的对象。 2scope=page | request | session | application Bean存在的范围以及id变量名的有效范围。缺省值是page,以下是详细说明: page - 能在包含“”元素的JSP文件以及此文件中的所有静态包含文件中使用这个Bean,直到页面执行完毕向客户端发回响应或转到另一个文件为止。 request - 在任何执行相同请求的JSP文件中使用这

32、个Bean,直到页面执行完毕向客户端发回响应或转到另一个文件为止。能够使用Request对象访问这个Bean,比如request.getAttribute(bean_Name)。其中 bean_Name是Bean实例化的名字。 session - 从创建Bean开始,就能在任何使用相同session的JSP文件中使用这个Bean。这个Bean存在于整个Session生存周期内,任何在分享此Session的JSP文件都能使用同一Bean。注意在创建这个Bean的JSP文件中“”指令中必须指定“session=”true“”,否则可能会导致致命错误发生。可以使用session 对象访问Bean 。

33、session.getValue (bean_Name);其中 bean_Name是Bean实例化的名字。 application - 从创建Bean开始,就能在任何使用相同application的JSP文件中使用Bean。这个Bean存在于整个application生存周期内,任何在分享此application的Jsp文件都能使用同一Bean。能够使用application对象访问这个Bean,比如application.getAttribute(bean_Name)。其中 bean_Name是Bean实例化的名字。 3class=package.class 使用new关键字以及class构

34、造器从一个class中实例化一个bean。这个class不能是抽象的,必须有一个公用的,没有参数的构造器。这个package的名字区别大小写。 如果该Bean不在作用域内,则将它实例化。也可以使用type属性并结合class属性来指定要将何种类型的Bean实例化。如果使用类属性,不要同时指定Bean_name属性。 4 .beanName .class文件的名称、Bean包名或者包含该Bean的串行化文件(.ser文件)。仅当Bean不存在于指定的作用域时,才使用此属性。还必须使用类型属性来指定要将何种类型的Bean实例化。 BeanName属性不能与class属性一起使用。此值区分大小写。

35、5.type 如果此属性与class或者beanName属性一起使用,它指定要实例化的Bean的类或接口。如果type属性未能与class或者beanName属性一起使用,则不将新的Bean实例化,而且type属性指的是已在作用域内的Bean。此值区分大小写。 6. Properties tags 标记列表,它设置实例化的Bean的初始特性值。 设置Bean的属性值. JSP 语法格式如下:jsp:setProperty name=beanInstanceName property= * | property=propertyName“param=parameterName | propert

36、y=propertyName value=string | / 属 性用 法name该属性是必需的,它表示要设置的属性是哪个Beanproperty该属性是必需的,它表示要设置哪个属性。有一个特殊用法:如果property的值是“*”,表示所有名字和Bean属性名字匹配的请求参数都将被传递给相应属性的set方法value该属性是可选的,它用来指定Bean属性的值。字符串数据会在目标类中通过标准的valueOf方法自动转换成数字、boolean、Boolean、byte、Byte、char、Character。例如,boolean和Boolean类型的属性值(比如true)通过Boolean.v

37、alueOf转换,int和Integer类型的属性值通过Integer.valueOf转换。value和param不能同时使用,但可以使用其中任意一个param该属性是可选的,它指定用哪个请求参数作为Bean属性的值。如果当前请求没有参数,则什么事情也不做,系统不会把null传递给Bean属性的set方法。因此,可以让Bean自己提供默认属性值,只有当请求参数明确指定了新值时才修改默认属性值属性 1name=beanInstanceName 该属性对应中的id,因此name要和的id一样 。 2property=* 这是一种设置Bean属性的快捷方式。储存用户在JSP输入的所有值,用于匹配Bean中的属性。J

温馨提示

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

评论

0/150

提交评论