JSP教程基礎(chǔ)之腳本的使用
在有些地方,你大概要加一些好的,成熟的程序到你的JSP頁(yè)里,JSP的標(biāo)簽雖然很強(qiáng)大,但是完成某些工作還是比較費(fèi)力的困難的。這時(shí)你可以使用腳本語(yǔ)言段來(lái)補(bǔ)充JSP標(biāo)簽。
使用的JSP引擎是支持腳本語(yǔ)言的,SUN的JSP參考文說(shuō)明,必須使用Java程序語(yǔ)言來(lái)編寫(xiě)腳本,但是其他第三方的JSP引擎允許使用其他語(yǔ)言來(lái)寫(xiě)腳本程。
如何增加腳本
首先,你必須了解一些增加腳本元素到JSP頁(yè)中的一些基本規(guī)則
1、 在JSP頁(yè)面里用Page指令定義腳本(默認(rèn)值是Java,一般不需要定義)
2、 聲明語(yǔ)法﹤%!……%﹥聲明變量和方法(函數(shù))。
3、 表達(dá)式語(yǔ)法﹤%=……%﹥定義腳本語(yǔ)言表達(dá)式
4、 腳本語(yǔ)法〈%……%﹥可以操作聲明、表達(dá)式和其他類(lèi)型合法的代碼段在頁(yè)腳本語(yǔ)言。
5、 一定要在結(jié)尾加%﹥標(biāo)簽
聲明、表達(dá)式、腳本使用起來(lái)有一些相似,但也有一些不同讓我們用一些例子來(lái)講述一下相同點(diǎn)和不同點(diǎn)吧。
聲明﹤%!……%﹥包含了一個(gè)或多個(gè)變量和方法,結(jié)尾以分號(hào)分隔。例如:
- ﹤%! Int I=0 ; %﹥
- ﹤%! Int a, b ; double c ; %﹥
- ﹤%! Circle a = new circle(2.0) ; %﹥
在頁(yè)面中使用變量和方法之前必須聲明
聲明的范圍通常是JSP頁(yè),但如果頁(yè)面中使用INCLUDE指令包含其他頁(yè)面,范圍應(yīng)變得擴(kuò)展到被包含的頁(yè)面。
表達(dá)式﹤%=……%﹥可以在頁(yè)面中包含任何合法的語(yǔ)言表達(dá)式,不用分號(hào)。 例如:
- ﹤%= Math.sqrt(2) %﹥
- ﹤%= item[I] %﹥
- ﹤%= a+b+c %﹥
- ﹤%= new java.util.date() %﹥
表達(dá)式和腳本的一個(gè)關(guān)鍵的不同點(diǎn)就是不需要分號(hào)。如果你需要在腳本中使用表達(dá)式就必須加分號(hào)。
腳本﹤%……%﹥?cè)试S你寫(xiě)的任何數(shù)量的腳本語(yǔ)言 ,例如:
- ﹤% String name=null ;
- If (request.getParmeter("name")==null{
- %﹥
記住在腳本中必須使用分號(hào)結(jié)尾。
猜數(shù)字游戲
猜數(shù)字游戲非常的有趣,而且從這里你還可以學(xué)到很多表達(dá)式的用法。
JSP源碼如下:
- 顯示用的主屏幕(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教程中,JSP文件中使用腳本
numguess.jsp是一個(gè)非常有趣兒的用腳本寫(xiě)的例子,你看他的結(jié)構(gòu)其實(shí)是一個(gè)很大的IF……ELSE結(jié)構(gòu),但是很一個(gè)從句又都是用HTML寫(xiě)的,看起來(lái)象一個(gè)大的程序段。
不過(guò)你也不一定非得象numguess.jsp那樣用HTML和JSP標(biāo)簽一起來(lái)寫(xiě)腳本。在﹤%和%﹥標(biāo)簽之間,你可以寫(xiě)任意多行的腳本代碼,在通常情況下,盡量少用腳本來(lái)處理程序,而盡可能的使用servlets或者Beans,這樣你的程序看起來(lái)會(huì)非常的清析,明了。話(huà)又說(shuō)回來(lái),怎么寫(xiě)JSP還得根據(jù)你的習(xí)慣和愛(ài)好,我不強(qiáng)迫非得使用任何一種方法,SUN的JSP詳細(xì)說(shuō)明書(shū)不規(guī)定腳本的長(zhǎng)度。
用標(biāo)簽組合腳本
使用HTML和JSP標(biāo)簽來(lái)寫(xiě)腳本的時(shí)候,注意前后的標(biāo)簽不要忘記,一定要“封”好。說(shuō)的不明白,舉個(gè)例子吧:
- ﹤% } else { %﹥ ﹤!-- 用JSP標(biāo)簽的時(shí)候先關(guān)上 --﹥
- ... 這時(shí)候用JSP標(biāo)簽吧 ...
- ﹤% } %﹥ ﹤!-- 這樣你應(yīng)該看懂了吧?! --﹥
開(kāi)始的時(shí)候這種做法看起來(lái)可能有一點(diǎn)奇怪,但它以確保你JSP文件編譯的時(shí)候腳本的成功轉(zhuǎn)換。
那么,腳本什么時(shí)候執(zhí)行呢?
一個(gè)JSP源文件的處理分為兩個(gè)階段:一個(gè)是HTTP的編譯時(shí)候,一個(gè)是請(qǐng)求的處理時(shí)間。
HTTP編譯的時(shí)候,當(dāng)用戶(hù)第一次讀JSP頁(yè)面的時(shí)候,JSP的原代碼被編譯成CLASS,通常是servlet。HTML標(biāo)簽和JSP標(biāo)簽在這個(gè)時(shí)候同時(shí)被處理了,這之前用戶(hù)還沒(méi)有任何的請(qǐng)求被提交。
請(qǐng)求處理時(shí)間是當(dāng)用戶(hù)在JSP頁(yè)面中提交了一個(gè)請(qǐng)求,這時(shí)請(qǐng)求由客戶(hù)端被request對(duì)象傳到了服務(wù)器端,JSP引擎根據(jù)用戶(hù)提交的值執(zhí)行編譯過(guò)的JSP文件或者servlet。
當(dāng)你在JSP頁(yè)中使用腳本的時(shí)候,你必須知道他們什么時(shí)候被執(zhí)行。聲明在HTTP編譯階段就已經(jīng)被處理了,其他腳本,表達(dá)式在編譯JSP文件的時(shí)候也可用。表達(dá)式在HTTP編譯的時(shí)候也被執(zhí)行了。表達(dá)式的值被轉(zhuǎn)換成了字符串被插入到JSP文件中一塊兒被編譯。其實(shí)在請(qǐng)求階段,腳本也是可以利用的。
如何運(yùn)行例子
本JSP教程現(xiàn)在給出的都是在UNIX風(fēng)格下的路徑,如果你用Windows,那么改成Windows風(fēng)格路徑
1、猜數(shù)字游戲在裝TOMCAT或者JSWDK的時(shí)候就已經(jīng)裝好了。
2、.jsp和.html文件在../jswdk-1.0.1/examples/num中
3、.java和.class文件在../jswdk-1.0.1/examples/WEB-INF/jsp/bean/num中
4、開(kāi)瀏覽器,http://機(jī)器名/examples/jsp/num/numguess.jsp
【編輯推薦】



















