JSP教程基础之脚本的使用

开发 后端
本节JSP教程将向您介绍使用脚本方面的各种情况,包括如何增加脚本、用标签组合脚本、如何运行脚本示例等。

在有些地方,你大概要加一些好的,成熟的程序到你的JSP页里,JSP的标签虽然很强大,但是完成某些工作还是比较费力的困难的。这时你可以使用脚本语言段来补充JSP标签。
 
使用的JSP引擎是支持脚本语言的,SUN的JSP参考文说明,必须使用Java程序语言来编写脚本,但是其他第三方的JSP引擎允许使用其他语言来写脚本程。

如何增加脚本

首先,你必须了解一些增加脚本元素到JSP页中的一些基本规则

1、 在JSP页面里用Page指令定义脚本(默认值是Java,一般不需要定义)
 
2、 声明语法﹤%!……%﹥声明变量和方法(函数)。

3、 表达式语法﹤%=……%﹥定义脚本语言表达式

4、 脚本语法〈%……%﹥可以操作声明、表达式和其他类型合法的代码段在页脚本语言。
 
5、 一定要在结尾加%﹥标签

声明、表达式、脚本使用起来有一些相似,但也有一些不同让我们用一些例子来讲述一下相同点和不同点吧。

 声明﹤%!……%﹥包含了一个或多个变量和方法,结尾以分号分隔。例如:

  1. ﹤%! Int I=0 ; %﹥   
  2. ﹤%! Int a, b ; double c ; %﹥   
  3. ﹤%! Circle a = new circle(2.0) ; %﹥  

在页面中使用变量和方法之前必须声明

声明的范围通常是JSP页,但如果页面中使用INCLUDE指令包含其他页面,范围应变得扩展到被包含的页面。
表达式﹤%=……%﹥可以在页面中包含任何合法的语言表达式,不用分号。 例如:

  1. ﹤%= Math.sqrt(2) %﹥   
  2. ﹤%= item[I] %﹥   
  3. ﹤%= a+b+c %﹥   
  4. ﹤%= new java.util.date() %﹥  

