- JSP应用与开发技术(第3版)
- 马建红 李学相 韩颖 王瑞娟 张晗
- 2392字
- 2020-08-28 20:33:35
3.2 JSP的脚本元素
JSP语句中的JSP脚本元素(Scripting Elements)用来插入一些Java语言程序代码,这些Java语言的程序代码将出现在由当前JSP页面生成的Servlet中,用来实现一些功能。它包括隐藏注释、HTML注释、声明、脚本代码和表达式等内容。
3.2.1 隐藏注释
JSP语句中的隐藏注释(Hidden Comment)镶嵌在JSP程序的源代码中,使用隐藏注释的目的并不是提醒用户,而是为了:
使程序设计人员和开发人员阅读程序方便,增强程序的可读性。
在增强程序可读性的同时,又顾及程序系统的安全性。如果用户通过Web浏览器查看该JSP页面,将看不到隐藏注释的内容。
隐藏注释写在JSP程序代码中,但不发送到客户端。
JSP语法格式如下:
<%-- comment --%>
或
<%-- 注释 --%>
隐藏注释标记的字符在JSP编译时会被忽略,它在希望隐藏或者注释JSP程序时是非常有用的。JSP编译器不会对<%--和--%>之间的语句进行编译,且该语句也不会显示在客户端的浏览器中。
【例3-2】隐藏注释(hidden-comment.jsp)。
<%@ page contentType="text/html; charset=GBK"%> <html> <head> <title>隐藏注释示例</title> </head> <body> <h1>隐藏注释测试</h1> <%-- 这行注释将不显示在客户端的浏览器上 --%> </body> </html>
将此程序执行后,在浏览器上显示如图3-2所示的结果。查看源文件,注释的语句没有显示出来。
图3-2 hidden-comment.jsp页面运行结果
3.2.2 HTML注释
HTML注释又称为显式注释,用户能够在客户端看到注释内容。HTML注释形式如下:
<!-- 注释语句[<%=表达式%>] -->
例如:
<!-- HTML注释,用户将会看到本段注释内容-->
【例3-3】HTML注释(html-notes.jsp)。
<%@ page contentType="text/html; charset=GBK"%> <html> <head> <title>HTML注释</title> </head> <body> <!-- This file displays the user login screen --> 未显示上一行的注释。 </body> </html>
JSP语法中的HTML注释和HTML语言本身十分相似,它们都可以通过在某一JSP页面中右击,然后在弹出的快捷菜单中选择“查看源文件”命令查看其代码。
将此程序执行后,可在浏览器上显示如图3-3所示的结果。查看源文件,注释的语句会显示出来。
图3-3 html-notes.jsp页面运行结果
【例3-4】比较两种注释方式(comparison-notes.jsp)。
<%@ page contentType="text/html; charset=GBK"%> <html> <head> <title>要多加练习</title> </head> <body> <!--This page was loaded on <%= (new java.util.Date()).toLocaleString() %> --> 在源文件中包括当前时间。 <%=(new java.util.Date()).toLocaleString()%> </body> </html>
将此程序执行后,可在浏览器上显示如图3-4所示的结果。查看源文件,HTML注释中的时间会计算出结果并显示出来。
图3-4 comparison-notes.jsp页面运行结果
由于Scriptlets包含Java代码,所以Java中的注释规则在Scriptlets中也适用。常用的Java注释使用“//”表示单行注释,使用“/* */”表示多行注释。例如:
也可以这样:
3.2.3 声明
JSP中的声明(Declaration)用来定义一个或多个合法的变量(包括普通变量和类变量)和方法,并不输出任何的文本到输出流,声明的变量和方法将在JSP页面初始化时被初始化。
JSP声明的语法格式如下:
<%! declaration; [ declaration; ] ... %>
或
<%! 声明; [声明; ] ... %>
例如:
<%! int a=1; %> <%! int b; %> <%! String s="test"; %>
JSP语法中的声明语句用来声明将要在JSP中使用的变量和方法。变量和方法必须要声明,否则就会出错。可以一次声明多个变量和方法,只要以“;”结尾即可,而且必须保证这些声明在Java中是合法的。
在声明方法或变量时,应注意以下方面:
声明必须以“;”结尾,在这一点上与JSP语法中的Scriptlet语句有同样的规则,但是JSP语法中的表达式不能以“;”结尾。
可以直接使用在<%@ page %>中被包含进来的已经声明的变量和方法,不需要对它们重新进行声明。
一个声明仅在一个页面中有效,对于一些在每个页面都用得到的声明,最好把它们写成一个单独的文件,然后用<%@ include %>或<jsp:include >语句把该文件及文件中的各个元素包含进来。
由于声明不会有任何输出,因此它们往往和JSP表达式或Scriptlet结合在一起使用。
例如下面代码定义了变量a和变量b:
<%! int a= 2; int b= 3; %>
输出a与b的乘积为:
<%= a*b %>
JSP的变量可以分为局部变量和全局变量,在JSP中声明变量时,要注意变量的定义域。
在程序片段中声明的变量,即在<%…%>中声明的变量是JSP的局部变量,它们对外部函数是不可见的。
在<%!…%>中声明的变量是全局变量,这种变量在整个JSP页面内都有效。因为JSP引擎将JSP页面编译成Java文件时,将这些变量作为类的成员变量,这些变量的内存空间直到服务器关闭后才释放。
在<%!…%>中声明的方法在整个JSP页面内有效,但是在该方法内定义的变量只在该方法内有效。
【例3-5】比较局部变量和全局变量的不同之处(welcome.jsp)。
执行此程序,并且不断地刷新页面,可以看到全局变量Num随着刷新不断增大,而局部变量count始终是1,可在浏览器上显示如图3-5所示的结果。
图3-5 welcome.jsp页面运行结果
【例3-6】方法的声明(dec-method.jsp)。
在这个实例中声明计算圆的面积和周长的两种方法,根据从表单提交圆的半径调用这两种方法进行计算。
在表单中输入半径的值,单击“开始计算”按钮,程序执行显示结果,如图3-6和图3-7所示。
图3-6 输入半径为3
图3-7 dec-method.jsp页面计算并显示结果
3.2.4 脚本代码
JSP中的脚本代码(Scriptlets)是一段Java程序代码,这些代码在请求处理时在服务器端按顺序执行,脚本代码中如果使用了out对象,则会在客户端显示输出内容。
脚本代码的语法格式如下:
<% code fragment %>
或
<% 代码 %>
一个Scriptlet能够包含多个JSP语句、方法、变量、表达式。有了Scriptlet,用户可以进行以下操作:
声明将要用到的变量。
编写JSP表达式。
使用任何隐含的对象和任何用<jsp:useBean>声明过的对象。
编写JSP语句(如果使用Java语言,这些语句必须遵从Java Language Specification,即Java语言规范)。
填写任何文本和HTML标记,注意JSP元素必须在Scriptlet之外。
当JSP收到客户的请求时,Scriptlet就会被执行,如果Scriptlet有显示的内容,这些显示的内容就可以存放在out对象中。
<% String t = "test"; out.println(t); %>
Scriptlet中的代码将被照搬到Servlet内,而Scriptlet前面和后面的静态HTML代码将被转换成println语句。这就意味着,Scriptlet内的Java语句并非一定要完整,没有关闭的块将影响Scriptlet外的静态HTML。
【例3-7】程序scriptlets.jsp混合了静态HTML代码和Scriptlet,程序运行结果如图3-8所示。
图3-8 scriptlets.jsp页面运行结果
注意
• 如果要在Scriptlet内部使用字符“%>”,必须写成“%\>”。
• 脚本段内不能定义方法,与声明不同,这是因为JSP引擎会把脚本段内的代码放到Servlet的方法内,而方法是不能被嵌套定义的。
3.2.5 表达式
JSP能够计算表达式(Expression),并向JSP页面输出表达式的运算结果。其语法格式如下:
<%= expression %>
或
<%= 表达式 %>
表达式元素表示的是一个在Java脚本语言中被定义的Java表达式,在运行后被自动转换成字符串,然后插入到表达式所在JSP文件的位置显示。表达式在运行时进行计算(页面被请求时),因此可以访问和请求有关的全部信息。例如:
<%= new java.util.Date() %>//输出系统当前时间 <%= "Hello" %> //输出Hello <%= 1+3+5 %> //输出9
在JSP页面中使用表达式时应注意以下两点:
不能用分号(;)作为表达式的结束符,这一点与Scriptlet不同,同样的表达式用在Scriptlet中时,就需要以分号来作为一个Scriptlet语句的结尾。
有时表达式也能作为其他JSP元素的属性值,一个表达式能够变得很复杂,它可能由一个或者多个表达式组成,这些表达式的顺序是从左到右。
注意
• JSP的表达式中没有分号,除非在加引号的字符串部分才使用分号。
• 表达式实际上是被转换成out.println()方法中的内容。如<%= "hello world "%>相当于JSP页面中的<%out.println("hello world "); %>。