2. 新建工程,結(jié)構(gòu)如下:
其中,涉及到的jar包可以在spring-security包中的例子中獲取
3、配置spring-security.xml
4.配置web.xml
5.index.jsp
6部署應(yīng)用,在首次瀏覽index.jsp時,由于沒登錄,spring security會自動生成登錄頁面,頁面內(nèi)容如下:
7輸入用戶名和密碼,user,則進(jìn)入首頁
至此,簡單的權(quán)限控制完成,在index頁面中通過session可以看到存入session中的用戶信息。
系統(tǒng):CentOS6.0 安裝的Xen版本:4.1.2
在centos下安裝xen不是很順利,遇到很多問題。安裝過程主要參考了以下兩個文檔:
這個方法可以正常安裝xen,并指出RedHat 6 下安裝xen 會遇到的問題,只是安裝過程復(fù)雜,不是源碼安裝。
http://www.cnblogs.com/feisky/archive/2012/04/10/2441307.html
這個是xen的源碼編譯安裝,也是centos下,安裝xen 4.1.2,但是經(jīng)過實踐,這樣安裝出來存在一些問題,很意外的。解決起來很頭痛。
在上面這個方法上,具體的描述我的安裝過程。
系統(tǒng)和安裝的xen版本上面有介紹,開始著手安裝xen了。
1.下載Xen的源碼
1 wget http://bits.xensource.com/oss-xen/release/4.1.2/xen-4.1.2.tar.gz
2.安裝必備軟件包
1 yum groupinstall "Development Libraries" 2 yum groupinstall "Development Tools" 3 yum install transfig wget texi2html libaio-devel dev86 glibc-devel e2fsprogs-devel gitk mkinitrd iasl xz-devel 4 bzip2-devel pciutils-libs pciutils-devel SDL-devel libX11-devel gtk2-devel bridge-utils PyXML qemu-common qemu-img mercurial libidn-devel 5 yum -y install glibc-devel.i686texinfo libuuid-devel iasl python-lxml 6 yum -y install openssl openssl-devel 7 yum -y install ncurses ncurses-* 8 yum -y install python-devel
3.編譯安裝Xen hypervisor
1 tar zxvf xen-4.1.2.tar.gz 2 cd xen-4.1.2 3 make world
在此可能會遇到如下問題:
解決辦法:yum –y install texinfo
1 make install
4.將Xen加入到啟動腳本:
1 /sbin/chkconfig --add xend 2 /sbin/chkconfig --add xencommons 3 /sbin/chkconfig --add xendomains 4 /sbin/chkconfig xend on 5 /sbin/chkconfig xendomains on 6 /sbin/chkconfig xencommons on
5.編譯安裝Linux3.1.2內(nèi)核
1 wget http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.1.2.tar.bz2 2 tar -jxvf linux-3.1.3.tar.bz2 3 make menuconfig 4 5 Processor type and features --- > 6 選中Paravirtualized Guest Support 7 Device Drivers ---> 8 Xen driver support ---> 9 全部選* 10 11 修改:CONFIG_XEN_DEV_EVTCHN=y(如果是m,開機時無法啟動xencommons)
注意:僅僅上面的是不夠的,還需要修改:否則在創(chuàng)建虛擬機的過程中遇到這樣的問題:
注意:Device 0 (vif) could not be connected. HotPlug scripts not working.
在.config文件中做如下修改,就可以解決問題了
1 CONFIG_XEN_BLKDEV_BACKEND=m 2 CONFIG_XEN_NETDEV_BACKEND=m
接下來開始編譯安裝了:
1 make 2 make modules 3 make modules_install 4 make install 5 depmod 3.1.2 6 mkinitrd -v -f --with=aacraid --with=sd_mod --with=scsi_mod initramfs-3.1.2.img 3.1.2
6.配置grub:
1 title Xen (3.1.2-xen) 2 root (hd0,0) 3 kernel /xen-4.1.2.gz dom0_mem=512M 4 module /vmlinuz-3.1.2 ro root=UUID=3f920108-b74b-46b9-81c2-aff834494381 5 rd_DM_UUID=ddf1_4c5349202020202010000055000000004711471100001450 rd_NO_LUKS rd_NO_LVM rd_NO_MD LANG=en_US.UTF-8 6 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us crashkernel=auto rhgb quiet 7 module /initramfs-3.1.2.img
這個配置在第4行后面root=UUID隨自己的系統(tǒng)
7.安裝virt-manager
1 yum install libvirt virt-manager xorg-x11-xauth
8. 重新編譯libvirt
在文章前面第一個鏈接中,說明了,redhat6系統(tǒng)中,默認(rèn)的libvirt是不支持xen的,如果直接使用默認(rèn)的這會出現(xiàn)如下的問題:
注意virt-manager & 這個命令中的'&' 代表該進(jìn)程后臺運行
1 [root@el6 ~]# virt-manager & 2 [1] 2867 3 Unable to open connection to hypervisor URI 'xen:///': 4 no connection driver available for xen:/// 5 Traceback (most recent call last): 6 File "/usr/share/virt-manager/virtManager/connection.py", line 992, in _try_open 7 None], flags) 8 File "/usr/lib64/python2.6/site-packages/libvirt.py", line 111, in openAuth 9 if ret is None:raise libvirtError('virConnectOpenAuth() failed') 10 libvirtError: no connection driver available for xen:///
開始重新編譯libvirt解決以上的問題。
以下的操作都在非xen系統(tǒng)中進(jìn)行:
沒個系統(tǒng)遇到的缺的包不一樣,我的系統(tǒng)中還缺失xen-devel包,并且在yum
1 [root@el6 ~]# cd /root/src 2 [root@el6 src]# wget ftp://ftp.redhat.com/pub/redhat/linux/enterprise/6Server/en/os/SRPMS/libvirt-0.8.1-27.el6.src.rpm 3 [root@el6 src]# rpm -i libvirt-0.8.1-27.el6.src.rpm 4 [root@el6 src]# wget http://pasik.reaktio.net/xen/patches/libvirt-spec-rhel6-enable-xen.patch 5 [root@el6 src]# cd /root/rpmbuild/SPECS 6 [root@el6 SPECS]# cp -a libvirt.spec libvirt.spec.orig 7 [root@el6 SPECS]# patch -p0 < ~/src/libvirt-spec-rhel6-enable-xen.patch 8 patching file libvirt.spec 9 10 [root@el6 SPECS]# rpmbuild -bb libvirt.spec 11 error: Failed build dependencies: 12 libnl-devel >= 1.1 is needed by libvirt-0.8.1-27.el6.x86_64 13 xhtml1-dtds is needed by libvirt-0.8.1-27.el6.x86_64 14 libudev-devel >= 145 is needed by libvirt-0.8.1-27.el6.x86_64 15 libpciaccess-devel >= 0.10.9 is needed by libvirt-0.8.1-27.el6.x86_64 16 yajl-devel is needed by libvirt-0.8.1-27.el6.x86_64 17 libpcap-devel is needed by libvirt-0.8.1-27.el6.x86_64 18 avahi-devel is needed by libvirt-0.8.1-27.el6.x86_64 19 parted-devel is needed by libvirt-0.8.1-27.el6.x86_64 20 device-mapper-devel is needed by libvirt-0.8.1-27.el6.x86_64 21 numactl-devel is needed by libvirt-0.8.1-27.el6.x86_64 22 netcf-devel >= 0.1.4 is needed by libvirt-0.8.1-27.el6.x86_64 23 [root@el6 SPECS]# yum install libnl-devel xhtml1-dtds libudev-devel libpciaccess-devel yajl-devel libpcap-devel avahi-devel parted-devel device-mapper-devel numactl-devel netcf-devel
安裝的時候,提示No packages xen-devel available 。
在多次替換yum源之后,依然無法解決這個xen-devel包缺失的問題。
隨后的解決方案如下:
在網(wǎng)上下載xen-devel rpm 包,安裝遇到依賴問題,接著下載xen-libs rpm 包,接著還有其他的依賴問題,同樣查找。
具體鏈接: 搜索xen-devel,找到符合系統(tǒng)版本的
1 http://rpm.pbone.net/index.php3
我下載的版本是:
xen-devel-4.1.2_03-1.1.x86_64.rpm
安裝xen-devel還依賴其他的包,如下:
xen-libs-4.1.2_03-1.1.x86_64.rpm
liblzma5-5.0.3-7.1.x86_64.rpm
glibc-common-2.14.90-14.x86_64.rpm
glibc-2.14.90-14.x86_64.rpm
強制安裝如上的包。
如果缺少依賴包,依次去下載對應(yīng)版本,解決問題。這個過程很蛋疼。
如果所有的依賴包都安裝上后,接著下面的操作:
1 [root@gb31 SPECS]# rpmbuild -bb libvirt.spec 2 After a while you'll see: 3 Wrote: /root/rpmbuild/RPMS/x86_64/libvirt-0.8.1-27.el6.x86_64.rpm 4 Wrote: /root/rpmbuild/RPMS/x86_64/libvirt-client-0.8.1-27.el6.x86_64.rpm 5 Wrote: /root/rpmbuild/RPMS/x86_64/libvirt-devel-0.8.1-27.el6.x86_64.rpm 6 Wrote: /root/rpmbuild/RPMS/x86_64/libvirt-python-0.8.1-27.el6.x86_64.rpm 7 Wrote: /root/rpmbuild/RPMS/x86_64/libvirt-debuginfo-0.8.1-27.el6.x86_64.rpm
如果有如上的顯示則安裝成功。
如果遇到屏幕顯示test 。。 一直卡住之后,卸載掉系統(tǒng)中已經(jīng)安裝的libvirt包,再重新嘗試,即可。
接著如下:注意,可能版本不一樣
如果還顯示存在test失敗,make失敗,與libvirt版本相關(guān),這個問題很蛋疼,多試下幾個版本吧。就可以解決。
1 [root@el6 ~]# cd /root/rpmbuild/RPMS/x86_64/ 2 [root@el6 x86_64]# rpm -Uvh --force libvirt-0.8.1-27.el6.x86_64.rpm libvirt-client-0.8.1-27.el6.x86_64.rpm libvirt-python-0.8.1-27.el6.x86_64.rpm 3 Preparing... ########################################### [100%] 4 1:libvirt-client ########################################### [ 33%] 5 2:libvirt ########################################### [ 67%] 6 3:libvirt-python ########################################### [100%]
9.進(jìn)入xen系統(tǒng)
重啟系統(tǒng),進(jìn)入xen系統(tǒng)。
嘗試輸入如下命令:xm-list ,xm-info
再接著嘗試如下命令:virt-install,嘗試著安裝虛擬機
如果顯示的錯誤如下:
1 ERROR unable to connect to ‘localhost:8000′: Connection refused
則需要去做如下修改:
1 解決方案:查看libvirtd服務(wù)是否啟動,關(guān)閉防火墻,在/etc/xen/xend-config.sxp 2 (xend-http-server yes) 3 # Port xend should use for the HTTP interface, if xend-http-server is set. 4 (xend-port 8000) 5 去掉上面兩個括弧的注釋,ok
再重新啟動xend服務(wù)
1 service xend restart
至此,可以嘗試在桌面上氣筒virtual machine manager 去創(chuàng)建虛擬機。
創(chuàng)建過程如果如下問題:
可以系統(tǒng)路勁的問題,在usr/lib/xen/bin下找到qemu-dm放到lib64下對應(yīng)的路徑。
就ok。
10.配置網(wǎng)橋橋接模式
修改ifcfg-eth0如下:
1 DEVICE="eth0" 2 BOOTPROTO="static" 3 HWADDR="**********“ 4 NM_CONTROLLED="no" 5 ONBOOT="yes" 6 IPADDR="*******” 7 NETMASK="255.255.0.0" 8 GATEWAY="********" 9 TYPE=Ethernet 10 DNS1="8.8.8.8" 11 DNS2="8.8.4.4" 12 BRIDGE=br100
創(chuàng)建ifcfg-br100文件,內(nèi)容如下:
1 DEVICE="br100" 2 BOOTPROTO="static" 3 HWADDR="*********" 4 NM_CONTROLLED="no" 5 ONBOOT="yes" 6 IPADDR="*******" 7 NETMASK="255.255.0.0" 8 GATEWAY="*******" 9 TYPE=Bridge 10 DEFROUTE=yes 11 DNS1="8.8.8.8" 12 DNS2="8.8.4.4"
11.ok,至此,xen的安裝結(jié)束了,可以放心大膽的創(chuàng)建虛擬機了。
String url="http://10.58.2.131:8088/spesBiz/test1.jsp";
String cmd = "cmd.exe /c start " + url;
try {
Process proc = Runtime.getRuntime().exec(cmd);
proc.waitFor();
}
catch (Exception e)
{
e.printStackTrace();
}
先是主程序:
import java.io.BufferedReader;
import java.io.FileReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.Date;
public class CheckTomcat {
private static String tomcatroot="";
private static String monitorurl="";
private static void checkTomcatIsAlive(String myurl) throws NullPointerException {
String s;
boolean isTomcatAlive = false;
java.io.BufferedReader in;
try {
System.out.println(">>>>>>檢測URL:"+myurl);
URL url = new URL(myurl);
URLConnection con = url.openConnection();
in = new java.io.BufferedReader(new java.io.InputStreamReader(con.getInputStream()));
con.setConnectTimeout(1000);
con.setReadTimeout(4000);
while ((s = in.readLine()) != null) {
if (s.length() > 0) {// 如果能夠讀取到頁面則證明可用,tomcat正常,否則繼續(xù)后面的重啟tomcat操作。
return;
}
}
in.close();
}catch (Exception ex) {
//ex.printStackTrace();
System.out.println("*************該URL有誤或不可訪問!");
}
/*if (isTomcatAlive) {
System.out.println("<" + new Date()+ "> Tomcat is alive but not response!");
stopTomcat();
}*/
RunTomcat runt=new RunTomcat();
runt.startTomcat(tomcatroot);
}
/*public static void stopTomcat() {
try {
//java.lang.Process p = java.lang.Runtime.getRuntime().exec("net stop /"Apache Tomcat/"");
java.lang.Process p = java.lang.Runtime.getRuntime().exec(tomcatroot+"bin//shutdown.bat");
java.io.BufferedReader in = new java.io.BufferedReader(new java.io.InputStreamReader(p.getInputStream()));
String s;
String t = "Using JRE_HOME";
boolean restart = false;
while ((s = in.readLine()) != null) {
if (s.indexOf(t) != -1) {
restart = true;
break;
}
}
System.out.println("<" + new Date() + "> Tomcat is stop "+ (restart ? "OK" : "ERROR"));
} catch (Exception e) {
e.printStackTrace();
}
}*/
public static void main(String[] args) {
System.out.println("********************************************************");
System.out.println("====本程序自動檢測Tomcat運行狀況,必要時自動重啟Tomcat。====");
System.out.println("********************************************************");
init_config();
if(monitorurl.equals(""))monitorurl="http://localhost:8080/ExchangeWeb/checkTomcat/monitor.jsp";
if(tomcatroot.equals(""))tomcatroot="F://tomcat-6.0.20//";
if(!tomcatroot.endsWith("//"))tomcatroot+="http://";
while (true) {
try {
String random="?random="+Math.random() * 65535;//=====處理數(shù)據(jù)緩存問題======
CheckTomcat.checkTomcatIsAlive(monitorurl+random);
Thread.sleep(5000);
System.out.println("========================checking at <"+new Date()+">");
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
static private void init_config() {
try{
CheckTomcat me=new CheckTomcat();
String maindir=me.getClass().getResource("/").toURI().getPath();
System.out.println(">>>>>>配置文件目錄:"+maindir);
String sLine;
String filename=maindir+"config.xml";
BufferedReader buffReader = new BufferedReader(new FileReader(filename));
while((sLine = buffReader.readLine())!=null)
{
sLine = sLine.trim();
if(sLine.trim()!="" && !sLine.equals("")){
if(sLine.toLowerCase().startsWith("tomcatroot")){
int npos=sLine.indexOf("tomcatroot");
npos+="tomcatroot".length();
tomcatroot=sLine.substring(npos).trim();
if(tomcatroot.startsWith("="))tomcatroot=tomcatroot.substring(1);
}
else if(sLine.toLowerCase().startsWith("monitorurl")){
int npos=sLine.indexOf("monitorurl");
npos+="monitorurl".length();
monitorurl=sLine.substring(npos).trim();
if(monitorurl.startsWith("="))monitorurl=monitorurl.substring(1);
}
}
}
buffReader=null;
}catch(Exception e){
e.printStackTrace();
System.out.println("********************************************************");
System.out.println("====讀取配置文件失??!系統(tǒng)無法運行,請與供應(yīng)商聯(lián)系。====");
System.out.println("********************************************************");
System.exit(0);
}
}
}
再是自動重啟Tomcat線程類:
import java.util.Date;
public class RunTomcat extends Thread {
private static String tomcatroot="";
public void startTomcat(String root) {
this.tomcatroot=root;
System.out.println(">>>>>>Tomcat即將啟動。。。");
System.out.println(">>>>>>Tomcat根目錄:"+tomcatroot);
try {
//java.lang.Process p = java.lang.Runtime.getRuntime().exec("net stop /"Apache Tomcat/"");
java.lang.Process p = java.lang.Runtime.getRuntime().exec(tomcatroot+"bin//shutdown.bat");
} catch (Exception e) {
e.printStackTrace();
}
try {
Thread.sleep(3000);//等待shutdown結(jié)束
//RunTomcat me=new RunTomcat();
//String maindir=me.getClass().getResource("/").toURI().getPath();
//java.lang.Process p = java.lang.Runtime.getRuntime().exec(maindir+"checkTomcat.bat");
java.lang.Process p = java.lang.Runtime.getRuntime().exec(tomcatroot+"bin//startup.bat");
java.io.BufferedReader in = new java.io.BufferedReader(new java.io.InputStreamReader(p.getInputStream()));
/*String s;
boolean restart = false;
String t = "Server startup in";
while ((s = in.readLine()) != null) {
System.out.println(s);
if (s.indexOf(t) != -1) {
restart = true;
break;
}
}*/
System.out.println(">>>>>>Tomcat start at <" + new Date() + ">");
} catch (Exception e) {
e.printStackTrace();
}
}
}
接著是檢測tomcat是否活動monitor.jsp文件:
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
out.println("path=" + path + "<br>");
out.println("basePath=" + basePath + "<br>");
out.println("ok<br>");
%>
然后是config.xml配置文件:
tomcatroot=F:/tomcat-6.0.20/
monitorurl=http://localhost:8080/ExchangeWeb/checkTomcat/monitor.jsp
最后是checkTomcat.bat批處理文件:
@echo off
rem=========第一步:配置下面的JAVA_HOME為JDK目錄==========#
@set JAVA_HOME=C:/Program Files/Java/jdk1.6.0_14
rem=========第二步:配置下面的CATALINA_HOME為Tomcat目錄==========#
@set CATALINA_HOME=F:/tomcat-6.0.20
@set PATH=%JAVA_HOME%/bin/;
@set CLASSPATH=%JAVA_HOME%/lib/rt.jar;%JAVA_HOME%/lib/tools.jar;%CATALINA_HOME%/lib/servlet-api.jar;%CATALINA_HOME%/lib/jsp-api.jar;
java CheckTomcat
測試時,只要雙擊執(zhí)行checkTomcat.bat文件即可。
顏色代碼表:以下樣色顯示您可能覺得不夠精確,這和電腦顯示器有直接關(guān)系。您可查看顏色代碼,絕對正確,絕無重復(fù)。
紅色和粉紅色,以及它們的16進(jìn)制代碼。 | |||||||||
#990033 | #CC6699 | #FF6699 | #FF3366 | #993366 | #CC0066 | #CC0033 | #FF0066 | #FF0033 | ..#CC3399.. |
#FF3399 | #FF9999 | #FF99CC | #FF0099 | #CC3366 | #FF66CC | #FF33CC | #FFCCFF | #FF99FF | #FF00CC |
紫紅色,以及它們的16進(jìn)制代碼。 | |||||||||
#FF66FF | #CC33CC | #CC00FF | #FF33FF | #CC99FF | #9900CC | #FF00FF | #CC66FF | #990099 | #CC0099 |
#CC33FF | #CC99CC | #990066 | #993399 | #CC66CC | #CC00CC | #663366 | |||
藍(lán)色,以及它們的16進(jìn)制代碼。 | |||||||||
#660099 | #666FF | #000CC | #9933CC | #666699 | #660066 | #333366 | #0066CC | #9900FF | #333399 |
#99CCFF | #9933FF | #330099 | #6699FF | #9966CC | #3300CC | #003366 | #330033 | #3300FF | #6699CC |
#663399 | #3333FF | #006699 | #6633CC | #3333CC | #3399CC | #6600CC | #0066FF | #0099CC | #9966FF |
#0033FF | #66CCFF | #330066 | #3366FF | #3399FF | #6600FF | #3366CC | #003399 | #6633FF | #000066 |
#0099FF | #CCCCFF | #000033 | #33CCFF | #9999FF | #0000FF | #00CCFF | #9999CC | #000099 | #6666CC |
#0033CC | |||||||||
黃色、褐色、玫瑰色和橙色,以及它們的16進(jìn)制代碼。 | |||||||||
#FFFFCC | #FFCC00 | #CC99090 | #663300 | #FF6600 | #663333 | #CC6666 | #FF6666 | #FF0000 | #FFFF99 |
#FFCC66 | #FF9900 | #FF9966 | #CC3300 | #996666 | #FFCCCC | #660000 | #FF3300 | #FF6666 | #FFCC33 |
#CC6600 | #FF6633 | #996633 | #CC9999 | #FF3333 | #990000 | #CC9966 | #FFFF33 | #CC9933 | #993300 |
#FF9933 | #330000 | #993333 | #CC3333 | #CC0000 | #FFCC99 | #FFFF00 | #996600 | #CC6633 | |
綠色,以及它們的16進(jìn)制代碼。 | |||||||||
#99FFFF | #33CCCC | #00CC99 | #99FF99 | #009966 | #33FF33 | #33FF00 | #99CC33 | #CCC33 | #66FFFF |
#66CCCC | #66FFCC | #66FF66 | #009933 | #00CC33 | #66FF00 | #336600 | #33300 | #33FFFF | #339999 |
#99FFCC | #339933 | #33FF66 | #33CC33 | #99FF00 | #669900 | #666600 | #00FFFF | #336666 | #00FF99 |
#99CC99 | #00FF66 | #66FF33 | #66CC00 | #99CC00 | #999933 | #00CCCC | #006666 | #339966 | #66FF99 |
#CCFFCC | #00FF00 | #00CC00 | #CCFF66 | #CCCC66 | #009999 | #003333 | #006633 | #33FF99 | #CCFF99 |
#66CC33 | #33CC00 | #CCFF33 | #666633 | #669999 | #00FFCC | #336633 | #33CC66 | #99FF66 | #006600 |
#339900 | #CCFF00 | #999966 | #99CCCC | #33FFCC | #669966 | #00CC66 | #99FF33 | #003300 | #99CC66 |
#999900 | #CCCC99 | #CCFFFF | #33CC99 | #66CC66 | #66CC99 | #00FF33 | #009900 | #669900 | #669933 |
#CCCC00 | |||||||||
白色、灰色和黑色,以及它們的16進(jìn)制代碼。 | |||||||||
#FFFFF | #CCCCCC | #999999 | #666666 | #333333 | #000000 | ||||
16色和它們的16進(jìn)制代碼。 | |||||||||
Aqua | Black | Fuchsia | Gray | Gree | Lime | Maroon | Navy | Olive | Purple |
Red | Silver | Teal | White | Yellow | Blue |
js數(shù)組元素的添加和刪除一直比較迷惑,今天終于找到詳細(xì)說明的資料了,先給個我測試的代碼^-^
var arr = new Array();
arr[0] = "aaa";
arr[1] = "bbb";
arr[2] = "ccc";
//alert(arr.length);//3
arr.pop();
//alert(arr.length);//2
//alert(arr[arr.length-1]);//bbb
arr.pop();
//alert(arr[arr.length-1]);//aaa
//alert(arr.length);//1
var arr2 = new Array();
//alert(arr2.length);//0
arr2[0] = "aaa";
arr2[1] = "bbb";
//alert(arr2.length);//2
arr2.pop();
//alert(arr2.length);//1
arr2 = arr2.slice(0,arr2.length-1);
//alert(arr2.length);//0
arr2[0] = "aaa";
arr2[1] = "bbb";
arr2[2] = "ccc";
arr2 = arr2.slice(0,1);
alert(arr2.length);//1
alert(arr2[0]);//aaa
alert(arr2[1]);//undefined
shift:刪除原數(shù)組第一項,并返回刪除元素的值;如果數(shù)組為空則返回undefined
var a = [1,2,3,4,5];
var b = a.shift(); //a:[2,3,4,5] b:1
unshift:將參數(shù)添加到原數(shù)組開頭,并返回數(shù)組的長度
var a = [1,2,3,4,5];
var b = a.unshift(-2,-1); //a:[-2,-1,1,2,3,4,5] b:7
注:在IE6.0下測試返回值總為undefined,F(xiàn)F2.0下測試返回值為7,所以這個方法的返回值不可靠,需要用返回值時可用splice代替本方法來使用。
pop:刪除原數(shù)組最后一項,并返回刪除元素的值;如果數(shù)組為空則返回undefined
var a = [1,2,3,4,5];
var b = a.pop(); //a:[1,2,3,4] b:5//不用返回的話直接調(diào)用就可以了
push:將參數(shù)添加到原數(shù)組末尾,并返回數(shù)組的長度
var a = [1,2,3,4,5];
var b = a.push(6,7); //a:[1,2,3,4,5,6,7] b:7
concat:返回一個新數(shù)組,是將參數(shù)添加到原數(shù)組中構(gòu)成的
var a = [1,2,3,4,5];
var b = a.concat(6,7); //a:[1,2,3,4,5] b:[1,2,3,4,5,6,7]
splice(start,deleteCount,val1,val2,...):從start位置開始刪除deleteCount項,并從該位置起插入val1,val2,...
在清空數(shù)組時,只需傳遞startIndex。
如果不刪除所有元素,再傳遞deleteCount參數(shù)。
splice還具有先刪除后添加的功能,即先刪除幾個元素,然后在刪除的位置再添加若干元素,刪除與添加的元素的個數(shù)沒有必須相等,這時侯deleteCount也是要用到的。
var a = [1,2,3,4,5];
var b = a.splice(2,2,7,8,9); //a:[1,2,7,8,9,5] b:[3,4]
var b = a.splice(0,1); //同shift
a.splice(0,0,-2,-1); var b = a.length;//同unshift
var b = a.splice(a.length-1,1);//同pop
a.splice(a.length,0,6,7); var b = a.length; //同push
reverse:將數(shù)組反序
var a = [1,2,3,4,5];
var b = a.reverse(); //a:[5,4,3,2,1] b:[5,4,3,2,1]
sort(orderfunction):按指定的參數(shù)對數(shù)組進(jìn)行排序
var a = [1,2,3,4,5];
var b = a.sort(); //a:[1,2,3,4,5] b:[1,2,3,4,5]
slice(start,end):返回從原數(shù)組中指定開始下標(biāo)到結(jié)束下標(biāo)之間的項組成的新數(shù)組
var a = [1,2,3,4,5];
var b = a.slice(2,5); //a:[1,2,3,4,5] b:[3,4,5]
join(separator):將數(shù)組的元素組起一個字符串,以separator為分隔符,省略的話則用默認(rèn)用逗號為分隔符
var a = [1,2,3,4,5];
var b = a.join("|"); //a:[1,2,3,4,5] b:"1|2|3|4|5"
再給個利用數(shù)組模擬javaStringBuffer處理字符串的方法:
/**
* 字符串處理函數(shù)
*/
function StringBuffer() {
var arr = new Array;
this.append = function(str) {
arr[arr.length] = str;
};
this.toString = function() {
return arr.join("");//把append進(jìn)來的數(shù)組ping成一個字符串
};
}
今天在應(yīng)用中突然發(fā)現(xiàn)join是一種把數(shù)組轉(zhuǎn)換成字符串的好方法,故封裝成對象使用了:
/**
*把數(shù)組轉(zhuǎn)換成特定符號分割的字符串
*/
function arrayToString(arr,separator) {
if(!separator) separator = "";//separator為null則默認(rèn)為空
return arr.join(separator);
}
/**
* 查找數(shù)組包含的字符串
*/
function arrayFindString(arr,string) {
var str = arr.join("");
return str.indexOf(string);
}