表达式和脚本的一个关键的不同点就是不需要分号。如果你需要在脚本中使用表达式就必须加分号。
脚本﹤%……%﹥允许你写的任何数量的脚本语言 ,例如:

  1. ﹤% String name=null ;   
  2. If (request.getParmeter("name")==null{   
  3. %﹥ 


记住在脚本中必须使用分号结尾。

猜数字游戏

猜数字游戏非常的有趣,而且从这里你还可以学到很多表达式的用法。

JSP源码如下:

  1. 显示用的主屏幕(numguess.jsp)   
  2. ﹤!--   
  3. Number Guess Game   
  4. Written by Jason Hunter, CTO, K&A Software   
  5. jasonh@kasoftware.com, http://www.servlets.com   
  6. Copyright 1999, K&A Software   
  7. Distributed by Sun Microsystems with permission   
  8. --﹥   
  9. ﹤%@ page import = "num.NumberGuessBean" %﹥   
  10.  
  11. ﹤jsp:useBean id="numguess" class="num.NumberGuessBean" scope="session" /﹥   
  12. ﹤jsp:setProperty name="numguess" property="*" /﹥   
  13.  
  14. ﹤html﹥   
  15. ﹤head﹥﹤title﹥Number Guess﹤/title﹥﹤/head﹥   
  16. ﹤body bgcolor="white"﹥   
  17. ﹤font size=4﹥   
  18.  
  19. ﹤% if (numguess.getSuccess() ) { %﹥   
  20.  
  21. Congratulations! You got it.   
  22. And after just ﹤%= numguess.getNumGuesses() %﹥tries.﹤p﹥   
  23.  
  24. ﹤% numguess.reset(); %﹥   
  25. Care to ﹤a href="numguess.jsp"﹥try again﹤/a﹥?   
  26.  
  27. ﹤% } else if (numguess.getNumGuesses() == 0) { %﹥   
  28.  
  29. Welcome to the Number Guess game.﹤p﹥   
  30. I'm thinking of a number between 1 and 100.﹤p﹥   
  31.  
  32. ﹤form method=get﹥   
  33. What's your guess? ﹤input type=text name=guess﹥   
  34. ﹤input type=submit value="Submit"﹥   
  35. ﹤/form﹥   
  36.  
  37. ﹤% } else { %﹥   
  38. Good guess, but nope. Try ﹤b﹥﹤%= numguess.getHint() %﹥﹤/b﹥.   
  39. You have made ﹤%= numguess.getNumGuesses() %﹥ guesses.   
  40. ﹤p﹥I'm thinking of a number between 1 and 100.   
  41. ﹤p﹥﹤form method=get﹥   
  42.  
  43. What's your guess? ﹤input type=text name=guess﹥   
  44. ﹤input type=submit value="Submit"﹥   
  45. ﹤/form﹥   
  46. ﹤% } %﹥   
  47. ﹤/font﹥   
  48. ﹤/body﹥   
  49. ﹤/html﹥   
  50.  
  51. 操作程序(NumberGuessBean.java)   
  52. // Number Guess Game   
  53. // Written by Jason Hunter, CTO, K&A Software   
  54. // jasonh@kasoftware.com, http://www.servlets.com   
  55. // Copyright 1999, K&A Software   
  56. // Distributed by Sun Microsystems with permission   
  57.  
  58. package num;   
  59. import java.util.*;   
  60. public class NumberGuessBean {   
  61. int answer;   
  62. boolean success;   
  63. String hint;   
  64. int numGuesses;   
  65. public NumberGuessBean() {   
  66. reset();   
  67. }   
  68. public void setGuess(String guess) {   
  69. numGuesses++;   
  70. int g;   
  71. try {   
  72. g = Integer.parseInt(guess);   
  73. }   
  74. catch (NumberFormatException e) {   
  75. g = -1;   
  76. }   
  77. if (g == answer) {   
  78. success = true;   
  79. }   
  80. else if (g == -1) {   
  81. hint = "a number next time";   
  82. }   
  83. else if (g ﹤ answer) {   
  84. hint = "higher";   
  85. }   
  86. else if (g ﹥ answer) {   
  87. hint = "lower";   
  88. }   
  89. }   
  90. public boolean getSuccess() {   
  91. return success;   
  92. }   
  93. public String getHint() {   
  94. return "" + hint;   
  95. }   
  96. public int getNumGuesses() {   
  97. return numGuesses;   
  98. }   
  99. public void reset() {   
  100. answer = Math.abs(new Random().nextInt() % 100)   
  101. + 1;   
  102. success = false;   
  103. numGuesses = 0;   
  104. }   
  105. }   

在本JSP教程中,JSP文件中使用脚本

numguess.jsp是一个非常有趣儿的用脚本写的例子,你看他的结构其实是一个很大的IF……ELSE结构,但是很一个从句又都是用HTML写的,看起来象一个大的程序段。
不过你也不一定非得象numguess.jsp那样用HTML和JSP标签一起来写脚本。在﹤%和%﹥标签之间,你可以写任意多行的脚本代码,在通常情况下,尽量少用脚本来处理程序,而尽可能的使用servlets或者Beans,这样你的程序看起来会非常的清析,明了。话又说回来,怎么写JSP还得根据你的习惯和爱好,我不强迫非得使用任何一种方法,SUN的JSP详细说明书不规定脚本的长度。

用标签组合脚本

使用HTML和JSP标签来写脚本的时候,注意前后的标签不要忘记,一定要“封”好。说的不明白,举个例子吧:

  1. ﹤% } else { %﹥ ﹤!-- 用JSP标签的时候先关上 --﹥   
  2.  
  3. ... 这时候用JSP标签吧 ...   
  4.  
  5. ﹤% } %﹥ ﹤!-- 这样你应该看懂了吧?! --﹥  

开始的时候这种做法看起来可能有一点奇怪,但它以确保你JSP文件编译的时候脚本的成功转换。

那么,脚本什么时候执行呢?
 
一个JSP源文件的处理分为两个阶段:一个是HTTP的编译时候,一个是请求的处理时间。

HTTP编译的时候,当用户第一次读JSP页面的时候,JSP的原代码被编译成CLASS,通常是servlet。HTML标签和JSP标签在这个时候同时被处理了,这之前用户还没有任何的请求被提交。

请求处理时间是当用户在JSP页面中提交了一个请求,这时请求由客户端被request对象传到了服务器端,JSP引擎根据用户提交的值执行编译过的JSP文件或者servlet。

当你在JSP页中使用脚本的时候,你必须知道他们什么时候被执行。声明在HTTP编译阶段就已经被处理了,其他脚本,表达式在编译JSP文件的时候也可用。表达式在HTTP编译的时候也被执行了。表达式的值被转换成了字符串被插入到JSP文件中一块儿被编译。其实在请求阶段,脚本也是可以利用的。

如何运行例子

本JSP教程现在给出的都是在UNIX风格下的路径,如果你用Windows,那么改成Windows风格路径

1、猜数字游戏在装TOMCAT或者JSWDK的时候就已经装好了。

2、.jsp和.html文件在../jswdk-1.0.1/examples/num中

3、.java和.class文件在../jswdk-1.0.1/examples/WEB-INF/jsp/bean/num中

4、开浏览器,http://机器名/examples/jsp/num/numguess.jsp


 

【编辑推荐】

  1. 对JSP中的内置对象简单概述
  2. JSP和Servlet中的几个编码的作用及原理
  3. JSP编程应注意的六个常见问题
  4. JSP设计模式浅析
  5. 什么是JSP以及其强弱势
责任编辑:仲衡 来源: 互联网
相关推荐

2009-06-30 10:37:56

JSP教程

2009-06-30 16:33:42

JSP2.0特性JSP教程

2009-06-30 11:18:16

HTML表单JSP教程

2009-06-30 11:02:29

JSP教程

2009-07-02 11:34:42

JSP指令JSP开发

2009-10-26 12:17:03

linux脚本编写

2009-07-03 14:31:43

学习JSP

2009-07-06 10:10:43

MyJSP

2011-03-01 09:30:27

LinuxScreenletPython

2009-07-02 10:51:21

脚本编程JSP开发

2009-07-06 16:55:06

JSP题目

2009-06-06 18:43:34

JSP Action

2011-07-05 10:39:55

JVM

2009-07-01 11:44:32

JSP学习教程

2009-07-06 15:31:42

JSP Action

2009-06-30 17:01:27

访问量JSP教程

2011-07-12 17:11:13

PHPSHELL

2009-07-06 14:43:30

JSP元素

2016-11-14 19:15:37

Android

2009-07-01 15:08:50

JSP指令和脚本元素
点赞
收藏

51CTO技术栈公众号