JSP入门教程(4)
程序员文章站
2024-02-26 16:36:40
使用脚本 在有些地方,你大概要加一些好的,成熟的程序到你的jsp页里,jsp的标签虽然很强大,但是完成某些工作还是比较费力的困难的。这时你可以使用脚本语言段来补充jsp标签...
使用脚本
在有些地方,你大概要加一些好的,成熟的程序到你的jsp页里,jsp的标签虽然很强大,但是完成某些工作还是比较费力的困难的。这时你可以使用脚本语言段来补充jsp标签。
使用的jsp引擎是支持脚本语言的,sun的jsp参考文说明,必须使用java程序语言来编写脚本,但是其他第三方的jsp引擎允许使用其他语言来写脚本程。
如何增加脚本
首先,你必须了解一些增加脚本元素到jsp页中的一些基本规则
1、 在jsp页面里用page指令定义脚本(默认值是java,一般不需要定义)
2、 声明语法<%!……%>声明变量和方法(函数)。
3、 表达式语法<%=……%>定义脚本语言表达式
4、 脚本语法〈%……%>可以操作声明、表达式和其他类型合法的代码段在页脚本语言。
5、 一定要在结尾加%>标签
声明、表达式、脚本使用起来有一些相似,但也有一些不同让我们用一些例子来讲述一下相同点和不同点吧。
声明<%!……%>包含了一个或多个变量和方法,结尾以分号分隔。
例:<%! int i=0 ; %>
<%! int a, b ; double c ; %>
<%! circle a = new circle(2.0) ; %>
在页面中使用变量和方法之前必须声明
声明的范围通常是jsp页,但如果页面中使用include指令包含其他页面,范围应变得扩展到被包含的页面。
表达式<%=……%>可以在页面中包含任何合法的语言表达式,不用分号。
例:<%= math.sqrt(2) %>
<%= item[i] %>
<%= a+b+c %>
<%= new java.util.date() %>
表达式和脚本的一个关键的不同点就是不需要分号。如果你需要在脚本中使用表达式就必须加分号。
脚本<%……%>允许你写的任何数量的脚本语言
例:<% string name=null ;
if (request.getparmeter("name")==null{
%>
记住在脚本中必须使用分号结尾。
猜数字游戏
猜数字游戏非常的有趣,而且从这里你还可以学到很多表达式的用法。
代码
显示用的主屏幕(numguess.jsp)
<!--
number guess game
written by jason hunter, cto, k&a software
jasonh@kasoftware.com, http://www.servlets.com
copyright 1999, k&a software
distributed by sun microsystems with permission
-->
<%@ page import = "num.numberguessbean" %>
<jsp:usebean id="numguess" class="num.numberguessbean" scope="session" />
<jsp:setproperty name="numguess" property="*" />
<html>
<head><title>number guess</title></head>
<body bgcolor="white">
<font size=4>
<% if (numguess.getsuccess() ) { %>
congratulations! you got it.
and after just <%= numguess.getnumguesses() %>tries.<p>
<% numguess.reset(); %>
care to <a href="numguess.jsp">try again</a>?
<% } else if (numguess.getnumguesses() == 0) { %>
welcome to the number guess game.<p>
i'm thinking of a number between 1 and 100.<p>
<form method=get>
what's your guess? <input type=text name=guess>
<input type=submit value="submit">
</form>
<% } else { %>
good guess, but nope. try <b><%= numguess.gethint() %></b>.
you have made <%= numguess.getnumguesses() %> guesses.
<p>i'm thinking of a number between 1 and 100.
<p><form method=get>
what's your guess? <input type=text name=guess>
<input type=submit value="submit">
</form>
<% } %>
</font>
</body>
</html>
操作程序(numberguessbean.java)
// number guess game
// written by jason hunter, cto, k&a software
// jasonh@kasoftware.com, 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标签一起来写脚本。在<%和%>标签之间,你可以写任意多行的脚本代码,在通常情况下,尽量少用脚本来处理程序,而尽可能的使用servlets或者beans,这样你的程序看起来会非常的清析,明了。话又说回来,怎么写jsp还得根据你的习惯和爱好,我不强迫非得使用任何一种方法,sun的jsp详细说明书不规定脚本的长度。
用标签组合脚本
使用html和jsp标签来写脚本的时候,注意前后的标签不要忘记,一定要“封”好。说的不明白,举个例子吧:
<% } else { %> <!-- 用jsp标签的时候先关上 -->
... 这时候用jsp标签吧 ...
<% } %> <!-- 这样你应该看懂了吧?! -->
开始的时候这种做法看起来可能有一点奇怪,但它以确保你jsp文件编译的时候脚本的成功转换。
那么,脚本什么时候执行呢?
一个jsp原文件的处理分为两个阶段:一个是http的编译时候,一个是请求的处理时间。
http编译的时候,当用户第一次读jsp页面的时候,jsp的原代码被编译成class,通常是servlet。html标签和jsp标签在这个时候同时被处理了,这之前用户还没有任何的请求被提交。
请求处理时间是当用户在jsp页面中提交了一个请求,这时请求由客户端被request对象传到了服务器端,jsp引擎根据用户提交的值执行编译过的jsp文件或者servlet。
当你在jsp页中使用脚本的时候,你必须知道他们什么时候被执行。声明在http编译阶段就已经被处理了,其他脚本,表达式在编译jsp文件的时候也可用。表达式在http编译的时候也被执行了。表达式的值被转换成了字符串被插入到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
在有些地方,你大概要加一些好的,成熟的程序到你的jsp页里,jsp的标签虽然很强大,但是完成某些工作还是比较费力的困难的。这时你可以使用脚本语言段来补充jsp标签。
使用的jsp引擎是支持脚本语言的,sun的jsp参考文说明,必须使用java程序语言来编写脚本,但是其他第三方的jsp引擎允许使用其他语言来写脚本程。
如何增加脚本
首先,你必须了解一些增加脚本元素到jsp页中的一些基本规则
1、 在jsp页面里用page指令定义脚本(默认值是java,一般不需要定义)
2、 声明语法<%!……%>声明变量和方法(函数)。
3、 表达式语法<%=……%>定义脚本语言表达式
4、 脚本语法〈%……%>可以操作声明、表达式和其他类型合法的代码段在页脚本语言。
5、 一定要在结尾加%>标签
声明、表达式、脚本使用起来有一些相似,但也有一些不同让我们用一些例子来讲述一下相同点和不同点吧。
声明<%!……%>包含了一个或多个变量和方法,结尾以分号分隔。
例:<%! int i=0 ; %>
<%! int a, b ; double c ; %>
<%! circle a = new circle(2.0) ; %>
在页面中使用变量和方法之前必须声明
声明的范围通常是jsp页,但如果页面中使用include指令包含其他页面,范围应变得扩展到被包含的页面。
表达式<%=……%>可以在页面中包含任何合法的语言表达式,不用分号。
例:<%= math.sqrt(2) %>
<%= item[i] %>
<%= a+b+c %>
<%= new java.util.date() %>
表达式和脚本的一个关键的不同点就是不需要分号。如果你需要在脚本中使用表达式就必须加分号。
脚本<%……%>允许你写的任何数量的脚本语言
例:<% string name=null ;
if (request.getparmeter("name")==null{
%>
记住在脚本中必须使用分号结尾。
猜数字游戏
猜数字游戏非常的有趣,而且从这里你还可以学到很多表达式的用法。
代码
显示用的主屏幕(numguess.jsp)
<!--
number guess game
written by jason hunter, cto, k&a software
jasonh@kasoftware.com, http://www.servlets.com
copyright 1999, k&a software
distributed by sun microsystems with permission
-->
<%@ page import = "num.numberguessbean" %>
<jsp:usebean id="numguess" class="num.numberguessbean" scope="session" />
<jsp:setproperty name="numguess" property="*" />
<html>
<head><title>number guess</title></head>
<body bgcolor="white">
<font size=4>
<% if (numguess.getsuccess() ) { %>
congratulations! you got it.
and after just <%= numguess.getnumguesses() %>tries.<p>
<% numguess.reset(); %>
care to <a href="numguess.jsp">try again</a>?
<% } else if (numguess.getnumguesses() == 0) { %>
welcome to the number guess game.<p>
i'm thinking of a number between 1 and 100.<p>
<form method=get>
what's your guess? <input type=text name=guess>
<input type=submit value="submit">
</form>
<% } else { %>
good guess, but nope. try <b><%= numguess.gethint() %></b>.
you have made <%= numguess.getnumguesses() %> guesses.
<p>i'm thinking of a number between 1 and 100.
<p><form method=get>
what's your guess? <input type=text name=guess>
<input type=submit value="submit">
</form>
<% } %>
</font>
</body>
</html>
操作程序(numberguessbean.java)
// number guess game
// written by jason hunter, cto, k&a software
// jasonh@kasoftware.com, 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标签一起来写脚本。在<%和%>标签之间,你可以写任意多行的脚本代码,在通常情况下,尽量少用脚本来处理程序,而尽可能的使用servlets或者beans,这样你的程序看起来会非常的清析,明了。话又说回来,怎么写jsp还得根据你的习惯和爱好,我不强迫非得使用任何一种方法,sun的jsp详细说明书不规定脚本的长度。
用标签组合脚本
使用html和jsp标签来写脚本的时候,注意前后的标签不要忘记,一定要“封”好。说的不明白,举个例子吧:
<% } else { %> <!-- 用jsp标签的时候先关上 -->
... 这时候用jsp标签吧 ...
<% } %> <!-- 这样你应该看懂了吧?! -->
开始的时候这种做法看起来可能有一点奇怪,但它以确保你jsp文件编译的时候脚本的成功转换。
那么,脚本什么时候执行呢?
一个jsp原文件的处理分为两个阶段:一个是http的编译时候,一个是请求的处理时间。
http编译的时候,当用户第一次读jsp页面的时候,jsp的原代码被编译成class,通常是servlet。html标签和jsp标签在这个时候同时被处理了,这之前用户还没有任何的请求被提交。
请求处理时间是当用户在jsp页面中提交了一个请求,这时请求由客户端被request对象传到了服务器端,jsp引擎根据用户提交的值执行编译过的jsp文件或者servlet。
当你在jsp页中使用脚本的时候,你必须知道他们什么时候被执行。声明在http编译阶段就已经被处理了,其他脚本,表达式在编译jsp文件的时候也可用。表达式在http编译的时候也被执行了。表达式的值被转换成了字符串被插入到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
下一篇: python脚本爬取字体文件的实现方法