|
文件的建立/檢查與刪除 <%@ page contentType="text/html;charset=gb2312"%> <%@ page import="java.io.*"%> <html> <head> <title>文件的建立、檢查與刪除</title> </head> <body> <% String path=request.getRealPath(""); //out.println(path); File f=new File(path,"File.txt"); //out.println(f); //out.println(f.exists());
if(f.exists()){//檢查File.txt是否存在 f.delete();//刪除File.txt文件 out.println(path + "\\File.txt 存在,已刪除。"); }else{ f.createNewFile();//在當前目錄下建立一個名為File.txt的文件 out.println(path + "\\File.txt 不存在,已建立。");//輸出目前所在的目錄路徑 } %>
目錄的建立/檢查與刪除 <%@ page contentType="text/html;charset=gb2312"%> <%@ page import="java.io.*"%> <html> <head> <title>目錄的建立/檢查與刪除</title> </head> <body> <% String path=request.getRealPath(""); path=path + "\\Sub";//將要建立的目錄路徑 File d=new File(path);//建立代表Sub目錄的File對象,并得到它的一個引用 if(d.exists()){//檢查Sub目錄是否存在 d.delete(); out.println("Sub目錄存在,已刪除"); }else{ d.mkdir();//建立Sub目錄 out.println("Sub目錄不存在,已建立"); } %> </body> </html>
如何在JSP中處理虛擬目錄 <%@ page contentType="text/html;charset=gb2312"%> <%@ page import="java.io.*"%> <html> <head> <title>JSP中如何處理虛擬目錄</title> </head> <body> 取得虛擬目錄對應(yīng)的磁盤路徑<br> Web站點主目錄的位置為<font color=#ff0000><%=request.getRealPath("/")%></font><br> JSP網(wǎng)頁所在的目錄位置<font color=#ff0000><%=request.getRealPath("./")%></font><br> JSP網(wǎng)頁所在目錄上一層目錄的位置<font color=#ff0000><%=request.getRealPath("../")%></font><br> </body> </html>
文件屬性的取得 <%@ page contentType="text/html;charset=gb2312"%> <%@ page import="java.util.Date,java.io.*"%> <html> <head> <title>文件屬性的取得</title> </head> <body> <% String path=request.getRealPath("/"); File f=new File(path,"ReadData.txt"); if(f.exists()){ %> <%=f.getName()%>的屬性如下:<br><br> 文件長度為:<%=f.length()%> <%=f.isFile()?"是文件":"不是文件"%><br> <%=f.isDirectory()?"是目錄":"不是目錄"%><br> <%=f.canRead()?"可讀取":"不可讀取"%><br> <%=f.canWrite()?"可寫入":"不可寫入"%><br> <%=f.isHidden()?"是隱藏文件":"不是隱藏文件"%><br> 文件的最后修改日期為:<%=new Date(f.lastModified())%><br> <% }else{ f.createNewFile();//在當前目錄下建立一個名為ReaData.txt的文件 %> <%=f.getName()%>的屬性如下:<br><br> 文件長度為:<%=f.length()%> <%=f.isFile()?"是文件":"不是文件"%><br> <%=f.isDirectory()?"是目錄":"不是目錄"%><br> <%=f.canRead()?"可讀取":"不可讀取"%><br> <%=f.canWrite()?"可寫入":"不可寫入"%><br> <%=f.isHidden()?"是隱藏文件":"不是隱藏文件"%><br> 文件的最后修改日期為:<%=new Date(f.lastModified())%><br> <% } %> </body> </html>
取出目錄中文件的方法 <%@ page contentType="text/html;charset=gb2312"%> <%@ page import="java.io.*"%> <html> <head> <title>取出目錄中文件的方法--列出目錄中的文件</title> </head> <body> <% String path=request.getRealPath("/"); File d=new File(path);//建立當前目錄中文件的File對象 File list[]=d.listFiles();//取得代表目錄中所有文件的File對象數(shù)組 out.println("<font color=#ff0000>" + path + "目錄下的文件:</font><br>"); for(int i=0;i<list.length;i++){ if(list<I>.isFile()){ out.println(list<I>.getName() + "<br>"); } } out.println("<br><font color=#ff0000>" + path + "目錄下的目錄:</font><br>"); for(int i=0;i<list.length;i++){ if(list<I>.isDirectory()){ out.println(list<I>.getName() + "<br>"); } } %> </body> </html>
判斷是否為空白文件 <%@ page contentType="text/html;charset=gb2312"%> <%@ page import="java.io.*"%> <html> <head> <title>判斷是否為空白文件</title> </head> <body> <% String path=request.getRealPath("/"); out.println(path); FileReader fr=new FileReader(path + "\\AtEnd.txt");//建立FileReader對象,并實例化為fr //對FileReader類生成的對象使用read()方法,可以從字符流中讀取下一個字符。 if(fr.read()==-1)//判斷是否已讀到文件的結(jié)尾 { out.print("AtEnd.txt文件中沒有數(shù)據(jù)<br>"); }else{ out.println("AtEnd.txt文件中有數(shù)據(jù)"); } fr.close(); %> </body> </html>
讀取所有的文件數(shù)據(jù) <%@ page contentType="text/html;charset=gb2312"%> <%@ page import="java.io.*,java.lang.*"%> <html> <head> <title>讀取所有的文件數(shù)據(jù)</title> </head> <body> <% String path=request.getRealPath("."); FileReader fr=new FileReader(path + "\\ReadData.txt"); //關(guān)鍵在于讀取過程中,要判斷所讀取的字符是否已經(jīng)到了文件的末尾,并且這個字符是不是文件中的斷行符,即判斷該字符值是否為13。 int c=fr.read();//從文件中讀取一個字符 //判斷是否已讀到文件結(jié)尾 while(c!=-1){ out.print((char)c);//輸出讀到的數(shù)據(jù) c=fr.read();//從文件中繼續(xù)讀取數(shù)據(jù) if(c==13){//判斷是否為斷行字符 out.print("<br>");//輸出分行標簽 fr.skip(1);//略過一個字符 //c=fr.read();//讀取一個字符 } } fr.close(); %> </body> </html>
一行一行讀取數(shù)據(jù) <%@ page contentType="text/html;charset=gb2312"%> <%@ page import="java.io.*"%> <html> <head> <title>文件讀取</title> </head> <body> <% String path=request.getRealPath("");//取得當前目錄的路徑 FileReader fr=new FileReader(path + "\\file\\inc\\t.txt");//建立FileReader對象,并實例化為fr BufferedReader br=new BufferedReader(fr);//建立BufferedReader對象,并實例化為br String Line=br.readLine();//從文件讀取一行字符串 //判斷讀取到的字符串是否不為空 while(Line!=null){ out.println(Line + "<br>");//輸出從文件中讀取的數(shù)據(jù) Line=br.readLine();//從文件中繼續(xù)讀取一行數(shù)據(jù) } br.close();//關(guān)閉BufferedReader對象 fr.close();//關(guān)閉文件 %> </body> </html>
略過文件中的字符不讀取 <%@ page contentType="text/html;charset=gb2312"%> <%@ page import="java.io.*"%> <html> <head> <title>略過字節(jié)不讀取</title> </head> <body> <% String path=request.getRealPath("."); FileReader fr=new FileReader(path + "\\ReadData.txt"); fr.skip(2);//跳過2個字節(jié) int c=fr.read();//讀取一個字節(jié) while(c!=-1){ out.print((char)c); c=fr.read(); } fr.close(); %> </body> </html>
將數(shù)據(jù)寫入文件 <%@ page contentType="text/html;charset=gb2312"%> <%@ page import="java.io.*"%> <html> <head> <title>將數(shù)據(jù)寫入文件</title> </head> <body> <% String path=request.getRealPath("."); FileWriter fw=new FileWriter(path + "\\WriteData.txt");//建立FileWriter對象,并實例化fw //將字符串寫入文件 fw.write("大家好!"); fw.write("本書是《JSP編程技巧》"); fw.write("請多多指教!"); fw.write("email:stride@sina.com"); fw.close();
FileReader fr=new FileReader(path + "\\WriteData.txt"); BufferedReader br=new BufferedReader(fr);//建立BufferedReader對象,并實例化為br String Line=br.readLine(); //讀取一行數(shù)據(jù) out.println(Line + "<br>"); br.close();//關(guān)閉BufferedReader對象 fr.close(); %> </body> </html>
將寫入文件的數(shù)據(jù)分行 <%@ page contentType="text/html;charset=gb2312"%> <%@ page import="java.io.*"%> <html> <head> <title>將寫入文件的數(shù)據(jù)分行</title> </head> <body> <% String path=request.getRealPath("."); FileWriter fw=new FileWriter(path + "\\WriteData.txt"); BufferedWriter bw=new BufferedWriter(fw); bw.write("大家好!"); bw.write("本書是《JSP編程技巧》。"); bw.newLine();//斷行 bw.write("請多多指教!"); bw.newLine();//斷行 bw.write("email: stride@sina.com"); bw.flush();//將數(shù)據(jù)更新至文件 fw.close();//關(guān)閉文件流 out.println("寫入文件內(nèi)容為:<br>"); FileReader fr=new FileReader(path + "\\WriteData.txt"); BufferedReader br=new BufferedReader(fr); String Line=br.readLine();//讀取一行數(shù)據(jù) while(Line!=null){ out.println(Line + "<br>"); Line=br.readLine(); } fr.close(); %> </body> </html> 如何將數(shù)據(jù)追加寫入到文件 <%@ page contentType="text/html;charset=gb2312"%> <%@ page import="java.io.*"%> <html> <head> <title>將寫入文件的數(shù)據(jù)分行</title> </head> <body> <% String path=request.getRealPath("."); RandomAccessFile rf=new RandomAccessFile(path + "\\WriteData.txt","rw");//定義一個類RandomAccessFile的對象,并實例化 rf.seek(rf.length());//將指針移動到文件末尾 rf.writeBytes("\nAppend a line to the file!"); rf.close();//關(guān)閉文件流 out.println("寫入文件內(nèi)容為:<br>"); FileReader fr=new FileReader(path + "\\WriteData.txt"); BufferedReader br=new BufferedReader(fr);//讀取文件的BufferedRead對象 String Line=br.readLine(); while(Line!=null){ out.println(Line + "<br>"); Line=br.readLine(); } fr.close();//關(guān)閉文件 %> </body> </html></I></I></I></I>
JDK1.5 令我們期待很久,可是當他發(fā)布的時候卻更換版本號為5.0。這說明Java已經(jīng)有大幅度的變化。本文將講解JDK5.0支持的新功能-----Java的 泛型. 1、Java泛型 其實Java的泛型就是創(chuàng)建一個用類型作為參數(shù)的類。就象我們寫類的方法一樣,方法是這樣的 method( String str1,String str2 ),方法中參數(shù)str1、str2的值是可變的。而泛型也是一樣的,這樣寫 class Java_Generics<K,V>,這里邊的K和V就象方法中的參數(shù)str1和str2,也是可變。下面看看例子:
//code list 1 import Java.util.Hashtable; class TestGen0<K,V>{ public Hashtable<K,V> h=new Hashtable<K,V>(); public void put(K k, V v) { h.put(k,v); } public V get(K k) { return h.get(k); } public static void main(String args[]){ TestGen0<String,String> t=new TestGen0<String,String>(); t.put("key", "value"); String s=t.get("key"); System.out.println(s); } } |
正確輸出:value 這只是個例子(Java中集合框架都泛型化了,這里費了2遍事.),不過看看是不是創(chuàng)建一個用類型作為參數(shù)的類,參數(shù)是K,V,傳入的“值”是String類型。這個類他沒有特定的待處理型別,以前我們 定義好了一個類,在輸入輸入?yún)?shù)有所固定,是什么型別的有要求,但是現(xiàn)在編寫程序,完全可以不制定參數(shù)的類型,具體用的時候來確定,增加了程序的通用性,像是一個 模板。 呵呵,類似C++的模板(類似)。 1.1. 泛型通配符 下面我們先看看這些程序:
//Code list 2 void TestGen0Medthod1(List l) { for (Object o : l) System.out.println(o); } |
看看這個方法有沒有異議,這個方法會通過編譯的,假如你傳入String,就是這樣List<String>。 接著我們調(diào)用它,問題就出現(xiàn)了,我們將一個List<String>當作List傳給了方法,JVM會給我們一個警告,說這個破壞了 類型安全,因為從List中返回的都是Object類型的,而讓我們再看看下面的方法。
//Code list 3 void TestGen0Medthod1(List<String> l) { for (Object o : l) System.out.println(o); } |
因為這里的List<String>不是List<Object>的子類,不是String與Object的關(guān)系,就是說List<String>不隸屬于list<Object>,他們不是繼承關(guān)系,所以是不行的,這里的extends是表示限制的。 類型通配符是很神奇的,List<?>這個你能為他做什么呢?怎么都是“?”,它似乎不確定,他總不能返回一個?作為類型的數(shù)據(jù)吧,是啊他是不會返回一個“?”來問程序員的?JVM會做簡單的思考的,看看代碼吧,更直觀些。
//code list 4 List<String> l1 = new ArrayList<String>(); li.add(“String”); List<?> l2 = l1; System.out.println(l1.get(0)); |
這段代碼沒問題的,l1.get(0)將返回一個Object。 1.2. 編寫泛型類要注意: 1) 在定義一個泛型類的時候,在 “<>”之間定義形式類型參數(shù),例如:“class TestGen<K,V>”,其中“K” , “V”不代表值,而是表示類型。 2) 實例化泛型對象的時候,一定要在類名后面指定類型參數(shù)的值(類型),一共要有兩次書寫。例如: TestGen<String,String> t=new TestGen<String,String>(); 3) 泛型中<K extends Object>,extends并不代表繼承,它是類型范圍限制。 2、泛型與數(shù)據(jù)類型轉(zhuǎn)換 2.1. 消除類型轉(zhuǎn)換 上面的例子大家看到什么了,數(shù)據(jù)類型轉(zhuǎn)換的代碼不見了。在以前我們經(jīng)常要書寫以下代碼,如:
//code list 5 import Java.util.Hashtable; class Test { public static void main(String[] args) { Hashtable h = new Hashtable(); h.put("key", "value"); String s = (String)h.get("key"); System.out.println(s); } } |
這個我們做了類型轉(zhuǎn)換,是不是感覺很煩的,并且強制類型轉(zhuǎn)換會帶來潛在的危險,系統(tǒng)可能會拋一個ClassCastException異常信息。在JDK5.0中我們完全可以這么做,如:
//code list 6 import Java.util.Hashtable; class Test { public static void main(String[] args) { Hashtable<String,Integer> h = new Hashtable<String,Integer> (); h.put("key", new Integer(123)); int s = h.get("key").intValue(); System.out.println(s); } } |
這里我們使用泛化版本的HashMap,這樣就不用我們來編寫類型轉(zhuǎn)換的代碼了,類型轉(zhuǎn)換的過程交給編譯器來處理,是不是很方便,而且很安全。上面是String映射到String,也可以將Integer映射為String,只要寫成HashTable<Integer,String> h=new HashTable<Integer,String>();h.get(new Integer(0))返回value。果然很方便。 2.2 自動解包裝與自動包裝的功能 從上面有沒有看到有點別扭啊,h.get(new Integer(123))這里的new Integer(123);好煩的,在JDK5.0之前我們只能忍著了,現(xiàn)在這種問題已經(jīng)解決了,請看下面這個方法。我們傳入一個int這一基本型別,然后再將i的值直接添加到List中,其實List是不能儲存基本型別的,List中應(yīng)該存儲對象,這里編譯器將int包裝成Integer,然后添加到List中去。接著我們用List.get(0);來檢索數(shù)據(jù),并返回對象再將對象解包裝成int。恩,JDK5.0給我們帶來更多方便與安全。
//Code list 7 public void autoBoxingUnboxing(int i) { ArrayList<Integer> L= new ArrayList<Integer>(); L.add(i); int a = L.get(0); System.out.println("The value of i is " + a); } |
2.3 限制泛型中類型參數(shù)的范圍 也許你已經(jīng)發(fā)現(xiàn)在code list 1中的TestGen<K,V>這個泛型類,其中K,V可以是任意的型別。也許你有時候呢想限定一下K和V當然范圍,怎么做呢?看看如下的代碼:
//Code list 8 class TestGen2<K extents String,V extends Number> { private V v=null; private K k=null; public void setV(V v){ this.v=v; } public V getV(){ return this.v; } public void setK(K k){ this.k=k; } public V getK(){ return this.k; } public static void main(String[] args) { TestGen2<String,Integer> t2=new TestGen2<String,Integer>(); t2.setK(new String("String")); t2.setV(new Integer(123)); System.out.println(t2.getK()); System.out.println(t2.getV()); } } |
上邊K的范圍是<=String ,V的范圍是<=Number,注意是“<=”,對于K可以是String的,V當然也可以是Number,也可以是Integer,Float,Double,Byte等。看看下圖也許能直觀些請看上圖A是上圖類中的基類,A1,A2分別是A的子類,A2有2個子類分別是A2_1,A2_2。 然后我們定義一個受限的泛型類class MyGen<E extends A2>,這個泛型的范圍就是上圖中蘭色部分。 這個是單一的限制,你也可以對型別多重限制,如下:
class C<T extends Comparable<? super T> & Serializable> |
我們來分析以下這句,T extends Comparable這個是對上限的限制,Comparable< super T>這個是下限的限制,Serializable是第2個上限。一個指定的類型參數(shù)可以具有一個或多個上限。具有多重限制的類型參數(shù)可以用于訪問它的每個限制的方法和域。 2.4. 多態(tài)方法
//Code list 9 class TestGen { ?。糡 extends Object> public static List<T> make(T first) { return new List<T>(first); } } |
摘要: 摘要
Reflection 是Java被視為動態(tài)(或準動態(tài))語言的一個關(guān)鍵性質(zhì)。這個機制允許程序在運行時透過Reflection APIs取得任何一個已知名稱的class的內(nèi)部信息,包括其modifiers(諸如public, static 等等)、superclass(例如Object)、實現(xiàn)之interfaces(例如Cloneable),也包括fields和methods的所有信息,并可于... 閱讀全文
首先它需要一個裝箱單,把你的所有資源文件包括html,img文件還有WEB-INF文件夾等等。然后在這個文件夾內(nèi)建一個新的文件夾META-INF。在META-INF文件夾內(nèi)建一個txt文件,輸入Manifest-Version: 1.0并保存為MANIFEST.MF。然后將你這個文件夾壓,注意壓成zip格式。完成后將后綴名改為war就可以了。 你也可以通過相關(guān)工具打包,比如JBuilder。 關(guān)于Tomcat發(fā)布和普通的web發(fā)布一樣。 嘗試上面方法沒成功 我把jar.exeCOPY到目錄裡用下面方法可以了,
(1):打包war :進入 工程 應(yīng)用的根目錄,
比如: <CATALINA_HOME>/webapps/myjspweb ;
(2)把整個 web 應(yīng)用打包為 myjspwar.war 文件,命令如下: jar cvf myjspweb.war *.*
(3):解包: jar xvf helloapp.war
1.document.write(""); 輸出語句 2.JS中的注釋為// 3.傳統(tǒng)的HTML文檔順序是:document->html->(head,body) 4.一個瀏覽器窗口中的DOM順序是:window->(navigator,screen,history,location,document) 5.得到表單中元素的名稱和值:document.getElementById("表單中元素的ID號").name(或value) 6.一個小寫轉(zhuǎn)大寫的JS: document.getElementById("output").value = document.getElementById("input").value.toUpperCase(); 7.JS中的值類型:String,Number,Boolean,Null,Object,Function 8.JS中的字符型轉(zhuǎn)換成數(shù)值型:parseInt(),parseFloat() 9.JS中的數(shù)字轉(zhuǎn)換成字符型:(""+變量) 10.JS中的取字符串長度是:(length) 11.JS中的字符與字符相連接使用+號. 12.JS中的比較操作符有:==等于,!=不等于,>,>=,<.<= 13.JS中聲明變量使用:var來進行聲明 14.JS中的判斷語句結(jié)構(gòu):if(condition){}else{} 15.JS中的循環(huán)結(jié)構(gòu):for([initial expression];[condition];[upadte expression]) {inside loop} 16.循環(huán)中止的命令是:break 17.JS中的函數(shù)定義:function functionName([parameter],...){statement[s]} 18.當文件中出現(xiàn)多個form表單時.可以用document.forms[0],document.forms[1]來代替. 19.窗口:打開窗口window.open(), 關(guān)閉一個窗口:window.close(), 窗口本身:self 20.狀態(tài)欄的設(shè)置:window.status="字符"; 21.彈出提示信息:window.alert("字符"); 22.彈出確認框:window.confirm(); 23.彈出輸入提示框:window.prompt(); 24.指定當前顯示鏈接的位置:window.location.href="URL" 25.取出窗體中的所有表單的數(shù)量:document.forms.length 26.關(guān)閉文檔的輸出流:document.close(); 27.字符串追加連接符:+= 28.創(chuàng)建一個文檔元素:document.createElement(),document.createTextNode() 29.得到元素的方法:document.getElementById() 30.設(shè)置表單中所有文本型的成員的值為空: var form = window.document.forms[0] for (var i = 0; i<form.elements.length;i++){ if (form.elements[i].type == "text"){ form.elements[i].value = ""; } } 31.復(fù)選按鈕在JS中判斷是否選中:document.forms[0].checkThis.checked (checked屬性代表為是否選中返回TRUE或FALSE) 32.單選按鈕組(單選按鈕的名稱必須相同):取單選按鈕組的長度document.forms[0].groupName.length 33.單選按鈕組判斷是否被選中也是用checked. 34.下拉列表框的值:document.forms[0].selectName.options[n].value (n有時用下拉列表框名稱加上.selectedIndex來確定被選中的值) 35.字符串的定義:var myString = new String("This is lightsword"); 36.字符串轉(zhuǎn)成大寫:string.toUpperCase(); 字符串轉(zhuǎn)成小寫:string.toLowerCase(); 37.返回字符串2在字符串1中出現(xiàn)的位置:String1.indexOf("String2")!=-1則說明沒找到. 38.取字符串中指定位置的一個字符:StringA.charAt(9); 39.取出字符串中指定起點和終點的子字符串:stringA.substring(2,6); 40.數(shù)學(xué)函數(shù):Math.PI(返回圓周率),Math.SQRT2(返回開方),Math.max(value1,value2)返回兩個數(shù)中的最在值,Math.pow(value1,10)返回value1的十次方,Math.round(value1)四舍五入函數(shù),Math.floor(Math.random()*(n+1))返回隨機數(shù) 41.定義日期型變量:var today = new Date(); 42.日期函數(shù)列表:dateObj.getTime()得到時間,dateObj.getYear()得到年份,dateObj.getFullYear()得到四位的年份,dateObj.getMonth()得到月份,dateObj.getDate()得到日,dateObj.getDay()得到日期幾,dateObj.getHours()得到小時,dateObj.getMinutes()得到分,dateObj.getSeconds()得到秒,dateObj.setTime(value)設(shè)置時間,dateObj.setYear(val)設(shè)置年,dateObj.setMonth(val)設(shè)置月,dateObj.setDate(val)設(shè)置日,dateObj.setDay(val)設(shè)置星期幾,dateObj.setHours設(shè)置小時,dateObj.setMinutes(val)設(shè)置分,dateObj.setSeconds(val)設(shè)置秒 [注意:此日期時間從0開始計] 43.FRAME的表示方式: [window.]frames[n].ObjFuncVarName,frames["frameName"].ObjFuncVarName,frameName.ObjFuncVarName 44.parent代表父親對象,top代表最頂端對象 45.打開子窗口的父窗口為:opener 46.表示當前所屬的位置:this 47.當在超鏈接中調(diào)用JS函數(shù)時用:(Javascript:)來開頭后面加函數(shù)名 48.在老的瀏覽器中不執(zhí)行此JS:<!-- //--> 49.引用一個文件式的JS:<script type="text/Javascript" src="aaa.js"></script> 50.指定在不支持腳本的瀏覽器顯示的HTML:<noscript></noscript> 51.當超鏈和ONCLICK事件都有時,則老版本的瀏覽器轉(zhuǎn)向a.html,否則轉(zhuǎn)向b.html.例:<a href="a.html" onclick="location.href='b.html';return false">dfsadf</a> 52.JS的內(nèi)建對象有:Array,Boolean,Date,Error,EvalError,Function,Math,Number,Object,RangeError,ReferenceError,RegExp,String,SyntaxError,TypeError,URIError 53.JS中的換行:\n 54.窗口全屏大小:<script>function fullScreen(){ this.moveTo(0,0);this.outerWidth=screen.availWidth;this.outerHeight=screen.availHeight;}window.maximize=fullScreen;</script> 55.JS中的all代表其下層的全部元素
56.JS中的焦點順序:document.getElementByid("表單元素").tabIndex = 1 57.innerHTML的值是表單元素的值:如<p id="para">"how are <em>you</em>"</p>,則innerHTML的值就是:how are <em>you</em> 58.innerTEXT的值和上面的一樣,只不過不會把<em>這種標記顯示出來. 59.contentEditable可設(shè)置元素是否可被修改,isContentEditable返回是否可修改的狀態(tài). 60.isDisabled判斷是否為禁止狀態(tài).disabled設(shè)置禁止狀態(tài) 61.length取得長度,返回整型數(shù)值 62.addBehavior()是一種JS調(diào)用的外部函數(shù)文件其擴展名為.htc 63.window.focus()使當前的窗口在所有窗口之前. 64.blur()指失去焦點.與FOCUS()相反. 65.select()指元素為選中狀態(tài). 66.防止用戶對文本框中輸入文本:onfocus="this.blur()" 67.取出該元素在頁面中出現(xiàn)的數(shù)量:document.all.tags("div(或其它HTML標記符)").length 68.JS中分為兩種窗體輸出:模態(tài)和非模態(tài).window.showModaldialog(),window.showModeless() 69.狀態(tài)欄文字的設(shè)置:window.status='文字',默認的狀態(tài)欄文字設(shè)置:window.defaultStatus = '文字.'; 70.添加到收藏夾:external.AddFavorite("http://www.xrss.cn","jaskdlf"); 71.JS中遇到腳本錯誤時不做任何操作:window.onerror = doNothing; 指定錯誤句柄的語法為:window.onerror = handleError; 72.JS中指定當前打開窗口的父窗口:window.opener,支持opener.opener...的多重繼續(xù). 73.JS中的self指的是當前的窗口 74.JS中狀態(tài)欄顯示內(nèi)容:window.status="內(nèi)容" 75.JS中的top指的是框架集中最頂層的框架 76.JS中關(guān)閉當前的窗口:window.close(); 77.JS中提出是否確認的框:if(confirm("Are you sure?")){alert("ok");}else{alert("Not Ok");} 78.JS中的窗口重定向:window.navigate("http://www.sina.com.cn"); 79.JS中的打印:window.print() 80.JS中的提示輸入框:window.prompt("message","defaultReply"); 81.JS中的窗口滾動條:window.scroll(x,y) 82.JS中的窗口滾動到位置:window.scrollby 83.JS中設(shè)置時間間隔:setInterval("expr",msecDelay)或setInterval(funcRef,msecDelay)或setTimeout 84.JS中的模態(tài)顯示在IE4+行,在NN中不行:showModalDialog("URL"[,arguments][,features]); 85.JS中的退出之前使用的句柄:function verifyClose(){event.returnValue="we really like you and hope you will stay longer.";}} window.onbeforeunload=verifyClose; 86.當窗體第一次調(diào)用時使用的文件句柄:onload() 87.當窗體關(guān)閉時調(diào)用的文件句柄:onunload() 88.window.location的屬性: protocol(http:),hostname(www.example.com),port(80),host(www.example.com:80),pathname("/a/a.html"),hash("#giantGizmo",指跳轉(zhuǎn)到相應(yīng)的錨記),href(全部的信息) 89.window.location.reload()刷新當前頁面. 89-1.parent.location.reload()刷新父親對象(用于框架) 89-2.opener.location.reload()刷新父窗口對象(用于單開窗口) 89-3.top.location.reload()刷新最頂端對象(用于多開窗口) 90.window.history.back()返回上一頁,window.history.forward()返回下一頁,window.history.go(返回第幾頁,也可以使用訪問過的URL) 91.document.write()不換行的輸出,document.writeln()換行輸出 92.document.body.noWrap=true;防止鏈接文字折行. 93.變量名.charAt(第幾位),取該變量的第幾位的字符. 94."abc".charCodeAt(第幾個),返回第幾個字符的ASCii碼值. 95.字符串連接:string.concat(string2),或用+=進行連接 96.變量.indexOf("字符",起始位置),返回第一個出現(xiàn)的位置(從0開始計算) 97.string.lastIndexOf(searchString[,startIndex])最后一次出現(xiàn)的位置. 98.string.match(regExpression),判斷字符是否匹配. 99.string.replace(regExpression,replaceString)替換現(xiàn)有字符串. 100.string.split(分隔符)返回一個數(shù)組存儲值. 101.string.substr(start[,length])取從第幾位到指定長度的字符串. 102.string.toLowerCase()使字符串全部變?yōu)樾? 103.string.toUpperCase()使全部字符變?yōu)榇髮? 104.parseInt(string[,radix(代表進制)])強制轉(zhuǎn)換成整型. 105.parseFloat(string[,radix])強制轉(zhuǎn)換成浮點型. 106.isNaN(變量):測試是否為數(shù)值型. 107.定義常量的關(guān)鍵字:const,定義變量的關(guān)鍵字:var
<button onClick="add()">add</button> <button onClick="del()">del</button> <button onClick="test()">test</button> <table id="t1" border="1"></table> <script language="JavaScript"> var n=0; function add(){ n++; t1.insertRow().insertCell().innerHTML = '<input type="radio" name="tt"><input name="test'+n+'"><button onclick="deleteRow(this)">delthis</button>'; //t1.insertRow().insertCell().innerHTML = '<input type="radio" name="tt"><input name="test'+t1.rows.length+'">'; } function del(){ var c = document.getElementsByName('tt'); for(var i=0; i<c.length; i++) if(c[i].checked) t1.deleteRow(i); } function deleteRow(obj){ alert(obj.parentElement.parentElement.parentElement.parentElement.id); alert(obj.parentElement.parentElement.rowIndex); //t1.deleteRow(obj.parentElement.parentElement.rowIndex); } function test(){ for(i=0;i<t1.rows.length;i++) alert(t1.rows[i].cells[0].innerHTML); } </SCRIPT>
<html> <body> <form id="myForm"> <table id="table1"> <tr id="tr1"> <td id="td1"> <input id="myButton" type="button" value="Show my parent" onclick="function1();"> </td> </tr> </table> </form> <script language="JavaScript"> function function1() { var m = document.all.myButton.parentElement.parentElement.parentElement.parentElement.id; alert("Parent element: <FORM>, ID = "+'"'+m+'"'); } </script> cloneNode()方法克隆表格: <input type=button value=clone name=ok onclick=add()> <table border=1> <tr id=a1 name=a1> <td><input></td><td><input></td> </tr> </table> <script language=JavaScript> i=1 function add(){ ++i; var newTR = a1.cloneNode(true); newTR.id="a"+i; newTR.name="a"+i; a1.parentNode.insertAdjacentElement("beforeEnd",newTR); //alert(a1.parentElement.innerHTML); } </script>
appendChild() & removeChild()方法:(firefox only) <div id="oTest">1234 </div> <button onclick="oT=document.getElementById('oTest');oS=document.createElement('span');oS.textContent='1234 ';oT.appendChild(oS)">append +</button><button onclick="oT=document.getElementById('oTest');oT.removeChild(oT.lastChild)">remove -</button>
public int compareTo(String anotherString) 按字典順序比較兩個字符串。該比較基于字符串中各個字符的 Unicode 值。將此 String 對象表示的字符序列與參數(shù)字符串所表示的字符序列進行比較。如果按字典順序此 String 對象在參數(shù)字符串之前,則比較結(jié)果為一個負整數(shù)。如果按字典順序此 String 對象位于參數(shù)字符串之后,則比較結(jié)果為一個正整數(shù)。如果這兩個字符串相等,則結(jié)果為 0;compareTo 只有在方法 equals(Object) 返回 true 時才返回 0。 這是字典排序的定義。如果這兩個字符串不同,則要么它們在某個索引處具有不同的字符,該索引對二者均為有效索引,要么它們的長度不同,或者同時具備上述兩種情況。如果它們在一個或多個索引位置上具有不同的字符,假設(shè) k 是這類索引的最小值;則按照 < 運算符確定的那個字符串在位置 k 上具有較小的值,其字典順序在其他字符串之前。這種情況下,compareTo 返回這兩個字符串在位置 k 處的兩個不同的 char 值,即值: this.charAt(k)-anotherString.charAt(k) 如果它們沒有不同的索引位置,則較短字符串在字典順序上位于較長字符串的前面。這種情況下,compareTo 返回這兩個字符串長度的不同,即值: this.length()-anotherString.length() 指定者: 接口 Comparable<String> 中的 compareTo 參數(shù): anotherString - 要比較的 String。 返回: 如果參數(shù)字符串等于此字符串,則返回 0 值;如果按字典順序此字符串小于字符串參數(shù),則返回一個小于 0 的值;如果按字典順序此字符串大于字符串參數(shù),則返回一個大于 0 的值。 http://gceclub.sun.com.cn/download/Java_Docs/html/zh_CN/api/index.html 這個是jdk中文文檔
//字符串初始化 public String toString(String str){ if(str == null){ str = ""; } if(str.equals("null")){ str = ""; } str = str.trim(); return str; } //編碼轉(zhuǎn)換 public String toGBK(String str){ try{ if(str == null){ str = ""; }else{ str = new String(str.getBytes("ISO-8859-1"),"GBK"); } }catch(Exception e){ System.out.println("DealString::toGBK(String)運行時出錯:"+e; } } //UTF轉(zhuǎn)換 public String to Utf8String(String src){ byte[] b = src.getBytes(); char[] c = new char[b.length]; for(int i = 0; i < b.length; i++){ c[i] = (char)(b[i]&0x00FF); } return new String(c); } //字符分隔 public String[] splitStr(String str,char c){ str += c; int n = 0; for(int i = 0; i < str.length();i++){ if(str.charAt(i) == c){ n ++; } } String out[] = new String[n]; for(int i = 0; i < n; i++){ int index = str.indexOf(c); out[i] = str.substring(0,index); str = str.substring(index+1),str.length()); } return out; } //取得系統(tǒng)時間 public String getDateTime(){ java.text.SimpleDateFormat f = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String time = f.format(new java.util.Date()); return time; } //字符串替換 public String Replace(String source,String oldString,String newString){ StringBuffer output = new StringBuffer(); int lengthOfSource = source.length(); int lengthOfOld = oldString.length(); int posStart = 0; int pos; while((pos = source.indexOf(oldString,posStart)) >= 0){ output.append(source.substring(posStart,pos)); output.append(newString); posStart = pos + lengthOfOld; } if(posStart < lengthOfSource){ output.append(source.substring(posStart)); } return output.toString(); }
//日期之差 public long getDaysInterval(Date d1,Date d2){ return (d2.getTime() - d1.getTime())/86400000; } //字符串右格式化 public String toLengthStr(String instr,int len){ int n = instr.length(); for(int i = 0; i < (len - n); i++){ instr = " " + instr; } return instr; } //字符串左格式化 public String toLengthStr(String instr,int len){ int n = instr.length(); for(int i = 0; i < (len - n); i++){ instr = instr + " "; } return instr; } //字符串位長度 public int byteLength(String str){ return ((str.getBytes()).length); } //字符串位截取 public String strByteCopy(String str,int nEnd){ if(nEnd == 0){ return ""; } byte[] byteStr = str.getBytes(); int k = byteStr.length; String strSub = new String(byteStr,0,End<k?nEnd:k) if(strSub.length() == 0){ strSub = new String(byteStr,0,nEnd-1); } return strSub; }
摘要: 理論上說
,Ajax
由
HTML
、
JavaScript
?
技術(shù)、
DHTML
和
DOM
組成
.
?
... 閱讀全文
什么是 AJAX?
AJAX (異步 JavaScript 和 XML) 是個新產(chǎn)生的術(shù)語,專為描述JavaScript的兩項強大性能.這兩項性能在多年來一直被網(wǎng)絡(luò)開發(fā)者所忽略,直到最近Gmail, Google suggest和google Maps的橫空出世才使人們開始意識到其重要性.
這兩項被忽視的性能是:
??? * 無需重新裝載整個頁面便能向服務(wù)器發(fā)送請求. ??? * 對XML文檔的解析和處理.
步驟 1 – "請!" --- 如何發(fā)送一個HTTP請求
為了用JavaScript向服務(wù)器發(fā)送一個HTTP請求, 需要一個具備這種功能的類實例.
這樣的類首先由Internet Explorer以ActiveX對象引入, 被稱為XMLHTTP. 后來Mozilla, Safari 和其他
瀏覽器紛紛仿效, 提供了XMLHttpRequest類,它支持微軟的ActiveX對象所提供的方法和屬性.
因此, 為了創(chuàng)建一個跨瀏覽器的這樣的類實例(對象), 可以應(yīng)用如下代碼:
if (window.XMLHttpRequest) { // Mozilla, Safari, ... ??? http_request = new XMLHttpRequest(); } else if (window.ActiveXObject) { // IE ??? http_request = new ActiveXObject("Microsoft.XMLHTTP"); }
(上例對代碼做了一定簡化,這是為了解釋如何創(chuàng)建XMLHTTP類實例.
實際的代碼實例可參閱本篇步驟3.)
如果服務(wù)器的響應(yīng)沒有XML mime-type header,某些Mozilla瀏覽器可能無法正常工作. 為了解決這個
問題, 如果服務(wù)器響應(yīng)的header不是text/xml,可以調(diào)用其它方法修改該header.
http_request = new XMLHttpRequest(); http_request.overrideMimeType('text/xml');
接下來要決定當收到服務(wù)器的響應(yīng)后,需要做什么.這需要告訴HTTP請求對象用哪一個JavaScript函數(shù)
處理這個響應(yīng).可以將對象的onreadystatechange屬性設(shè)置為要使用的JavaScript的函數(shù)名,如下所示:
http_request.onreadystatechange = nameOfTheFunction;
注意:在函數(shù)名后沒有括號,也無需傳遞參數(shù).另外還有一種方法,可以在扉頁(fly)中定義函數(shù)及其對
響應(yīng)要采取的行為,如下所示:
http_request.onreadystatechange = function(){ ??? // do the thing };
在定義了如何處理響應(yīng)后,就要發(fā)送請求了.可以調(diào)用HTTP請求類的open()和send()方法, 如下所示:
http_request.open('GET', 'http://www.example.org/some.file', true); http_request.send(null);
??? * open()的第一個參數(shù)是HTTP請求方式 – GET, POST, HEAD 或任何服務(wù)器所支持的您想調(diào)用的方式
. 按照HTTP規(guī)范,該參數(shù)要大寫;否則,某些瀏覽器(如Firefox)可能無法處理請求.有關(guān)HTTP請求方法的詳
細信息可參考http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html W3C specs ??? * 第二個參數(shù)是請求頁面的URL.由于自身安全特性的限制,該頁面不能為第三方域名的頁面.同時一定
要保證在所有的頁面中都使用準確的域名,否則調(diào)用open()會得到"permission denied"的錯誤提示.一個
常見的錯誤是訪問站點時使用domain.tld,而當請求頁面時,卻使用www.domain.tld. ??? * 第三個參數(shù)設(shè)置請求是否為異步模式.如果是TRUE, JavaScript函數(shù)將繼續(xù)執(zhí)行,而不等待服務(wù)器響
應(yīng).這就是"AJAX"中的"A".
如果第一個參數(shù)是"POST",send()方法的參數(shù)可以是任何想送給服務(wù)器的數(shù)據(jù). 這時數(shù)據(jù)要以字符串
的形式送給服務(wù)器,如下所示:
name=value&anothername=othervalue&so=on
步驟 2 – "收到!" --- 處理服務(wù)器的響應(yīng)
當發(fā)送請求時,要提供指定處理響應(yīng)的JavaScript函數(shù)名.
http_request.onreadystatechange = nameOfTheFunction;
我們來看看這個函數(shù)的功能是什么.首先函數(shù)會檢查請求的狀態(tài).如果狀態(tài)值是4,就意味著一個完整的
服務(wù)器響應(yīng)已經(jīng)收到了,您將可以處理該響應(yīng).
if (http_request.readyState == 4) { ??? // everything is good, the response is received } else { ??? // still not ready }
readyState的取值如下:
??? * 0 (未初始化) ??? * 1 (正在裝載) ??? * 2 (裝載完畢) ??? * 3 (交互中) ??? * 4 (完成)
(Source)
接著,函數(shù)會檢查HTTP服務(wù)器響應(yīng)的狀態(tài)值. 完整的狀態(tài)取值可參見 W3C site. 我們著重看值為200
OK的響應(yīng).
if (http_request.status == 200) { ??? // perfect! } else { ??? // there was a problem with the request, ??? // for example the response may be a 404 (Not Found) ??? // or 500 (Internal Server Error) response codes }
在檢查完請求的狀態(tài)值和響應(yīng)的HTTP狀態(tài)值后, 您就可以處理從服務(wù)器得到的數(shù)據(jù)了.有兩種方式可
以得到這些數(shù)據(jù):
??? * http_request.responseText – 以文本字符串的方式返回服務(wù)器的響應(yīng) ??? * http_request.responseXML –
以XMLDocument對象方式返回響應(yīng).處理XMLDocument對象可以用JavaScript DOM函數(shù)
步驟 3 – "萬事俱備!" - 簡單實例
我們現(xiàn)在將整個過程完整地做一次,發(fā)送一個簡單的HTTP請求. 我們用JavaScript請求一個HTML文件,
test.html, 文件的文本內(nèi)容為"I'm a test.".然后我們"alert()"test.html文件的內(nèi)容.
??? style="cursor: pointer; text-decoration: underline" ??? onclick="makeRequest('test.html')"> ??????? Make a request
本例中:
??? * 用戶點擊瀏覽器上的"請求"鏈接; ??? * 接著函數(shù)makeRequest()將被調(diào)用.其參數(shù) – HTML文件test.html在同一目錄下; ??? * 這樣就發(fā)起了一個請求.onreadystatechange的執(zhí)行結(jié)果會被傳送給alertContents(); ??? * alertContents()將檢查服務(wù)器的響應(yīng)是否成功地收到,如果是,就會"alert()"test.html文件的內(nèi)
容.
步驟 4 – "X-文檔" --- 處理XML響應(yīng)
在前面的例子中,當服務(wù)器對HTTP請求的響應(yīng)被收到后,我們會調(diào)用請求對象的reponseText屬性.該屬
性包含了test.html文件的內(nèi)容.現(xiàn)在我們來試試responseXML屬性.
首先,我們新建一個有效的XML文件,后面我們將使用這個文件.該文件(test.xml)源代碼如下所示:
??? I'm a test.
在該腳本中,我們只需修改請求部分:
... onclick="makeRequest('test.xml')"> ...
接著,在alertContents()中,我們將alert()的代碼alert(http_request.responseText);換成:
var xmldoc = http_request.responseXML; var root_node = xmldoc.getElementsByTagName('root').item(0); alert(root_node.firstChild.data);
這里,我們使用了responseXML提供的XMLDocument對象并用DOM方法獲取存于XML文件中的內(nèi)容.
|