JSP常用指令

來源:互聯網
上載者:User

一.指令元素
1.page指令
import
session
contentType
buffer
isTreadSafe
info
errorPage
isErrorPage
2.include指令
3.taglib指令
二.指令碼元素
1.聲明元素
2.運算式元素
3.指令碼元素
4.注釋元素
三.標準動作元素
1.<jsp:param>
2.<jsp:include>
3.<jsp:forward>
4.<jsp:plugin>
5.<jsp:useBean>
6.<jsp:setProperty>
7.<jsp:getProperty>
四.內建對象
1.request
2.response
3.out
4.session
5.pageContext
6.application
7.config
8.page
9.exception
五.JavaBeans的使用
1.JavaBeans在JSP中的基本使用格式
2.scope範圍的具體設定
3.session事件的運用
4.Bean的儲存與讀取
六.JSP中的檔案操作
七.JSP運行原理剖析
-------------------------------------------------

在早期,開發網路資料庫應用程式主要採用CGI(Common Gateway Interface)技術。編寫CGI程式可以使用不同的程式語言,如Perl、Visual Basic、Delphi或C/C++等。雖然CGI技術已經發展成熟而且功能強大,但由於其編程困難、效率低下、修改複雜等缺陷,所以有被新技術取代的 技術。
在這樣的背景下,新的技術紛紛面世,如ASP(Active Server Page)、PHP(Personal Home Page)、JSP(Java Server Page)等。其中,JSP被許多人認為是未來最有發展前途的動態網站技術。
JSP頁面一般由HTML標籤和JSP元素構成,其中的JSP元素則又是由“指令元素”、“指令碼元素” 、“標準動作元素” 、“內建對象”四個部分組成。下面,就讓我們一起來探究JSP的奧秘吧……

一.    指令元素

可以把JSP理解為用來通知JSP引擎的訊息。JSP不直接產生可見的輸出,用JSP指令設定JSP引擎處理JSP頁面的機制。
一般JSP 指令用標籤<%@…%>表示,JSP指令包括page、include和taglib。page指令是針對當前頁面的指令,而include 指令用來指定如何包含另外一個檔案,taglib指令用來定義和訪問自訂標籤庫。這三種指令通常都有預設值,這樣開發人員就不必顯式的使用每一個指令予 以確認。
1.    page指令
page指令的設定文法格式是:<%@ page attribute1=”value1” attribute2=”value2”…%>
下面介紹指令中包括的幾個常用屬性,並作簡要說明。
l    import
import指令是所有page指令中,唯一可以多次設定的指令,而且累加每個設定。它用來指定jsp網頁中所需要使用到的一些類。例如:
<%@ page import=”java.io.*,java.util.Date”%>
l    session
定義當前頁面是否參與http會話。當設定為”true”時,可以獲得隱含名為session的對象,為”false”時,則不能。預設設定為”true”。
l    contentType
設定jsp網頁輸出時資料時,所使用的字元壓縮方式,以及所使用的字元集,當編寫中文網頁時,設定如下:
<%@page contentType=”text/html;charset=Gb2312”%>
此屬性的預設值為”text/html;charset=ISO-8859-1”。
l    buffer
設定jsp網頁的緩衝區大小,預設為”8k”,如果設定為”none”,則表示不使用緩衝,所有的響應輸出都將被PrintWriter直接寫到ServletResponse中。
l    isTreadSafe
定義當前頁面是否支援安全執行緒。如果為”true”,則該頁面可能同時收到jsp引擎發出的多個請求,反之,jsp引擎會對收到的請求進行排隊,當前頁面在同一時刻只能處理一個請求。預設為”true”。
l    info
設定頁面的文本資訊,可以通過Servlet.getServletInfo()的方法獲得該字串。
l    errorPage
定義指向另一個jsp頁面的URL。當頁面出現一個沒有被捕獲的異常時,錯誤資訊將以throw語句拋出,而被設定為錯誤資訊網頁的jsp頁面,將利用exception隱含對象,取得錯誤資訊。
預設沒有錯誤處理頁面。   
l    isErrorPage
設定此jsp網頁是否為錯誤處理頁面。預設值為”false”。當設定為”true”時,jsp頁面將可存取隱含的exception對象,並通過該對象取得從發生錯誤之網頁所傳出的錯誤資訊。取得錯誤資訊的文法如下:
<% =exception.getMessage()%>
²    一個分頁錯誤處理的例子
產生錯誤的分頁檔為MakeError.jsp,處理錯誤的分頁檔為ErrorPage.jsp,它們的來源程式如下:
MakeError.jsp

<%@ page errorPage="ErrorPage.jsp"%>
<html>
<head>
   <title>產生錯誤頁面</title>
