JSP漸進學習教程2

來源:互聯網
上載者:User
js|教程

//----------------------------------------------------------------------------------------------

內部對象

out(向用戶端輸出各種資料類型)

重要方法:

out.print(類型) 或 out.println(類型):換行輸出

out.newLine():輸出一個分行符號號

out.flush():輸出緩衝區的資料

out.close():關閉輸出資料流

out.clearBuffer():清除緩衝區裡的資料,並把資料寫到用戶端

out.clear():清除緩衝區裡的資料,但不把資料寫到用戶端

out.getBufferSize():獲得緩衝區的大小,緩衝區的大小可用<%@ page buffer="size" %>設定

out.getRemaining():獲得緩衝區沒有使用的空間的大小

out.isAutoFlush():返回布爾值,若auto flush則返回true,否則返回false。是否auto fush我們可用<%@ page is AutoFlush="true/false"%>來設定

注意:中文顯示問題

若是直接賦值的中文字串,用<%@ page contentType="text/html; charset=gb2312" %>就可正常顯示。但不能用getStr(String name)函數或類似的函數轉換內碼,否則不能正常顯示中文。

若是request傳過來的中文字串,必須要用getStr(String name)函數或類似的函數轉換內碼,否則不能正常顯示中文。

如:

String aa=str;

byte[] aa=aa.getBytes("ISO8859-1");

String bb=new String(aa);

在不同平台、不同的伺服器jsp中文問題的解決方案各不相同,可自行實驗。

request(接受用戶端輸入的資訊)

作用:主要用於接受用戶端通過http協議串連傳輸到伺服器端的資料。

方法:

getCookies():返回用戶端的cookie對象,結果是一個cookie數組

getHeader(String name):獲得http協議定義的傳送檔案頭資訊,如:request.getHeader("User-agent")返回用戶端瀏覽器的版本號碼、類型

getAttribute(String name):返回name指定的屬性值,若不存在指定的屬性,就返回空值(null)。

getattributeNames():返回request對象所有屬性的名字,結果集是一個Enumeration(枚舉)類的執行個體。

getHeaderNames():返回所有request header的名字,結果集是一個Enumeration(枚舉)類的執行個體。

getHeaders(String name):返回指定名字的request header的所有值,結果集是一個Enumeration(枚舉)類的執行個體。

getMethod():獲得用戶端向伺服器端傳送資料的方法有GET、POST、PUT等類型。

getParameter(String name):獲得用戶端傳送給伺服器端的參數值,該參數由name指定。

get parameterNames():獲得用戶端傳送給伺服器端的所有的參數名,結果集是一個Enumeration(枚舉)類的執行個體。

getParameterValues(String name):獲得指定參數所有值。

getQueryString()獲得查詢字串,該串由用戶端以GET方法向伺服器端傳送。

getRequestURI():獲得發出請求字串的用戶端地址。

getServletPath():獲得用戶端所請求的指令檔的檔案路徑。

setAttribute(String name,Java.lang.Object o):設定名字為name的。request參數值,該值由Object類型的o指定。

getServerName():獲得伺服器的名字。

getServerPort():獲得伺服器的連接埠號碼。

getRemoteAddr():獲得用戶端的IP地址。

getRemoteHost():獲得用戶端電腦的名字,若失敗,則返回用戶端電腦的IP地址。

getProtocol():擷取用戶端向伺服器端傳送資料所依據的協議名稱,如http/1.1

application(儲存使用者資訊)

作用:一旦建立,除非伺服器關閉,否則將一直保持下去

application.setAttribute("name",val)

request.setAttribute("name",val)

方法:getAttribute(String name):返回由name指定名字的application對象屬性的值,這是個Object對象

getattributeNames():返回所有application對象屬性的名字,結果集是一個Enumeration(枚舉)類的執行個體

getInitParameter(String name): 返回application栽個屬性的初始值,此屬性由name指定

getServerInfo():獲得目前的版本Servlet編譯器的資訊

//----------------------------------------------------------------------------

