Java EE 程序设计
上QQ阅读APP看书,第一时间看更新

4.3 脚本

JSP脚本是<%与%>之间用Java语言编写的代码块。代码块必须完全符合Java语法,但可以配合使用HTML文本。这些Java代码最终转换为Servlet的一部分。一个JSP页面可以包含任意多个脚本。

4.3.1 输出表达式

<%=表达式%>输出表达式的计算结果。表达式中的变量必须是前面已声明过的变量。

注意:%与=之间不能有空格且表达式后面不需要分号。

依照4.2节介绍的操作步骤向Web应用JspBasic中添加JSP页面expression.jsp。完整代码如程序4-2所示。

程序4-2:expression.jsp

    <%@ page language="java" pageEncoding="GB2312" %>
    <%@ page contentType="text/html; charset=gb2312" %>
    <! DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
    <html>
    <head>
    <title>JSP表达式</title>
    </head>
    <body bgcolor="#FFFFFF">
    <% for(int i=1; i<=5; i++){%>
    <H<%=i%>>你好</H<%=i%>><BR>
    <%}%>
    </body>
    </html>

程序说明:JSP脚本代码可以与HTML代码混杂在一起。JSP脚本代码可用来控制脚本产生动态内容。这里通过表达式<%=i%>动态生成HTML标记H1~H5来控制字符串"你好"的显示效果。

保存程序并重新发布Web应用,打开IE浏览器,在地址栏输入http://localhost:8080/JspBasic/expression.jsp,得到如图4-4所示的运行结果页面。

图4-4 输出表达式

4.3.2 注释

在JSP页面中有两种类型的注释。

(1)输出到客户端的注释:<! -comment->。

(2)不输出到客户端的注释:<%--comment--%>。它表示是JSP注释,在服务器端将被忽略,也不转化为HTML的注释,在客户端查看源码时是看不到的。这种注释一般是开发人员用来实现对程序代码的说明,但同时又防止在客户端看到,可有效保护代码的安全性。

在expression.jsp中添加注释,代码如程序4-3所示。重新发布Web应用后,在客户端浏览器地址栏输入http://localhost:8080/JspBasic/expression.jsp。在运行结果页面上右击,选择“查看源代码”命令来查看页面源代码,源代码如程序4-4所示,可以看到源代码中不包含<%--comment--%>类型的注释。

程序4-3:expression.jsp(添加注释后)

    <%@ page language="java" pageEncoding="GB2312" %>
    <%@ page contentType="text/html; charset=gb2312" %>
    <! DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
    <html>
    <head>
    <title>JSP表达式</title>
    </head>
    <body bgcolor="#FFFFFF">
    <! -客户端可以看到的注释->
    <% for(int i=1; i<=5; i++){%>
    <H<%=i %>>你好</H<%=i%>><BR>
    <%}%>
    <%--客户端看不到的注释--%>
    </body>
    </html>

程序4-4:expression.jsp的客户端源代码

    <! DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
    <html>
    <head>
    <title>JSP表达式</title>
    </head>
    <body bgcolor="#FFFFFF">
    <! -客户端可以看到的注释->
    <H1>你好</H1><BR>
    <H2>你好</H2><BR>
    <H3>你好</H3><BR>
    <H4>你好</H4><BR>
    <H5>你好</H5><BR>
    </body>
    </html>

4.3.3 声明变量、方法、类

在JSP脚本中可以声明Java变量、方法和类。

1.声明变量

格式:

        <%!声明代码%>

为演示如何声明变量,向Web应用JspBasic中添加页面statement_vary.jsp。页面代码如程序4-5所示。

程序4-5:statement_vary.jsp

    <%@ page language="java" pageEncoding="GB2312" %>
    <%@ page contentType="text/html; charset=GB2312" %>
    <HTML>
    <! DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
    <head>
    <title>声明变量</title>
    </head>
    <BODY ><FONT size=5>
     <%i++;  %>
    <P>您是第 <%=i%>个访问本站的客户。</p>
    <%! int i=0; %>
    </BODY>
    </HTML>