</head>
<body>
<%
int i=8,j=0;
out.println(ij);
%>
</body>
</html>
ErrorPage.jsp
<%@ page isErrorPage="true"%>
<html>
<head>
   <title>錯誤處理頁面</title>
</head>
<body>
<font color=red>
錯誤原因:<%=exception.getMessage()%>
</font>
</body>
</html>

運行程式MakeError.jsp的結果如下:

2.    include指令
使用include指令可以把其他的文字檔加入到當前的jsp頁面,格式如下:
<%@ include file=”header.inc”%>
如此,則在當前頁面中加入header.inc原始碼然後再編譯整個檔案。
可以使用include指令把一個頁面分成不同的部分,最後合成一個完整的檔案,使用jsp的include指令有助於實現jsp頁面的模組化。
3.    taglib指令
(略)

二.    指令碼元素

JSP規格提供了四種類型的指令碼元素,包括:
l    聲明
l    運算式
l    指令碼
l    注釋
下面分別對它們進行詳細敘述。
1.    聲明元素
聲明用於定義jsp頁面中的變數與函數,這些經過定義的變數和函數,將成為Servlet類的屬性與方法(關於Servlet請參看後文)。聲明並不會產生任何的資料輸出,聲明時可同時設定初始值,提供給其他的聲明、運算式或指令碼使用。
聲明的文法格式為:

<%!
    //聲明語句
%>
舉例:
<%!
//此處定義的變數將成為此jsp頁面的全域變數
int i = 0;
static int j=100;
String s = “注意”;
%>
<%!
//此處定義的函數將成為此jsp頁面的公用函數
Public int square(int i)
{
    return(i*i);
}
%>

²    jspInit函數與jspDestroy函數
若要在jsp頁面開始執行時進行某些資料的初始化,可以利用jspInit函數完 成。此函數將在jsp頁面被執行時調用,且當jsp頁面重新整理時,並不會被再度執行。當關閉伺服器時,jspDestroy函數將被執行,可以利用該函 數進行資料的善後處理工作。下面舉個簡單的例子說明,檔案InitDes.jsp代碼如下:

<%@ page contentType="text/html; charset=GB2312"%>
<%!
public void jspInit()
{
    System.out.println("jspInit is called!");
}

public void jspDestroy()
{
    System.out.println("jspDestroy is called!");
}
%>
<HTML>
<HEAD><TITLE>jspInit函數與jspDestroy函數的使用</TITLE></HEAD>
<BODY>
<CENTER>
<FONT SIZE = 5 COLOR = blue>jspInit函數與jspDestroy函數的使用</FONT>
</CENTER>
<HR><BR>
</BODY>
</HTML>

首次執行此頁面時,Resin伺服器輸出如下:
Resin 1.2.2 -- Tue Jan 16 09:53:18 PST 2001
http listening to *:8080
srun listening to 127.0.0.1:6802
jspInit is called!
重新整理此頁面數次後,Resin伺服器輸出仍然如上。
此時,如果關閉伺服器,則輸出如下:
Resin 1.2.2 -- Tue Jan 16 09:53:18 PST 2001
http listening to *:8080
srun listening to 127.0.0.1:6802
jspInit is called!
closing server
jspDestroy is called!
由此,我們得到啟發,在資料庫的開發過程中,可以利用jspInit函數來進行資料庫的串連工作,用jspDestroy函數來進行資料庫的關畢工作。下面以一個分頁顯示資料庫內容的程式為例子,讓讀者進一步體會jspInit與jspDestroy的功用與好處。
在Pages.jsp這個分頁程式中,我們把資料庫連接的動作寫在jspInit函數中,這樣,每一次重新整理頁面時,就可以避免重新執行資料庫的串連動作。如下:

<%@ page contentType="text/html; charset=GB2312"
    import="java.sql.*"%>
<%!
int PageSize = 2; //設定每張網頁顯示兩筆記錄
int ShowPage = 1; //設定欲顯示的頁數
int RowCount = 0; //ResultSet的記錄筆數
int PageCount = 0; //ResultSet分頁後的總頁數
Connection con = null;
Statement stmt = null;
ResultSet rs = null;

public void jspInit() //執行資料庫與相關資料的初始化
{    
    try
        {
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        //載入驅動程式類別

        con = DriverManager.getConnection("jdbc:odbc:test");
        //建立資料庫連結

        stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
                       ResultSet.CONCUR_READ_ONLY);
        //建立Statement對象, 並設定記錄指標類型為可前後移動

        rs = stmt.executeQuery("SELECT * FROM products");
        //建立ResultSet(結果集)對象,並執行SQL語句

        rs.last(); //將指標移至最後一筆記錄

        RowCount = rs.getRow(); //取得ResultSet中記錄的筆數
    
        PageCount = ((RowCount % PageSize) == 0 ?
                (RowCountPageSize) : (RowCountPageSize)+1);
        //計算顯示的頁數
    }
    catch(Exception ex)
    {    
        System.out.println(ex.toString());
    }
}

