首页 理论教育JavaWeb应用开发:JSP声明测试

JavaWeb应用开发:JSP声明测试

【摘要】:完成本任务所用到的主要知识点:JSP 声明与ScriptletJSP 运行机制声明中定义的变量与Scriptlet 中定义的变量有何区别?JSP 声明用于声明变量和方法,实际上JSP 声明将会转换成Servlet 的成员变量或成员方法。建立JSP 文件test.jsp,其代码如下。在JSP 声明中定义的三个方法get()、getCurrentTime()和sayHello()方法都成为了test_jsp 类的成员方法。图上机4.10打开另一个浏览器窗口访问该JSP 页面

完成本任务所用到的主要知识点:

➢ JSP 声明与Scriptlet

➢ JSP 运行机制

声明中定义的变量与Scriptlet 中定义的变量有何区别?Scriptlet 中能定义方法吗?若Scriptlet 中能定义方法,那么它和声明中定义的方法有何区别?请编写一个JSP 页面来测试在JSP 声明与Scriptlet 中定义的变量和方法的区别。

JSP 声明用于声明变量和方法,实际上JSP 声明将会转换成Servlet 的成员变量或成员方法。而Scriptlet 中的所有代码将会被嵌入Servlet 的一个局部方法中,所以在Scriptlet 中是不能定义方法的,且定义的变量是局部变量。那么怎么才能测试出这个区别呢?其实只需查看JSP 运行后转换的Servlet 类即可。

(1)建立项目sj5_2。

(2)建立JSP 文件test.jsp,其代码如下。

(3)测试运行。发布sj5_2 项目,运行test.jsp 页面。

打开JSP 转换后的Servlet 类文件test_jsp.java,将看到如下代码。(www.chuimin.cn)

从代码中可以看出,在JSP 声明中定义的count 变量成为了test_jsp 类的成员变量,而在Scriptlet 中定义的local_count 变量成为了_jspService()方法中的一个局部变量。在JSP 声明中定义的三个方法get()、getCurrentTime()和sayHello()方法都成为了test_jsp 类的成员方法。而在Scriptlet 中定义方法是不能通过编译的,即在Scriptlet 中是不能定义方法的。

在浏览器中测试该页面时,可以看到正常输出了count 值,每访问一次,count 值将加1,而local_count 变量的值始终是1,同时也可以看到正常输出了sayHello()方法的返回值。例如第一次访问test.jsp 页面,如图上机4.8 所示。

图上机4.8 第一次访问

同一客户端第二次访问test.jsp 页面的效果如图上机4.9 所示。

图上机4.9 同一客户端第二次访问

打开多个浏览器,甚至可以在不同的机器上打开浏览器来刷新该页面,将发现所有客户端访问的count 值是连续的,即所有客户端共享了同一个count 变量,如图上机4.10所示。这是因为JSP 页面会编译成一个Servlet 类,每个Servlet 在容器中只有一个实例;在JSP 中声明的变量是成员变量,成员变量只在创建实例时初始化,该变量的值将一直保存,直到实例销毁。

图上机4.10 打开另一个浏览器窗口访问该JSP 页面