JSP入门教程(4)

使用脚本
在有些地方,你大概要加一些好的,成熟的程序到你的JSP页里,JSP的标签虽然很强大,但是完成某些工作还是比较费力的困难的。这时你可以使用脚本语言段来补充JSP标签。
使用的JSP引擎是支持脚本语言的,SUN的JSP参考文说明,必须使用Java程序语言来编写脚本,但是其他第三方的JSP引擎允许使用其他语言来写脚本程。
如何增加脚本
首先,你必须了解一些增加脚本元素到JSP页中的一些基本规则
1、 在JSP页面里用Page指令定义脚本(默认值是Java,一般不需要定义)
2、 声明语法``` !……

 13、 表达式语法```
 2=……
 3```定义脚本语言表达式   
 44、 脚本语法〈%……%>可以操作声明、表达式和其他类型合法的代码段在页脚本语言。   
 55、 一定要在结尾加%>标签   
 6声明、表达式、脚本使用起来有一些相似,但也有一些不同让我们用一些例子来讲述一下相同点和不同点吧。   
 7声明```
 8!……
 9```包含了一个或多个变量和方法,结尾以分号分隔。   
10例:```
11! Int I=0 ; 
1! Int a, b ; double c ; 
1! Circle a = new circle(2.0) ; 

在页面中使用变量和方法之前必须声明
声明的范围通常是JSP页,但如果页面中使用INCLUDE指令包含其他页面,范围应变得扩展到被包含的页面。
表达式``` =……

1例:```
2= Math.sqrt(2) 
1= item[I] 
1= a+b+c 
1= new java.util.date() 

表达式和脚本的一个关键的不同点就是不需要分号。如果你需要在脚本中使用表达式就必须加分号。
脚本``` ……

1例:```
2 String name=null ;   
3If (request.getParmeter("name")==null{   

记住在脚本中必须使用分号结尾。
猜数字游戏
猜数字游戏非常的有趣,而且从这里你还可以学到很多表达式的用法。
代码
显示用的主屏幕(numguess.jsp)

1@ page import = "num.NumberGuessBean" 
1<jsp:usebean class="num.NumberGuessBean" id="numguess" scope="session"></jsp:usebean>
1<jsp:setproperty name="numguess" property="*"></jsp:setproperty>
1<html>
2<head><title>Number Guess</title></head>
3<body bgcolor="white">
4<font size="4">   
5  

if (numguess.getSuccess() ) {

1  
2Congratulations! You got it.   
3And after just ```
4= numguess.getNumGuesses() 
5```tries.<p>   
6  

numguess.reset();

1Care to <a href="numguess.jsp">try again</a>?   
2  

} else if (numguess.getNumGuesses() == 0) {

1  
2Welcome to the Number Guess game.<p>   
3I'm thinking of a number between 1 and 100.<p>
4<form method="get">   
5What's your guess? <input name="guess" type="text"/>
6<input type="submit" value="Submit"/>
7</form>   
8  

} else {

 1Good guess, but nope. Try <b>```
 2= numguess.getHint() 
 3```</b>.   
 4You have made ```
 5= numguess.getNumGuesses() 
 6``` guesses.   
 7<p>I'm thinking of a number between 1 and 100.   
 8<p><form method="get">   
 9  
10What's your guess? <input name="guess" type="text"/>
11<input type="submit" value="Submit"/>
12</form>   

}

1</p></p></p></p></p></font>
2</body>
3</html>

操作程序(NumberGuessBean.java)
// Number Guess Game
// Written by Jason Hunter, CTO, K&A Software
// [email protected], http://www.servlets.com
// Copyright 1999, K&A Software
// Distributed by Sun Microsystems with permission

package num;
import java.util.*;
public class NumberGuessBean {
int answer;
boolean success;
String hint;
int numGuesses;
public NumberGuessBean() {
reset();
}
public void setGuess(String guess) {
numGuesses++;
int g;
try {
g = Integer.parseInt(guess);
}
catch (NumberFormatException e) {
g = -1;
}
if (g == answer) {
success = true;
}
else if (g == -1) {
hint = "a number next time";
}
else if (g < answer) {
hint = "higher";
}
else if (g > answer) {
hint = "lower";
}
}
public boolean getSuccess() {
return success;
}
public String getHint() {
return "" + hint;
}
public int getNumGuesses() {
return numGuesses;
}
public void reset() {
answer = Math.abs(new Random().nextInt() % 100)
+ 1;
success = false;
numGuesses = 0;
}
}

在JSP文件中使用脚本
numguess.jsp是一个非常有趣儿的用脚本写的例子,你看他的结构其实是一个很大的IF……ELSE结构,但是很一个从句又都是用HTML写的,看起来象一个大的程序段。
不过你也不一定非得象numguess.jsp那样用HTML和JSP标签一起来写脚本。在``` 和

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

} else {

1<!-- 用JSP标签的时候先关上 -->
2... 这时候用JSP标签吧 ...   
3  

}

 1<!-- 这样你应该看懂了吧?! -->
 2开始的时候这种做法看起来可能有一点奇怪,但它以确保你JSP文件编译的时候脚本的成功转换。   
 3  
 4那么,脚本什么时候执行呢?   
 5一个JSP原文件的处理分为两个阶段:一个是HTTP的编译时候,一个是请求的处理时间。   
 6  
 7HTTP编译的时候,当用户第一次读JSP页面的时候,JSP的原代码被编译成CLASS,通常是servlet。HTML标签和JSP标签在这个时候同时被处理了,这之前用户还没有任何的请求被提交。   
 8  
 9请求处理时间是当用户在JSP页面中提交了一个请求,这时请求由客户端被request对象传到了服务器端,JSP引擎根据用户提交的值执行编译过的JSP文件或者servlet。   
10  
11当你在JSP页中使用脚本的时候,你必须知道他们什么时候被执行。声明在HTTP编译阶段就已经被处理了,其他脚本,表达式在编译JSP文件的时候也可用。表达式在HTTP编译的时候也被执行了。表达式的值被转换成了字符串被插入到JSP文件中一块儿被编译。其实在请求阶段,脚本也是可以利用的。   
12  
13如何运行例子   
14我现在给出的都是在UNIX风格下的路径,如果你用Windows,那么改成Windows风格路径   
151、猜数字游戏在装TOMCAT或者JSWDK的时候就已经装好了。   
162、.jsp和.html文件在../jswdk-1.0.1/examples/num中   
173、.java和.class文件在../jswdk-1.0.1/examples/WEB-INF/jsp/bean/num中   
184、开浏览器,http://机器名/examples/jsp/num/numguess.jsp
Published At
Categories with Web编程
Tagged with
comments powered by Disqus