response(控制http串連)

作用:向用戶端發送資料,如Cookie、HTTP檔案關資訊等。

方法:

addCookie(Cookie cookie):添加1個Cookie對象,用來儲存用戶端的使用者資訊。用request的getcookies()方法可獲得這個Cookie

如:<% Cookie mycookie=new Cookie("uname","wsr");

response.addCookie(mycookie);

Cookie delmycookie=new cookie("mycookie",null);

delmycookie .setMaxAge(0);

delmycookie .setPath(/");

response.addCookie(delmycookie);

%>

addHeader(String name,String value):添加HTTP檔案頭,該header將會傳到用戶端,若同名的header存在,原來的header會被覆蓋

containsHeader(String name):判斷指定名字的HTTP檔案頭是否存在並返回布爾值

sendError(int sc):向用戶端發送錯誤資訊,如:505:伺服器內部錯誤;404:網頁找不到錯誤

如:response.sendError(response.SC_NO_CONTENT);

setHeader(String name,String value):設定指定名字的HTTP檔案頭的值,若該值存在,它將會被新值覆蓋

如1:

讓網頁每隔5秒重新整理一次

<% response.setHeader("Refresh","5");%>

the current dateis:<%=new Date()%>

如2:利用response對象設定HTTP頭

<% response.setContentType("Application/pdf");

response.setHeader("content-disposition", "attachment;filename=\"syntax.pdf\"");

%>

sendRedirect("error.html")//重新導向功能

exception(處理異常和錯誤)

作用:處理JSP檔案在執行時所有發生的錯誤和異常。有3個內建方法。

注意:必須在<%@ page isErrorPage="true" %>的情況下才可以使用Exception對象

getMessage():返回錯誤資訊

printStackTrace():以標準錯誤的形式輸出一個錯誤和錯誤的堆棧

toString():以字串的形式返回1個對異常的描述

session(儲存使用者資訊)

作用:分別儲存每一個使用者的資訊

session.putValue("name",val)

session.getValue("name")

注意:session中儲存和檢索的資訊不能是基礎資料型別 (Elementary Data Type),而必須是JAVA的相應的Object對象。

方法:

getAttribute(String name):獲得指定名字的屬性,若該屬性不存在,將返回null

getattributeNames():返回session對象中儲存的第一個屬性對象,結果集是一個Enumeration類的執行個體

getCreationTime():返回該session對象建立的時間,以毫秒計,從1970年1月1日起

getId():每產生一個session對象,伺服器都會給其一個不會重複的編號,此方法返回當前session的編號

getLastAccessedTime():返回當前session對象最後1次被操作的時間,返回自1970年1月1日起至今的毫秒數

getMaxInactiveInterval():獲得session對象的存留時間

removeAttribute(String name):刪除指定的屬性(包括屬性名稱、屬性值)

setAttribute(String name,Java.lang.Object value):設定指定名字的屬性值,並將其儲存在session對象中


setAttribute(String name,Object object):用object來初始化某個屬性,該屬性由name指定

-------------------------------------------------------------------------------------

使用Java Bean組件

特點:是可以在任何地方重用包括了可以在應用程式中、其它組件、文檔、web網站和應用程式構造器工具的多種方案中再利用。

JavaBean的概念

JavaBean是一種獨立於平台和結構的應用程式介面,它本身可以忽略內部的結構及細節問題,只需定義其外部的特徵及對外功能就行。

它有三種介面面可以獨立對外進行開發,就是:屬性、方法和事件

JavaBean的屬性

JSP組件的屬性有兩種:單值屬性、索引屬性

單值屬性:

相當於平時編程中定義的一個成員變數,它只能有一個資料值,這個資料值的類型可以是Java中的任意資料類型,包括類和介面。

如:

int counter;

float tax;

String name;

Date datetime;

註:一種特殊的單值屬性(布爾屬性),它只有兩種允許的值:true、false

索引屬性:

相當於平時說的數組,當存放一批同類型的資料時,需要用到索引屬性。

如:int ID[];

String name[];

Float score[];

JavaBean的方法

方法包括構造方法和存取方法。

構造方法:

類似於類中的構造器(即對它及它的成員變數進行初始化),它的方法名要和此JavaBean的類相同。如:

package student;

public class student{

int counter;ind ID[];

String name[];

float score[];

boolean whiszkid;

public student(){

ID=new int[50];

name=new String[50];

score=new float[50];

counter=0;

}

}

存取方法:

就是對組件中定義的屬性的訪問,包括讀和寫(一般情況與在Java中定義和使用的方法差不多),注意它的取名規則:

讀取一個屬性:getXXX()

改寫一個屬性:setXXX()

訪問單值屬性:如對上面的counter單值屬性,它的兩個存取方法可以為:

讀取屬性值:

public int getCounter{

return counter;

}

改寫屬性值:

public void setCounter(int counter){

this.counter=counter;

}

訪問布爾型的單值屬性:對讀取屬性值採用isXXX()方法

如對上面的布爾型的屬性whizkid的訪問可以為:

public boolean isWhizkid(){

return whizkid;

}

訪問索引屬性:有時要定義好幾個存取方法,但它們的取名規則還是一樣的,如對上面的姓名屬性,它的讀取和改寫方法需這樣定義:

讀取索引屬性中的一個屬性值:

public String getName(int index){

return name[index];

}

讀取索引屬性中的所有屬性值:

public String[] getName(){

return name;

}

改寫索引屬性中的一個屬性值:

public void setName(int index,String str){

name[index]=str;

}

改寫索引屬性中的所有屬性值:

public void setName(String[] str){

name=str;

}

在JSP中建立用JavaBean編寫的一個bean,實際上就是建立此類的一個對象。

用戶端做的工作

用戶端的工作可分兩部分:

一、向伺服器端發出請求即向伺服器端發出提交

二、在用戶端進行校正、以及頁面的修飾等功能

用戶端提交的方法

用戶端的提交方法分兩種:get與post提交

get可傳遞的資訊只有2kb左右,而且是明碼傳送資訊,所有的資訊均可在地址欄中看見。

post可傳遞大量資訊,加密傳送,所有的資訊均可在地址欄中是不可見的。

post提交

所有的post提交只能在form中產生,提交方式又分兩種:直接提交(submit提交)、間接提交(指令碼提交)

1)直接提交:點擊提交按鈕,立即發生提交

