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的基礎。