JSP入門教程(4)

來源:互聯網
上載者:User

使用指令碼
在有些地方,你大概要加一些好的,成熟的程式到你的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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.