<form method=post action=*.asp>

<input type=submit value="註冊">

註:submit按鈕有一個預設事件,就是提交

<input type=submit value="註冊" >

註:在提交前,首先在螢幕上返回一個警告框"hello",若return的是true,則頁面發生提交;若return的是false,頁面不會發生提交。</form>

2)間接提交:是指點擊按鈕本身並不能完成提交,而只有通過指令碼才能完成的提交,稱為間接提交。

<input type=button value="註冊" >

註:

在onclick處還可為onmousedown、onmouseup等事件名稱

button只是普通按鈕,本身並不能發生提交,只能通過onclick指定的指令碼程式才能完成提交

點擊"註冊"後,先執行onclick事件觸發的函數,若傳回值為true則發生提交,否則提交中止。

get提交

get提交發生在form表單和url中

1)在form中產生的

<form method=get action=*.asp>

2)在所有的url中產生的

在地址欄中輸入url地址,後跟所要傳遞的參數http://*.asp?name=www&age=20

在超連結上<a href="*.asp>mode=1&grade=1">click me </a>

在圖片的src屬性中<img src="*.asp?name=www">

在幀裡的src屬性中<frame src=" *.asp?name=www" name=架構名>

在asp重新導向語句中response.redirect " *.asp?name=www"

在用戶端對象document中:document.location=" http:// *.asp?name=www"

在用戶端對象window中:window.open(" http:// *.asp?name=www")

伺服器端做的工作

獲得用戶端資訊的方法是通過request對象來完成的。