public void jspDestroy() //執行關閉各種對象的操作
{
    try
        {
        rs.close(); //關閉ResultSet對象
        stmt.close(); //關閉Statement對象
        con.close(); //關閉資料庫連結化物件
    }
    catch(Exception ex)
    {
        System.out.println(ex.toString());
    }
}
%>
<HTML>
<HEAD>
<TITLE>記錄的分頁顯示</TITLE>
</HEAD>
<BODY>
<CENTER>
<FONT SIZE = 5 COLOR = blue>記錄的分頁顯示</FONT>
</CENTER>
<HR>
<P></P>
<CENTER>
<%
String ToPage = request.getParameter("ToPage");

//判斷是否可正確取得ToPage參數,
//可取得則表示JSP網頁應顯示特定分頁記錄的語句
if(ToPage != null)
{
    ShowPage = Integer.parseInt(ToPage); //取得指定顯示的分頁頁數
    
    //下面的if語句將判斷使用者輸入的頁數是否正確
    if(ShowPage > PageCount)
    { //判斷指定頁數是否大於總頁數, 是則設定顯示最後一頁
        ShowPage = PageCount;
    }
    else if(ShowPage <= 0)
    { //若指定頁數小於0, 則設定顯示第一頁的記錄
        ShowPage = 1;
    }
}

rs.absolute((ShowPage - 1) * PageSize + 1);
//計算欲顯示頁的第一筆記錄位置
%>
<H3>目前在第<FONT SIZE = 4 COLOR = red>
<%= ShowPage %></FONT>頁, 共有
<FONT SIZE = 4 COLOR = red>
<%= PageCount %></FONT>頁</H3>
<P></P>
<%
//利用For迴圈配合PageSize屬性輸出一頁中的記錄
for(int i = 1; i <= PageSize; i++)
{
    %>
    <TABLE border=1 bordercolor=RoyalBlue bgcolor=LightBlue>
        <TR><TD bgcolor=LightYellow width= 100>
        <B>商品名</B></TD>
        <TD width= 100><B><%= rs.getString("product_name") %>
        </B></TD>
        <TD bgcolor=LightYellow width= 100>
        <B>價格</B></TD>
        <TD width= 100><B><%= rs.getInt("price") %>
        </B></TD>
        <TD bgcolor=LightYellow width= 100>
        <B>描述</B></TD>
        <TD width= 100><B><%= rs.getString("description") %>
        </B></TD>
        </TR>
    </TABLE><BR>
    <%
    //下面的if判斷語句用於防止輸出最後一頁記錄時,
    //將記錄指標移至最後一筆記錄之後
    if(!rs.next())     //判斷是否到達最後一筆記錄
        break; //跳出for迴圈
}
%>
<TABLE>
<TR valign=baseline align=center>
<%
//判斷目前所在分頁是否為第一頁,
//不是則顯示到第一頁與上一頁的超連結
if(ShowPage != 1)
{
//下面建立的各超連結將連結至自己,
//並將欲顯示的分頁以ToPage參數傳遞給自己
    %>
    <TD Width=150>
    <A Href=Pages.jsp?ToPage=<%= 1 %>>到第一頁</A>
    </TD>
    <TD Width=150>
    <A Href=Pages.jsp?ToPage=<%= ShowPage - 1 %>>到上一頁</A>
    </TD>
    <%
}

//判斷目前所在分頁是否為最後一頁,
//不是則顯示到最後一頁與下一頁的超連結
if(ShowPage != PageCount)
{
//下面建立的各超連結將連結至自己,
//並將欲顯示的分頁以ToPage參數傳遞自己
    %>    
    <TD Width=150>
    <A Href=Pages.jsp?ToPage=<%= ShowPage + 1%>>到下一頁</A>
    </TD>  
    <TD Width=150>
    <A Href=Pages.jsp?ToPage=<%= PageCount %>>到最後一頁</A>
    </TD>
    <%
}
%>
<TD Width=150>
<FORM action=Pages.jsp method=POST>

<!--
供使用者輸入欲查看頁數的文字方塊, 預設值為目前所在的分頁,
當使用者在此文字方塊中完成資料輸入後按下 Enter 即可將資料送出,
相當於按下Submit按鈕, 因此此表單中將省略Submit按鈕
-->
<INPUT type="text" name=ToPage style="HEIGHT: 25px; WIDTH: 40px"
value=<%= ShowPage%> > 頁
</FORM></TD></TR>
</TABLE>
</CENTER>
</BODY>
</HTML>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.