|
文件的建立/检查与删除 <%@ 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> 取得虚拟目录对应的磁盘路径<br> Web站点主目录的位置为<font color=#ff0000><%=request.getRealPath("/")%></font><br> JSP网页所在的目录位置<font color=#ff0000><%=request.getRealPath("./")%></font><br> JSP网页所在目录上一层目录的位置<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对象数组 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)//判断是否已读到文件的结尾 { out.print("AtEnd.txt文件中没有数据<br>"); }else{ out.println("AtEnd.txt文件中有数据"); } fr.close(); %> </body> </html>
读取所有的文件数据 <%@ page contentType="text/html;charset=gb2312"%> <%@ page import="java.io.*,java.lang.*"%> <html> <head> <title>读取所有的文件数据</title> </head> <body> <% String path=request.getRealPath("."); FileReader fr=new FileReader(path + "\\ReadData.txt"); //关键在于读取过程中,要判断所读取的字符是否已经到了文件的末尾,并且这个字符是不是文件中的断行符,即判断该字符值是否为13。 int c=fr.read();//从文件中读取一个字符 //判断是否已读到文件结尾 while(c!=-1){ out.print((char)c);//输出读到的数据 c=fr.read();//从文件中继续读取数据 if(c==13){//判断是否为断行字符 out.print("<br>");//输出分行标签 fr.skip(1);//略过一个字符 //c=fr.read();//读取一个字符 } } fr.close(); %> </body> </html>
一行一行读取数据 <%@ 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>");//输出从文件中读取的数据 Line=br.readLine();//从文件中继续读取一行数据 } br.close();//关闭BufferedReader对象 fr.close();//关闭文件 %> </body> </html>
略过文件中的字符不读取 <%@ 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 + "\\ReadData.txt"); fr.skip(2);//跳过2个字节 int c=fr.read();//读取一个字节 while(c!=-1){ out.print((char)c); c=fr.read(); } fr.close(); %> </body> </html>
将数据写入文件 <%@ page contentType="text/html;charset=gb2312"%> <%@ page import="java.io.*"%> <html> <head> <title>将数据写入文件</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(); //读取一行数据 out.println(Line + "<br>"); br.close();//关闭BufferedReader对象 fr.close(); %> </body> </html>
将写入文件的数据分行 <%@ page contentType="text/html;charset=gb2312"%> <%@ page import="java.io.*"%> <html> <head> <title>将写入文件的数据分行</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();//将数据更新至文件 fw.close();//关闭文件流 out.println("写入文件内容为:<br>"); FileReader fr=new FileReader(path + "\\WriteData.txt"); BufferedReader br=new BufferedReader(fr); String Line=br.readLine();//读取一行数据 while(Line!=null){ out.println(Line + "<br>"); Line=br.readLine(); } fr.close(); %> </body> </html> 如何将数据追加写入到文件 <%@ page contentType="text/html;charset=gb2312"%> <%@ page import="java.io.*"%> <html> <head> <title>将写入文件的数据分行</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();//关闭文件流 out.println("写入文件内容为:<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();//关闭文件 %> </body> </html></I></I></I></I>
JDK1.5 令我们期待很久,可是当他发布的时候却更换版本号为5.0。这说明Java已经有大幅度的变化。本文将讲解JDK5.0支持的新功能-----Java的 泛型. 1、Java泛型 其实Java的泛型就是创建一个用类型作为参数的类。就象我们写类的方法一样,方法是这样的 method( String str1,String str2 ),方法中参数str1、str2的值是可变的。而泛型也是一样的,这样写 class Java_Generics<K,V>,这里边的K和V就象方法中的参数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遍事.),不过看看是不是创建一个用类型作为参数的类,参数是K,V,传入的“值”是String类型。这个类他没有特定的待处理型别,以前我们 定义好了一个类,在输入输入参数有所固定,是什么型别的有要求,但是现在编写程序,完全可以不制定参数的类型,具体用的时候来确定,增加了程序的通用性,像是一个 模板。 呵呵,类似C++的模板(类似)。 1.1. 泛型通配符 下面我们先看看这些程序:
//Code list 2 void TestGen0Medthod1(List l) { for (Object o : l) System.out.println(o); } |
看看这个方法有没有异议,这个方法会通过编译的,假如你传入String,就是这样List<String>。 接着我们调用它,问题就出现了,我们将一个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的关系,就是说List<String>不隶属于list<Object>,他们不是继承关系,所以是不行的,这里的extends是表示限制的。 类型通配符是很神奇的,List<?>这个你能为他做什么呢?怎么都是“?”,它似乎不确定,他总不能返回一个?作为类型的数据吧,是啊他是不会返回一个“?”来问程序员的?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) 在定义一个泛型类的时候,在 “<>”之间定义形式类型参数,例如:“class TestGen<K,V>”,其中“K” , “V”不代表值,而是表示类型。 2) 实例化泛型对象的时候,一定要在类名后面指定类型参数的值(类型),一共要有两次书写。例如: TestGen<String,String> t=new TestGen<String,String>(); 3) 泛型中<K extends Object>,extends并不代表继承,它是类型范围限制。 2、泛型与数据类型转换 2.1. 消除类型转换 上面的例子大家看到什么了,数据类型转换的代码不见了。在以前我们经常要书写以下代码,如:
//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); } } |
这个我们做了类型转换,是不是感觉很烦的,并且强制类型转换会带来潜在的危险,系统可能会抛一个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,这样就不用我们来编写类型转换的代码了,类型转换的过程交给编译器来处理,是不是很方便,而且很安全。上面是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之前我们只能忍着了,现在这种问题已经解决了,请看下面这个方法。我们传入一个int这一基本型别,然后再将i的值直接添加到List中,其实List是不能储存基本型别的,List中应该存储对象,这里编译器将int包装成Integer,然后添加到List中去。接着我们用List.get(0);来检索数据,并返回对象再将对象解包装成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 限制泛型中类型参数的范围 也许你已经发现在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个上限。一个指定的类型参数可以具有一个或多个上限。具有多重限制的类型参数可以用于访问它的每个限制的方法和域。 2.4. 多态方法
//Code list 9 class TestGen { <T extends Object> public static List<T> make(T first) { return new List<T>(first); } } |
摘要: 摘要
Reflection 是Java被视为动态(或准动态)语言的一个关键性质。这个机制允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息,包括其modifiers(诸如public, static 等等)、superclass(例如Object)、实现之interfaces(例如Cloneable),也包括fields和methods的所有信息,并可于... 阅读全文
首先它需要一个装箱单,把你的所有资源文件包括html,img文件还有WEB-INF文件夹等等。然后在这个文件夹内建一个新的文件夹META-INF。在META-INF文件夹内建一个txt文件,输入Manifest-Version: 1.0并保存为MANIFEST.MF。然后将你这个文件夹压,注意压成zip格式。完成后将后缀名改为war就可以了。 你也可以通过相关工具打包,比如JBuilder。 关于Tomcat发布和普通的web发布一样。 嘗試上面方法沒成功 我把jar.exeCOPY到目錄裡用下面方法可以了,
(1):打包war :进入 工程 应用的根目录,
比如: <CATALINA_HOME>/webapps/myjspweb ;
(2)把整个 web 应用打包为 myjspwar.war 文件,命令如下: jar cvf myjspweb.war *.*
(3):解包: jar xvf helloapp.war
1.document.write(""); 输出语句 2.JS中的注释为// 3.传统的HTML文档顺序是:document->html->(head,body) 4.一个浏览器窗口中的DOM顺序是:window->(navigator,screen,history,location,document) 5.得到表单中元素的名称和值:document.getElementById("表单中元素的ID号").name(或value) 6.一个小写转大写的JS: document.getElementById("output").value = document.getElementById("input").value.toUpperCase(); 7.JS中的值类型:String,Number,Boolean,Null,Object,Function 8.JS中的字符型转换成数值型:parseInt(),parseFloat() 9.JS中的数字转换成字符型:(""+变量) 10.JS中的取字符串长度是:(length) 11.JS中的字符与字符相连接使用+号. 12.JS中的比较操作符有:==等于,!=不等于,>,>=,<.<= 13.JS中声明变量使用:var来进行声明 14.JS中的判断语句结构:if(condition){}else{} 15.JS中的循环结构:for([initial expression];[condition];[upadte expression]) {inside loop} 16.循环中止的命令是:break 17.JS中的函数定义:function functionName([parameter],...){statement[s]} 18.当文件中出现多个form表单时.可以用document.forms[0],document.forms[1]来代替. 19.窗口:打开窗口window.open(), 关闭一个窗口:window.close(), 窗口本身:self 20.状态栏的设置:window.status="字符"; 21.弹出提示信息:window.alert("字符"); 22.弹出确认框:window.confirm(); 23.弹出输入提示框:window.prompt(); 24.指定当前显示链接的位置:window.location.href="URL" 25.取出窗体中的所有表单的数量:document.forms.length 26.关闭文档的输出流:document.close(); 27.字符串追加连接符:+= 28.创建一个文档元素:document.createElement(),document.createTextNode() 29.得到元素的方法:document.getElementById() 30.设置表单中所有文本型的成员的值为空: 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.复选按钮在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.字符串转成大写:string.toUpperCase(); 字符串转成小写:string.toLowerCase(); 37.返回字符串2在字符串1中出现的位置:String1.indexOf("String2")!=-1则说明没找到. 38.取字符串中指定位置的一个字符:StringA.charAt(9); 39.取出字符串中指定起点和终点的子字符串:stringA.substring(2,6); 40.数学函数:Math.PI(返回圆周率),Math.SQRT2(返回开方),Math.max(value1,value2)返回两个数中的最在值,Math.pow(value1,10)返回value1的十次方,Math.round(value1)四舍五入函数,Math.floor(Math.random()*(n+1))返回随机数 41.定义日期型变量:var today = new Date(); 42.日期函数列表:dateObj.getTime()得到时间,dateObj.getYear()得到年份,dateObj.getFullYear()得到四位的年份,dateObj.getMonth()得到月份,dateObj.getDate()得到日,dateObj.getDay()得到日期几,dateObj.getHours()得到小时,dateObj.getMinutes()得到分,dateObj.getSeconds()得到秒,dateObj.setTime(value)设置时间,dateObj.setYear(val)设置年,dateObj.setMonth(val)设置月,dateObj.setDate(val)设置日,dateObj.setDay(val)设置星期几,dateObj.setHours设置小时,dateObj.setMinutes(val)设置分,dateObj.setSeconds(val)设置秒 [注意:此日期时间从0开始计] 43.FRAME的表示方式: [window.]frames[n].ObjFuncVarName,frames["frameName"].ObjFuncVarName,frameName.ObjFuncVarName 44.parent代表父亲对象,top代表最顶端对象 45.打开子窗口的父窗口为:opener 46.表示当前所属的位置:this 47.当在超链接中调用JS函数时用:(Javascript:)来开头后面加函数名 48.在老的浏览器中不执行此JS:<!-- //--> 49.引用一个文件式的JS:<script type="text/Javascript" src="aaa.js"></script> 50.指定在不支持脚本的浏览器显示的HTML:<noscript></noscript> 51.当超链和ONCLICK事件都有时,则老版本的浏览器转向a.html,否则转向b.html.例:<a href="a.html" onclick="location.href='b.html';return false">dfsadf</a> 52.JS的内建对象有: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可设置元素是否可被修改,isContentEditable返回是否可修改的状态. 60.isDisabled判断是否为禁止状态.disabled设置禁止状态 61.length取得长度,返回整型数值 62.addBehavior()是一种JS调用的外部函数文件其扩展名为.htc 63.window.focus()使当前的窗口在所有窗口之前. 64.blur()指失去焦点.与FOCUS()相反. 65.select()指元素为选中状态. 66.防止用户对文本框中输入文本:onfocus="this.blur()" 67.取出该元素在页面中出现的数量:document.all.tags("div(或其它HTML标记符)").length 68.JS中分为两种窗体输出:模态和非模态.window.showModaldialog(),window.showModeless() 69.状态栏文字的设置:window.status='文字',默认的状态栏文字设置:window.defaultStatus = '文字.'; 70.添加到收藏夹:external.AddFavorite("http://www.xrss.cn","jaskdlf"); 71.JS中遇到脚本错误时不做任何操作:window.onerror = doNothing; 指定错误句柄的语法为:window.onerror = handleError; 72.JS中指定当前打开窗口的父窗口:window.opener,支持opener.opener...的多重继续. 73.JS中的self指的是当前的窗口 74.JS中状态栏显示内容:window.status="内容" 75.JS中的top指的是框架集中最顶层的框架 76.JS中关闭当前的窗口: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中设置时间间隔:setInterval("expr",msecDelay)或setInterval(funcRef,msecDelay)或setTimeout 84.JS中的模态显示在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.当窗体第一次调用时使用的文件句柄:onload() 87.当窗体关闭时调用的文件句柄:onunload() 88.window.location的属性: protocol(http:),hostname(www.example.com),port(80),host(www.example.com:80),pathname("/a/a.html"),hash("#giantGizmo",指跳转到相应的锚记),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("字符",起始位置),返回第一个出现的位置(从0开始计算) 97.string.lastIndexOf(searchString[,startIndex])最后一次出现的位置. 98.string.match(regExpression),判断字符是否匹配. 99.string.replace(regExpression,replaceString)替换现有字符串. 100.string.split(分隔符)返回一个数组存储值. 101.string.substr(start[,length])取从第几位到指定长度的字符串. 102.string.toLowerCase()使字符串全部变为小写. 103.string.toUpperCase()使全部字符变为大写. 104.parseInt(string[,radix(代表进制)])强制转换成整型. 105.parseFloat(string[,radix])强制转换成浮点型. 106.isNaN(变量):测试是否为数值型. 107.定义常量的关键字:const,定义变量的关键字: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 对象表示的字符序列与参数字符串所表示的字符序列进行比较。如果按字典顺序此 String 对象在参数字符串之前,则比较结果为一个负整数。如果按字典顺序此 String 对象位于参数字符串之后,则比较结果为一个正整数。如果这两个字符串相等,则结果为 0;compareTo 只有在方法 equals(Object) 返回 true 时才返回 0。 这是字典排序的定义。如果这两个字符串不同,则要么它们在某个索引处具有不同的字符,该索引对二者均为有效索引,要么它们的长度不同,或者同时具备上述两种情况。如果它们在一个或多个索引位置上具有不同的字符,假设 k 是这类索引的最小值;则按照 < 运算符确定的那个字符串在位置 k 上具有较小的值,其字典顺序在其他字符串之前。这种情况下,compareTo 返回这两个字符串在位置 k 处的两个不同的 char 值,即值: this.charAt(k)-anotherString.charAt(k) 如果它们没有不同的索引位置,则较短字符串在字典顺序上位于较长字符串的前面。这种情况下,compareTo 返回这两个字符串长度的不同,即值: this.length()-anotherString.length() 指定者: 接口 Comparable<String> 中的 compareTo 参数: anotherString - 要比较的 String。 返回: 如果参数字符串等于此字符串,则返回 0 值;如果按字典顺序此字符串小于字符串参数,则返回一个小于 0 的值;如果按字典顺序此字符串大于字符串参数,则返回一个大于 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; } //編碼轉換 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轉換 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; } //取得系統時間 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
™
技術、
DHTML
和
DOM
組成
.
... 阅读全文
什么是 AJAX?
AJAX (异步 JavaScript 和 XML) 是个新产生的术语,专为描述JavaScript的两项强大性能.这两项性能在多年来一直被网络开发者所忽略,直到最近Gmail, Google suggest和google Maps的横空出世才使人们开始意识到其重要性.
这两项被忽视的性能是:
* 无需重新装载整个页面便能向服务器发送请求. * 对XML文档的解析和处理.
步骤 1 – "请!" --- 如何发送一个HTTP请求
为了用JavaScript向服务器发送一个HTTP请求, 需要一个具备这种功能的类实例.
这样的类首先由Internet Explorer以ActiveX对象引入, 被称为XMLHTTP. 后来Mozilla, Safari 和其他
浏览器纷纷仿效, 提供了XMLHttpRequest类,它支持微软的ActiveX对象所提供的方法和属性.
因此, 为了创建一个跨浏览器的这样的类实例(对象), 可以应用如下代码:
if (window.XMLHttpRequest) { // Mozilla, Safari, ... http_request = new XMLHttpRequest(); } else if (window.ActiveXObject) { // IE http_request = new ActiveXObject("Microsoft.XMLHTTP"); }
(上例对代码做了一定简化,这是为了解释如何创建XMLHTTP类实例.
实际的代码实例可参阅本篇步骤3.)
如果服务器的响应没有XML mime-type header,某些Mozilla浏览器可能无法正常工作. 为了解决这个
问题, 如果服务器响应的header不是text/xml,可以调用其它方法修改该header.
http_request = new XMLHttpRequest(); http_request.overrideMimeType('text/xml');
接下来要决定当收到服务器的响应后,需要做什么.这需要告诉HTTP请求对象用哪一个JavaScript函数
处理这个响应.可以将对象的onreadystatechange属性设置为要使用的JavaScript的函数名,如下所示:
http_request.onreadystatechange = nameOfTheFunction;
注意:在函数名后没有括号,也无需传递参数.另外还有一种方法,可以在扉页(fly)中定义函数及其对
响应要采取的行为,如下所示:
http_request.onreadystatechange = function(){ // do the thing };
在定义了如何处理响应后,就要发送请求了.可以调用HTTP请求类的open()和send()方法, 如下所示:
http_request.open('GET', 'http://www.example.org/some.file', true); http_request.send(null);
* open()的第一个参数是HTTP请求方式 – GET, POST, HEAD 或任何服务器所支持的您想调用的方式
. 按照HTTP规范,该参数要大写;否则,某些浏览器(如Firefox)可能无法处理请求.有关HTTP请求方法的详
细信息可参考http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html W3C specs * 第二个参数是请求页面的URL.由于自身安全特性的限制,该页面不能为第三方域名的页面.同时一定
要保证在所有的页面中都使用准确的域名,否则调用open()会得到"permission denied"的错误提示.一个
常见的错误是访问站点时使用domain.tld,而当请求页面时,却使用www.domain.tld. * 第三个参数设置请求是否为异步模式.如果是TRUE, JavaScript函数将继续执行,而不等待服务器响
应.这就是"AJAX"中的"A".
如果第一个参数是"POST",send()方法的参数可以是任何想送给服务器的数据. 这时数据要以字符串
的形式送给服务器,如下所示:
name=value&anothername=othervalue&so=on
步骤 2 – "收到!" --- 处理服务器的响应
当发送请求时,要提供指定处理响应的JavaScript函数名.
http_request.onreadystatechange = nameOfTheFunction;
我们来看看这个函数的功能是什么.首先函数会检查请求的状态.如果状态值是4,就意味着一个完整的
服务器响应已经收到了,您将可以处理该响应.
if (http_request.readyState == 4) { // everything is good, the response is received } else { // still not ready }
readyState的取值如下:
* 0 (未初始化) * 1 (正在装载) * 2 (装载完毕) * 3 (交互中) * 4 (完成)
(Source)
接着,函数会检查HTTP服务器响应的状态值. 完整的状态取值可参见 W3C site. 我们着重看值为200
OK的响应.
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 }
在检查完请求的状态值和响应的HTTP状态值后, 您就可以处理从服务器得到的数据了.有两种方式可
以得到这些数据:
* http_request.responseText – 以文本字符串的方式返回服务器的响应 * http_request.responseXML –
以XMLDocument对象方式返回响应.处理XMLDocument对象可以用JavaScript DOM函数
步骤 3 – "万事俱备!" - 简单实例
我们现在将整个过程完整地做一次,发送一个简单的HTTP请求. 我们用JavaScript请求一个HTML文件,
test.html, 文件的文本内容为"I'm a test.".然后我们"alert()"test.html文件的内容.
style="cursor: pointer; text-decoration: underline" onclick="makeRequest('test.html')"> Make a request
本例中:
* 用户点击浏览器上的"请求"链接; * 接着函数makeRequest()将被调用.其参数 – HTML文件test.html在同一目录下; * 这样就发起了一个请求.onreadystatechange的执行结果会被传送给alertContents(); * alertContents()将检查服务器的响应是否成功地收到,如果是,就会"alert()"test.html文件的内
容.
步骤 4 – "X-文档" --- 处理XML响应
在前面的例子中,当服务器对HTTP请求的响应被收到后,我们会调用请求对象的reponseText属性.该属
性包含了test.html文件的内容.现在我们来试试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文件中的内容.
|