用戶端提交到伺服器端的資訊分為三類:

第一類:客戶機資訊(包括用戶端的ip地址、連接埠號碼、主機名稱、提交方式等等)

第二類:通過form或url方式提交到伺服器端的資訊

第三類:cookie資訊

獲得第一類資訊用:

request.getHeader("User-agent")返回用戶端瀏覽器的版本號碼、類型

getHeader(String name):獲得http協議定義的傳送檔案頭資訊

request. getMethod():獲得用戶端向伺服器端傳送資料的方法有GET、POST、PUT等類型

request. getRequestURI():獲得發出請求字串的用戶端地址

request. getServletPath():獲得用戶端所請求的指令檔的檔案路徑

request. getServerName():獲得伺服器的名字

request.getServerPort():獲得伺服器的連接埠號碼

request.getRemoteAddr():獲得用戶端的IP地址

request.getRemoteHost():獲得用戶端電腦的名字,若失敗,則返回用戶端電腦的IP地址

request.getProtocol():

request.getHeaderNames():返回所有request header的名字,結果集是一個Enumeration(枚舉)類的執行個體

request.getHeaders(String name):返回指定名字的request header的所有值,結果集是一個Enumeration(枚舉)類的執行個體

獲得第二類 get 資訊用:

request. getQueryString("變數名呀或控制項名")獲得查詢字串,該串由用戶端以GET方法向伺服器端傳送

獲得第二類 post 資訊用:

request.getParameter(String name):獲得用戶端傳送給伺服器端的參數值,該參數由name指定

request.getParameterNames():獲得用戶端傳送給伺服器端的所有的參數名,結果集是一個Enumeration(枚舉)類的執行個體

request.getParameterValues(String name):獲得指定參數所有值

獲得第三類Cookie資訊用:

request.getCookies( "cookie變數名"):返回用戶端的cookie對象,結果是一個cookie數組

--------------------------------------------------------------------------------------------

資料庫初級部分 為了大家方便,以ACCESS為例

配置步驟:

在"開始"——"設定"——"控制台"——"管理工具"——"資料來源(ODBC)"——"系統DSN"——"添加"——"選擇資料來源驅動程式"——"完成"——"ODBC安裝填寫資料來源名,點擊‘確定’"——"完成"即可。

資料庫連接的五要素:

IP地址

連接埠號碼(連接埠號碼對某個資料庫服務是基本固定的,除非特別設定)意味著對應的資料庫的驅動程式

選擇資料庫

帳號、密碼(是分配給資料庫的)

發出SQL語句(通過Statement對象發送)

JDBC原理

JDBC是JAVA與資料的串連。因為ODBC是完全用C語言編寫的,而JAVA中實現與C語言程式的通訊是比較困難的,因此就產生了由JAVA語言編寫的用於JAVA程式與資料庫連接的介面技術。

JDBC與資料庫的串連

JDBC與具體的某種資料庫連接,是直接通過JDBC API類庫中的類來自動裝載驅動程式的。此類庫一般在java.sql包中,它包含了用於實現與資料庫連接的其它功能的類,包括與資料庫建立串連、傳送查詢和接受查詢結果。以下四個類的詳細介紹:

作用:

與資料庫建立串連

發送SQL語句

處理結果

connection cn=DriverManager.getConnection("jdbc:odbc:wombat","login","password");

Statement stmt=cn.createStatement();//發送SQL語句

ResultSet rs=stmt.executeQuery("select a,b,c from table1");

while(rs.next()){

int x=rs.getInt("a");

String s=rs.getString("b");

float f=rs.getFloat("c");

}//處理結果


------------------------------------------------------------------------------------------

DriverManager類

此類用於裝載驅動程式,它所有的成員都是靜態成員,所以在程式中無須對它進行執行個體化,直接通過類名就可以訪問它。

DriverManager類是JDBC的管理層,作用於使用者和驅動程式間載入驅動程式

Class.forName("公司名.資料庫名.驅動程式名")