程序说明:JSP声明变量的作用域为整个页面。也就是说,在整个页面的范围内都可以访问声明的变量。因此将变量声明<%! int i=0; %>放在变量引用<%i++; %>之后,程序照样正确运行。

前面提到过,JSP页面在运行时是被编译成Servlet来运行的。在3.2节讲过,Servlet在运行期间在服务器的容器内部只有一个实例在运行,对于不同的客户端请求,产生不同的线程来响应。因此JSP页面中声明的变量,也称为组件的全局变量。对变量的任何修改都会影响到所有访问此页面的客户端。

重新发布Web应用后,在客户端浏览器地址栏输入http://localhost:8080/JspBasic/statement_vary.jsp。当第一次请求此页面时,运行结果如图4-5所示,页面提示客户端是第1个访问页面的用户。而当刷新页面或从另外一台机器请求页面时,程序运行结果如图4-6所示,页面提示客户端是第2个访问页面的用户,这是因为经过第1次请求,页面中声明的全局变量的值已经变成1而不再是0。

图4-5 第1次请求页面运行结果

图4-6 第2次请求页面运行结果

注意:%与!之间不能有空格。另外,除了4.3.1节介绍的Java表达式外,其他的Java脚本代码都必须以分号结尾。而Java表达式绝不能以分号结尾。这一点必须牢记。

2.声明方法

格式:

    <%! 声明代码 %>

说明:该方法在整个JSP页面有效,但该方法内定义的变量只在该方法内有效。

下面向Web应用JspBasic中添加页面statement_Hello.jsp来演示如何在脚本中声明方法。完整代码如程序4-6所示。

程序4-6:sayHello.jsp

    <%@ page language="java" %>
    <%@ page contentType="text/html; charset=GB2312" %>
    <! DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
    <html>
    <head>
    <title>声明方法</title>
    </head>
    <body bgcolor="#FFFFFF">
    <%! StringsayHello()
          { return "Hello";
          }
        %>
      <%=sayHello()%>
    </body>
    </html>

程序说明:首先在脚本中声明一个方法sayHello()来返回一个字符串,然后调用方法来获取执行结果。

保存程序并重新发布Web应用,打开IE浏览器,在地址栏中输入http://localhost:8080/JspBasic/statement_vary.jsp,得到如图4-7所示的运行结果页面。

图4-7 方法声明页面运行结果

3.声明类

格式:

    <%! 声明代码 %>

脚本中声明的类在JSP页面内有效。下面向JspBasic应用中添加页面statement_class.jsp来演示如何在脚本中声明类。完整代码如程序4-7所示。

程序4-7:statement_class.jsp

    <%@ page language="java" %>
    <%@ page contentType="text/html; charset=GB2312" %>
    <! DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
    <html>
    <head>
    <title>声明类</title>
    </head>
    <body bgcolor="#FFFFFF">
    <%! public class sayHello
            {boolean county ;
              sayHello(boolean county)
                {this.county=county;
                }
            String Hello()
                {
                if(county)
                return "Hello";
                else return "你好";
                }
            }
      %>
    <% sayHello a =new sayHello(false); %>
    <%=a.Hello()%>
    </body>
    </html>

程序说明:首先在脚本中声明一个类sayHello,此类具有一个名称为Hello的方法,用来返回一个提示信息。在随后的代码中,生成类sayHello的实例,并且调用类的Hello方法来获取提示信息。

保存程序并重新发布Web应用,打开IE浏览器,在地址栏中输入http://localhost:8080/JspBasic/statement_class.jsp,得到如图4-8所示的运行结果页面。

图4-8 类声明页面运行结果

可以看到,在JSP脚本中变量、方法、类的声明和使用与Java语言编程完全一致。