3.2、Scriptlet(☆)
在JSP中大部分都是由腳本小程序組成,所謂的腳本小程序就是裏面直接包含了JAVA代碼。
在JSP中Scriptlet一共分爲三種:
· <%%>:定義局部變量,編寫語句
· <%!%>:定義全局變量,可以編寫類、方法
· <%=%>:表達式輸出,專門輸出變量或一個具體值
3.2.1、<%%>
此爲最常見的Scriplet代碼,代碼如下:
JSPDemo02.jsp:
<%
int i = 10 ;
int j = 20 ;
out.println(i * j) ;
out.println("<h1>"+(++i)+"</h1>") ;
%> |
發現,以上的程序無論怎麼刷新頁面,i的內容依然是11,是固定的,因爲每次都重新聲明瞭。
3.2.2、<%!%>
一般情況下都會使用此Scriplet定義一個全局變量,全局變量是無論怎麼刷新,都只聲明一次,只有很少的情況下才會用此語句去定義一個方法,但是100%情況下是不可能去定義一個類的。
<%!
int i = 10 ;
int j = 20 ;
%>
<%
out.println(i * j) ;
out.println("<h1>"+(++i)+"</h1>") ;
%> |
程序中,只要一刷新頁面,則就自己增加,因爲聲明的是一個全局變量,所以只聲明一次。
例如:在<%!%>定義一個方法,不要輕易這樣使用
<%!
int i = 10 ;
int j = 20 ;
public int add(int x,int y){
return x + y ;
}
%>
<%
out.println(add(10,20)) ;
out.println("<h1>"+(++i)+"</h1>") ;
%> |
3.2.3、<%=%>
表達式輸出,專門輸出一個變量或一個具體的值。
例如:以下代碼使用了表達式輸出
<%
int i = 10 ;
%>
<%=i%>
<%="hello World!!!"%> |
3.2.4、使用那種輸出更好呢?
之前已經學過了兩種輸出數據:
· out.println
· <%=%>
爲了驗證此程序,下面通過兩段代碼進行比較,此代碼的功能就是在屏幕上打印一個表格。
1、 使用out.println()完成
<%
out.println("<table border=\"1\">") ;
for(int i=0;i<10;i++){
out.println("<tr>") ;
for(int j=0;j<10;j++){
out.println("<td>"+(i*j)+"</td>") ;
}
out.println("</tr>") ;
}
out.println("</table>") ;
%> |
以上確實已經完成了功能。但是現在需要美化表格的話,根本無法用網頁工具進行編輯。因爲把JAVA代碼和HTML代碼綁在一起了,所以修改困難
2、 使用<%=%>完成
所以,最好將HTML與JAVA代碼進行分割
<table border="1">
<%
for(int i=0;i<10;i++){
%>
<tr>
<%
for(int j=0;j<10;j++){
%>
<td><%=i*j%></td>
<%
}
%>
</tr>
<%
}
%>
</table> |
通過以上實現的代碼,發現使用表達式輸出要比直接使用out.println輸出更方便,而且便於修改,所以在開發中嚴格要求,不允許出現任何的out.println語句。
3.2.5、思考?
要求JSP頁面可以根據用戶前臺表單輸入的信息,打印表格,例如:前臺可以輸入表格的行數和列數。接收之後進行打印。
JSPDemo08.htm:
<FORM METHOD="POST" ACTION="JSPDemo08.jsp" border="1">
<TABLE>
<TR>
<TD colspan="2">打印表格</TD>
</TR>
<TR>
<TD>輸入要打印表格的行數:</TD>
<TD><input type="text" name="rownum"></TD>
</TR>
<TR>
<TD>輸入要打印表格的列數:</TD>
<TD><input type="text" name="colnum"></TD>
</TR>
<TR>
<TD colspan="2">
<input type="submit" value="打印">
<input type="reset" value="重置">
</TD>
</TR>
</TABLE>
</FORM> |
JSPDemo08.jsp:
<%
// 需要接收請求內容
int row = 0 ;
int col = 0 ;
try{
row = Integer.parseInt(request.getParameter("rownum")) ;
col = Integer.parseInt(request.getParameter("colnum")) ;
}catch(Exception e){
%>
<h1>ERROR!!!</h1>
<%
}
%>
<table border="1">
<%
for(int i=0;i<row;i++){
%>
<tr>
<%
for(int j=0;j<col;j++){
%>
<td><%=i*j%></td>
<%
}
%>
</tr>
<%
}
%>
</table> |
整個程序上體現出了完整的交互性的效果,根據用戶輸入的內容可以自己進行相應的輸出。而且JAVA中的所有語句,在此處都可以使用。