如:Class.forName("sun.jdbc.odbc.jdbcOdbcDriver")

建立串連

載入Driver類並在DriverManager類註冊後,就可用來與資料庫建立串連。當調用Driver.Manager.getConnection()發出連串連請求時,DriverManager將檢查每個驅動程式,看它是否可以建立串連。

方法:Connection getConnection(String url,String user,String password)

其中user和password是登入資料庫的使用者和密碼

第一個參數是指向資料庫的url,它的格式如下:

jdbc:(subprotocol):(subname)

subprotocol:子協議,指定串連何種資料庫或用什麼方式串連資料庫

subname:確立一個串連,可以是一個資料來源名,也可以是指向一個網上資料庫

如:以下是通常用驅動程式(JDBC-ODBC橋驅動程式),並連一個student資料來源,用匿名登入的的樣本:

Class.forName("sun.jdbc.odbc.jdbcOdbcDriver");//載入驅動程式

String url="jdbc:odbc:student";

Connection cn=DriverManager.getConnection(url,"anonymous","");

GetConnection():返回一個串連類對象。若成功,此對象就指向此資料庫的一個串連;否則,此對象將為空白null

Connection類

connection類是指向同一個資料庫的串連。

作用:管理指向資料庫的串連,如:向資料庫發送查詢和接收資料庫的查詢結果都是在它基礎上的;完成同資料庫的串連的所有任務之後關閉此串連。

方法:

Statement createStatment():建立一個Statement對象,此對象可以向資料庫發送查詢資訊

void close():關閉同資料庫的串連並釋放佔有的JDBC資源

Boolean isClose():判斷是否仍與資料庫連接

Statement類

作用:Statement對象用於將SQL語句發送到資料庫中。

建立Statement對象

建立了到特定資料庫的串連後,就可用該串連發送SQL語句。Statement對象用Connection的方法createStatement建立。

Connection cn=DriverManager.getconnection(rul,"sunny","");

statement stmt=cn.createStatement();

為了執行Statement對象,被發送到資料庫的SQL語句將被作為參數提供給Statement的方法

ResultSet rs=stmt.executeQuery("select a,b,c from table2");

使用Statement對象執行語句

Statement介面提供了三種執行SQL語句的方法

executeQuery():用於產生單個結果集的語句,如:select語句

executeUpdate():用於執行insert、update或delete、語句等,傳回值是一個整數,指示受影響的行數(即更新計數)

execute():用於執行返回多個結果集、多個更新計數或二者組合的語句

陳述式完成

語句在已執行且所有結果返回時,即認為已完成。

對於返回一個結果集的executeQuery()方法,在檢索完ResultSet對象的所有行時該陳述式完成。

對於方法executeUpdate(),當它執行時語句即完成

在少數調用execute()的情況下,只有在檢索所有結果集或它產生的更新計數之後語句才完成

關閉Statement對象

Statement對象將由Java垃圾收集程式自動關閉。但我們最好顯示地關閉它們,因為會立即釋放資料管理系統資源,有助避免潛在記憶體問題。

主要方法

ResultSet executeQuery(String sql):返回一個靜態sql查詢結果

int executeUpdate(String sql):查詢一行sql聲明中insert、update、delete的數目或返回0

void close():關閉同資料庫的串連和所佔有的JDBC資源

ResultSet類(紀錄集)

作用:裝載查詢結果,並可以通過它的不同方法提取出查詢結果。ResultSet包含符合SQL語句中條件的所有行,且它通過一套get方法(這些get方法可以訪問當前行中的不同列)提供了對這些行中資料的訪問。

ResultSet.next():將紀錄指標移動到ResultSet紀錄集的下一行,使之成為當前行。

註:紀錄集是一張二維表,其中有查詢所返回的欄位標題及相應的值。

對於方法executeUpdate(),當它執行時語句即完成

在少數調用execute()的情況下,只有在檢索所有結果集或它產生的更新計數之後語句才完

-------結束!

PS:此教程為本人收集的內容,做了一些整理,是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.