一.徹底明白操作系統環境變量
設置環境變量有兩種方式:第一種是在命令提示符運行窗口中設置;第二種是通過單擊“我的電腦→屬性→高級”標簽的“環境變量”按鈕設置。需要注意的是,第一種設置環境變量的方式只對當前運行窗口有效,關閉運行窗口后,設置就不起作用了,而第二種設置環境變量的方式則是永久有效。
2.如何在命令提示符窗口中設置環境變量?
在“開始→運行”框中輸入“cmd”后按“確定”按鈕,出現命令運行窗口。在命令提示符下輸入“set”即可查看環境變量設置。要查看具體某個環境變量的設置,比如要查看path環境變量的設置,可以輸入“set path”。要創建一個環境變量,比如要創建一個名為aa的,值為“c:”的環境變量,可以輸入“set aa=c:”命令。而要刪除一個環境變量,比如要刪除aa環境變量,則可輸入“set aa=”命令(注意=后面不能有空格)。如何更改一個環境變量的設置呢?更改環境變量有兩種情況:一是追加方式,即在不改變環境變量現有設置的情況下,增加變量的值,比如要給環境變量aa增加一個值為“D:”的設置,可以輸入“set aa=%path%;D:”。另一種是完全修改方式,對于這種方式,我們可以采用直接創建一個環境變量的方法來實現。
3.用戶變量和系統變量的關系是什么?
點擊“我的電腦→屬性→高級”標簽的“環境變量”按鈕,出現“環境變量”對話框,如果當前是以Administrator登錄系統的用戶,對話框的上面為Administrator的用戶變量,對話框的下面為系統變量(即相當于系統中所有用戶的用戶變量)。有的時候我們會看到在用戶變量和系統變量中都存在某一個環境變量,比如path,那么path的值到底是用戶變量中的值還是系統變量中的值,或者兩者都不是呢?答案是兩者都不是。path變量的值是用戶變量中的值與系統變量中的值的疊加。
4.改變環境變量和環境變量中的值應該注意什么?
環境變量和環境變量的值不要含有空格,也不要用中文,切記!
二.Windows系統環境變量
在Dos輸入:SET 而不加參數,可以顯示Windows當前的環境變量。
Windows 系統環境變量列表:
%ALLUSERSPROFILE% : 列出所有用戶Profile文件位置。
%APPDATA% :??? 列出應用程序數據的默認存放位置。
%CD% :??? 列出當前目錄。
%CLIENTNAME% :??? 列出聯接到終端服務會話時客戶端的NETBIOS名。
%CMDCMDLINE% :??? 列出啟動當前cmd.exe所使用的命令行。
%CMDEXTVERSION% :??? 命令出當前命令處理程序擴展版本號。
%CommonProgramFiles% :??? 列出了常用文件的文件夾路徑。
%COMPUTERNAME% :??? 列出了計算機名。
%COMSPEC% :??? 列出了可執行命令外殼(命令處理程序)的路徑。
%DATE% :??? 列出當前日期。
%ERRORLEVEL% :??? 列出了最近使用的命令的錯誤代碼。
%HOMEDRIVE% :??? 列出與用戶主目錄所在的驅動器盤符。
%HOMEPATH% :??? 列出用戶主目錄的完整路徑。
%HOMESHARE% :??? 列出用戶共享主目錄的網絡路徑。
%LOGONSEVER% :??? 列出有效的當前登錄會話的域名控制器名。
%NUMBER_OF_PROCESSORS% :??? 列出了計算機安裝的處理器數。
%OS% :??? 列出操作系統的名字。(Windows XP 和 Windows 2000 列為 Windows_NT.)
%Path% :??? 列出了可執行文件的搜索路徑。
%PATHEXT% :??? 列出操作系統認為可被執行的文件擴展名。
%PROCESSOR_ARCHITECTURE% :??? 列出了處理器的芯片架構。
%PROCESSOR_IDENTFIER% :??? 列出了處理器的描述。
%PROCESSOR_LEVEL% :??? 列出了計算機的處理器的型號。
%PROCESSOR_REVISION% :??? 列出了處理器的修訂號。
%ProgramFiles% :??? 列出了Program Files文件夾的路徑。
%PROMPT% :??? 列出了當前命令解釋器的命令提示設置。
%RANDOM% :??? 列出界于0 和 32767之間的隨機十進制數。
%SESSIONNAME% :??? 列出連接到終端服務會話時的連接和會話名。
%SYSTEMDRIVE% :??? 列出了Windows啟動目錄所在驅動器。
%SYSTEMROOT% :??? 列出了Windows啟動目錄的位置。
%TEMP% and %TMP% :??? 列出了當前登錄的用戶可用應用程序的默認臨時目錄。
%TIME% :??? 列出當前時間。
%USERDOMAIN% :??? 列出了包含用戶帳號的域的名字。
%USERNAME% :??? 列出當前登錄的用戶的名字。
%USERPROFILE% :??? 列出當前用戶Profile文件位置。
%WINDIR% :??? 列出操作系統目錄的位置
三.明明白白XP系統環境變量
近日,筆者一個朋友的計算機出現了一個奇怪現象:在Windows XP系統的命令行模式中運行所有命令都提示該命令不是內部或外部命令,也不能運行可執行文件和或批處理文件。
解決篇:
筆者認為是執行這些命令的可執行文件被誤刪造成的,進入系統安裝目錄的system32目錄中發現ipconfig等可執行文件仍然存在,并沒有被刪除或改動的跡象。
第一步:在目錄中直接運行這些可執行文件發現可以調出一個命令執行窗口,不過一閃即逝。由此可斷定這些可執行文件沒有問題,是完好無損的。
第一步:輸入“CMD”命令進入命令行模式,然后進入“c:\windows\system32”目錄運行ipconfig命令,發現一切正常,IP地址及DNS等信息全部顯示出來了。
第四步:筆者通過“我的電腦→屬性→高級”標簽的“環境變量”按鈕查看相關信息。發現“系統變量”中的Path項值為空,這應該是問題的關鍵,由于默認Path為空,所以在任意路徑下運行諸如ipconfig的命令系統將無法找到該程序。雙擊path參數為其設置變量值“c:\windows\system32”。
第六步:確定后再在命令行模式中輸入“ipconfig”就能顯示出正確的信息了。
小提示:如果你希望設置多個默認路徑可以采用諸如c:\windows\system32;c:\windows的形式,即中間用“;”隔開。
思考篇:
分析本地故障原因就是因為環境變量中的默認路徑被刪除的結果,默認路徑一經設置,當前系統如有程序運行時需要某些DLL或EXE文件,以及Active控件時就會到所有默認路徑中去查找,如果在這些目錄中查找到相應的程序則自動加載,查找不到則報告缺少某某文件的錯誤信息。
小知識:什么是環境變量?環境變量一般是指在操作系統中用來指定操作系統運行環境的一些參數,比如臨時文件夾位置和系統文件夾位置等。這點有點類似于DOS時期的默認路徑,當你運行某些程時序除了在當前文件夾中尋找外,還會到設置的默認路徑中去查找。簡單地說這里的“Path”就是一個變量,里面存儲了一些常用命令所存放的目錄路徑。
很多朋友會在自己的計算機上安裝雙系統,例如C盤安裝Windows 98,D盤安裝Windows XP??墒悄承┸浖辉赪indows 98系統中安裝,Windows XP系統中是無法正常使用的,比較麻煩卻有效的方法是再安裝一遍。當我們了解了環境變量中的用途后就可以很好解決雙系統的軟件共用問題。
小提示:為什么在Windows 98中安裝了的軟件在Windows XP下無法運行呢(綠色軟件除外)?原因是安裝軟件時往往須要向系統目錄中復制某些文件,而使用另外一個系統時會由于缺少這些文件而無法運行。因此,我們可以通過設置環境變量的方法來解決這個問題。
實例:通過設置默認路徑解決雙系統共用應用軟件的問題
任務描述:
安裝了雙系統的本地計算機,C盤為Windows 98系統,安裝了COOL 3D,D盤為Windows XP系統。希望在不重新安裝軟件的前提下可以在D盤系統中正常運行COOL 3D程序。
在Windows XP中直接找到COOL 3D的安裝目錄并運行其執行文件,會彈出報錯對話框。
實現方法:
第一步:在Windows XP系統中的“我的電腦”上點鼠標右鍵選擇“屬性”。在系統屬性窗口選擇“高級”標簽并按“環境變量”按鈕。
第二步:將環境變量設置窗口中的系統變量里的Path值中添加如下目錄:“c:\windows\system32;c:\windows\system;c:\windows”(不含引號)。
第三步:設置完畢后就可以順利運行COOL 3D了,如果需要系統文件會自動到上面提到的C盤Windows 98相應目錄去查找。
總結:
有些軟件不用通過在環境變量中修改默認路徑的方法就可以在D盤系統中正常啟動,例如超級解霸等軟件,因為它們并沒有往系統目錄中復制任何文件。另外修改默認路徑法也并不是對所有軟件有效,對于一些啟動需要加載注冊表中鍵值才能使用的軟件,可能會出現提示要求輸入注冊碼的窗口,輸入正確數值后仍即可正常使用。如果通過修改默認路徑法仍然無法啟動軟件的話,很有可能是因為Windows 98與Windows XP系統的某些DLL文件有區別而無法通用,這種情況只能在Windows XP系統中重新安裝該軟件。
四.我使用的系統為Windows XP,我想把系統臨時文件(Temp文件)存放區由C盤移到其他分區(如D盤),請問該如何操作?
在“我的電腦”上點鼠標右鍵,選擇“屬性”,然后進入高級選項,點“環境變量”,在“系統變量”下拉菜單中找到“TEMP”、“TMP”這兩項,分別編輯,將變量值設為你需要改變的路徑(例如D:\temp),注意兩項改為相同路徑,然后在D盤上建立一個temp目錄,最后重啟計算機即可。
1 最基本的亂碼問題。
一、安裝篇
jspSmartUpload是由www.jspsmart.com網站開發的一個可免費使用的全功能的文件上傳下載組件,適于嵌入執行上傳下載操作的JSP文件中。該組件有以下幾個特點:
1、使用簡單。在JSP文件中僅僅書寫三五行JAVA代碼就可以搞定文件的上傳或下載,方便。
2、能全程控制上傳。利用jspSmartUpload組件提供的對象及其操作方法,可以獲得全部上傳文件的信息(包括文件名,大小,類型,擴展名,文件數據等),方便存取。
3、能對上傳的文件在大小、類型等方面做出限制。如此可以濾掉不符合要求的文件。
4、下載靈活。僅寫兩行代碼,就能把Web服務器變成文件服務器。不管文件在Web服務器的目錄下或在其它任何目錄下,都可以利用jspSmartUpload進行下載。
5、能將文件上傳到數據庫中,也能將數據庫中的數據下載下來。這種功能針對的是MYSQL數據庫,因為不具有通用性,所以本文不準備舉例介紹這種用法。
jspSmartUpload組件可以從www.jspsmart.com網站上自由下載,壓縮包的名字是jspSmartUpload.zip。下載后,用WinZip或WinRAR將其解壓到Tomcat的webapps目錄下(本文以Tomcat服務器為例進行介紹)。解壓后,將webapps/jspsmartupload目錄下的子目錄Web-inf名字改為全大寫的WEB-INF,這樣一改jspSmartUpload類才能使用。因為Tomcat對文件名大小寫敏感,它要求Web應用程序相關的類所在目錄為WEB-INF,且必須是大寫。接著重新啟動Tomcat,這樣就可以在JSP文件中使用jspSmartUpload組件了。
注意,按上述方法安裝后,只有webapps/jspsmartupload目錄下的程序可以使用jspSmartUpload組件,如果想讓Tomcat服務器的所有Web應用程序都能用它,必須做如下工作:
1.進入命令行狀態,將目錄切換到Tomcat的webapps/jspsmartupload/WEB-INF目錄下。
2.運行JAR打包命令:jar cvf jspSmartUpload.jar com
(也可以打開資源管理器,切換到當前目錄,用WinZip將com目錄下的所有文件壓縮成jspSmartUpload.zip,然后將jspSmartUpload.zip換名為jspSmartUpload.jar文件即可。)
3.將jspSmartUpload.jar拷貝到Tomcat的shared/lib目錄下。
二、相關類說明篇
㈠ File類
這個類包裝了一個上傳文件的所有信息。通過它,可以得到上傳文件的文件名、文件大小、擴展名、文件數據等信息。
File類主要提供以下方法:
1、saveAs作用:將文件換名另存。
原型:
public void saveAs(java.lang.String destFilePathName)
或
public void saveAs(java.lang.String destFilePathName, int optionSaveAs)
其中,destFilePathName是另存的文件名,optionSaveAs是另存的選項,該選項有三個值,分別是SAVEAS_PHYSICAL,SAVEAS_VIRTUAL,SAVEAS_AUTO。SAVEAS_PHYSICAL表明以操作系統的根目錄為文件根目錄另存文件,SAVEAS_VIRTUAL表明以Web應用程序的根目錄為文件根目錄另存文件,SAVEAS_AUTO則表示讓組件決定,當Web應用程序的根目錄存在另存文件的目錄時,它會選擇SAVEAS_VIRTUAL,否則會選擇SAVEAS_PHYSICAL。
例如,saveAs("/upload/sample.zip",SAVEAS_PHYSICAL)執行后若Web服務器安裝在C盤,則另存的文件名實際是c:\upload\sample.zip。而saveAs("/upload/sample.zip",SAVEAS_VIRTUAL)執行后若Web應用程序的根目錄是webapps/jspsmartupload,則另存的文件名實際是webapps/jspsmartupload/upload/sample.zip。saveAs("/upload/sample.zip",SAVEAS_AUTO)執行時若Web應用程序根目錄下存在upload目錄,則其效果同saveAs("/upload/sample.zip",SAVEAS_VIRTUAL),否則同saveAs("/upload/sample.zip",SAVEAS_PHYSICAL)。
建議:對于Web程序的開發來說,最好使用SAVEAS_VIRTUAL,以便移植。
2、isMissing
作用:這個方法用于判斷用戶是否選擇了文件,也即對應的表單項是否有值。選擇了文件時,它返回false。未選文件時,它返回true。
原型:public boolean isMissing()
3、getFieldName
作用:取HTML表單中對應于此上傳文件的表單項的名字。
原型:public String getFieldName()
4、getFileName
作用:取文件名(不含目錄信息)
原型:public String getFileName()
5、getFilePathName
作用:取文件全名(帶目錄)
原型:public String getFilePathName
6、getFileExt
作用:取文件擴展名(后綴)
原型:public String getFileExt()
7、getSize
作用:取文件長度(以字節計)
原型:public int getSize()
8、getBinaryData
作用:取文件數據中指定位移處的一個字節,用于檢測文件等處理。
原型:public byte getBinaryData(int index)。其中,index表示位移,其值在0到getSize()-1之間。
㈡ Files類
這個類表示所有上傳文件的集合,通過它可以得到上傳文件的數目、大小等信息。有以下方法:
1、getCount
作用:取得上傳文件的數目。
原型:public int getCount()
2、getFile
作用:取得指定位移處的文件對象File(這是com.jspsmart.upload.File,不是java.io.File,注意區分)。
原型:public File getFile(int index)。其中,index為指定位移,其值在0到getCount()-1之間。
3、getSize
作用:取得上傳文件的總長度,可用于限制一次性上傳的數據量大小。
原型:public long getSize()
4、getCollection
作用:將所有上傳文件對象以Collection的形式返回,以便其它應用程序引用,瀏覽上傳文件信息。
原型:public Collection getCollection()
5、getEnumeration
作用:將所有上傳文件對象以Enumeration(枚舉)的形式返回,以便其它應用程序瀏覽上傳文件信息。
原型:public Enumeration getEnumeration()
㈢ Request類
這個類的功能等同于JSP內置的對象request。只所以提供這個類,是因為對于文件上傳表單,通過request對象無法獲得表單項的值,必須通過jspSmartUpload組件提供的Request對象來獲取。該類提供如下方法:
1、getParameter
作用:獲取指定參數之值。當參數不存在時,返回值為null。
原型:public String getParameter(String name)。其中,name為參數的名字。
2、getParameterValues
作用:當一個參數可以有多個值時,用此方法來取其值。它返回的是一個字符串數組。當參數不存在時,返回值為null。
原型:public String[] getParameterValues(String name)。其中,name為參數的名字。
3、getParameterNames
作用:取得Request對象中所有參數的名字,用于遍歷所有參數。它返回的是一個枚舉型的對象。
原型:public Enumeration getParameterNames()
㈣ SmartUpload類這個類完成上傳下載工作。
A.上傳與下載共用的方法:
只有一個:initialize。
作用:執行上傳下載的初始化工作,必須第一個執行。
原型:有多個,主要使用下面這個:
public final void initialize(javax.servlet.jsp.PageContext pageContext)
其中,pageContext為JSP頁面內置對象(頁面上下文)。
B.上傳文件使用的方法:
1、upload
作用:上傳文件數據。對于上傳操作,第一步執行initialize方法,第二步就要執行這個方法。
原型:public void upload()
2、save
作用:將全部上傳文件保存到指定目錄下,并返回保存的文件個數。
原型:public int save(String destPathName)
和public int save(String destPathName,int option)
其中,destPathName為文件保存目錄,option為保存選項,它有三個值,分別是SAVE_PHYSICAL,SAVE_VIRTUAL和SAVE_AUTO。(同File類的saveAs方法的選項之值類似)SAVE_PHYSICAL指示組件將文件保存到以操作系統根目錄為文件根目錄的目錄下,SAVE_VIRTUAL指示組件將文件保存到以Web應用程序根目錄為文件根目錄的目錄下,而SAVE_AUTO則表示由組件自動選擇。
注:save(destPathName)作用等同于save(destPathName,SAVE_AUTO)。
3、getSize
作用:取上傳文件數據的總長度
原型:public int getSize()
4、getFiles
作用:取全部上傳文件,以Files對象形式返回,可以利用Files類的操作方法來獲得上傳文件的數目等信息。
原型:public Files getFiles()
5、getRequest
作用:取得Request對象,以便由此對象獲得上傳表單參數之值。
原型:public Request getRequest()
6、setAllowedFilesList
作用:設定允許上傳帶有指定擴展名的文件,當上傳過程中有文件名不允許時,組件將拋出異常。
原型:public void setAllowedFilesList(String allowedFilesList)
其中,allowedFilesList為允許上傳的文件擴展名列表,各個擴展名之間以逗號分隔。如果想允許上傳那些沒有擴展名的文件,可以用兩個逗號表示。例如:setAllowedFilesList("doc,txt,,")將允許上傳帶doc和txt擴展名的文件以及沒有擴展名的文件。
7、setDeniedFilesList
作用:用于限制上傳那些帶有指定擴展名的文件。若有文件擴展名被限制,則上傳時組件將拋出異常。
原型:public void setDeniedFilesList(String deniedFilesList)
其中,deniedFilesList為禁止上傳的文件擴展名列表,各個擴展名之間以逗號分隔。如果想禁止上傳那些沒有擴展名的文件,可以用兩個逗號來表示。例如:setDeniedFilesList("exe,bat,,")將禁止上傳帶exe和bat擴展名的文件以及沒有擴展名的文件。
8、setMaxFileSize
作用:設定每個文件允許上傳的最大長度。
原型:public void setMaxFileSize(long maxFileSize)
其中,maxFileSize為為每個文件允許上傳的最大長度,當文件超出此長度時,將不被上傳。
9、setTotalMaxFileSize
作用:設定允許上傳的文件的總長度,用于限制一次性上傳的數據量大小。
原型:public void setTotalMaxFileSize(long totalMaxFileSize)
其中,totalMaxFileSize為允許上傳的文件的總長度。
1、setContentDisposition
作用:將數據追加到MIME文件頭的CONTENT-DISPOSITION域。jspSmartUpload組件會在返回下載的信息時自動填寫MIME文件頭的CONTENT-DISPOSITION域,如果用戶需要添加額外信息,請用此方法。
原型:public void setContentDisposition(String contentDisposition)
其中,contentDisposition為要添加的數據。如果contentDisposition為null,則組件將自動添加"attachment;",以表明將下載的文件作為附件,結果是IE瀏覽器將會提示另存文件,而不是自動打開這個文件(IE瀏覽器一般根據下載的文件擴展名決定執行什么操作,擴展名為doc的將用word程序打開,擴展名為pdf的將用acrobat程序打開,等等)。
2、downloadFile
作用:下載文件。
原型:共有以下三個原型可用,第一個最常用,后兩個用于特殊情況下的文件下載(如更改內容類型,更改另存的文件名)。
① public void downloadFile(String sourceFilePathName)
其中,sourceFilePathName為要下載的文件名(帶目錄的文件全名)
② public void downloadFile(String sourceFilePathName,String contentType)
其中,sourceFilePathName為要下載的文件名(帶目錄的文件全名),contentType為內容類型(MIME格式的文件類型信息,可被瀏覽器識別)。
③ public void downloadFile(String sourceFilePathName,String contentType,String destFileName)
其中,sourceFilePathName為要下載的文件名(帶目錄的文件全名),contentType為內容類型(MIME格式的文件類型信息,可被瀏覽器識別),destFileName為下載后默認的另存文件名。
三、文件上傳篇
㈠ 表單要求
對于上傳文件的FORM表單,有兩個要求:
1、METHOD應用POST,即METHOD="POST"。
2、增加屬性:ENCTYPE="multipart/form-data"
下面是一個用于上傳文件的FORM表單的例子:
<FORM METHOD="POST" ENCTYPE="multipart/form-data"
ACTION="/jspSmartUpload/upload.jsp">
<INPUT TYPE="FILE" NAME="MYFILE">
<INPUT TYPE="SUBMIT">
</FORM>
㈡ 上傳的例子
1、上傳頁面upload.html
本頁面提供表單,讓用戶選擇要上傳的文件,點擊"上傳"按鈕執行上傳操作。
頁面源碼如下:
<!--
???? 文件名:upload.html
作?? 者:縱橫軟件制作中心雨亦奇(zhsoft88@sohu.com)
-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>文件上傳</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<p> </p>
<p align="center">上傳文件選擇</p>
<FORM METHOD="POST" ACTION="jsp/do_upload.jsp"
ENCTYPE="multipart/form-data">
<input type="hidden" name="TEST" value="good">
?? <table width="75%" border="1" align="center">
???? <tr>
?????? <td><div align="center">1、
?????????? <input type="FILE" name="FILE1" size="30">
??? ???? </div></td>
</tr>
???? <tr>
?????? <td><div align="center">2、
?????????? <input type="FILE" name="FILE2" size="30">
???????? </div></td>
???? </tr>
???? <tr>
?????? <td><div align="center">3、
?????????? <input type="FILE" name="FILE3" size="30">
???????? </div></td>
???? </tr>
???? <tr>
?????? <td><div align="center">4、
?????????? <input type="FILE" name="FILE4" size="30">
???????? </div></td>
???? </tr>
???? <tr>
?????? <td><div align="center">
?????????? <input type="submit" name="Submit" value="上傳它!">
???????? </div></td>
???? </tr>
?? </table>
</FORM>
</body>
</html>
2、上傳處理頁面do_upload.jsp
本頁面執行文件上傳操作。頁面源碼中詳細介紹了上傳方法的用法,在此不贅述了。
頁面源碼如下:
<%--
文件名:do_upload.jsp
作?? 者:縱橫軟件制作中心雨亦奇(zhsoft88@sohu.com)
--%>
<%@ page contentType="text/html; charset=gb2312" language="java"
import="java.util.*,com.jspsmart.upload.*" errorPage="" %>
<html>
<head>
<title>文件上傳處理頁面</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<%
// 新建一個SmartUpload對象
SmartUpload su = new SmartUpload();
// 上傳初始化
su.initialize(pageContext);
// 設定上傳限制
// 1.限制每個上傳文件的最大長度。
// su.setMaxFileSize(10000);
// 2.限制總上傳數據的長度。
// su.setTotalMaxFileSize(20000);
// 3.設定允許上傳的文件(通過擴展名限制),僅允許doc,txt文件。
// su.setAllowedFilesList("doc,txt");
// 4.設定禁止上傳的文件(通過擴展名限制),禁止上傳帶有exe,bat,
jsp,htm,html擴展名的文件和沒有擴展名的文件。
// su.setDeniedFilesList("exe,bat,jsp,htm,html,,");
// 上傳文件
su.upload();
// 將上傳文件全部保存到指定目錄
int count = su.save("/upload");
out.println(count+"個文件上傳成功!<br>");
// 利用Request對象獲取參數之值
out.println("TEST="+su.getRequest().getParameter("TEST")
+"<BR><BR>");
// 逐一提取上傳文件信息,同時可保存文件。
for (int i=0;i<su.getFiles().getCount();i++)
{
com.jspsmart.upload.File file = su.getFiles().getFile(i);
// 若文件不存在則繼續
if (file.isMissing()) continue;
// 顯示當前文件信息
out.println("<TABLE BORDER=1>");
out.println("<TR><TD>表單項名(FieldName)</TD><TD>"
+ file.getFieldName() + "</TD></TR>");
out.println("<TR><TD>文件長度(Size)</TD><TD>" +
file.getSize() + "</TD></TR>");
out.println("<TR><TD>文件名(FileName)</TD><TD>"
+ file.getFileName() + "</TD></TR>");
out.println("<TR><TD>文件擴展名(FileExt)</TD><TD>"
+ file.getFileExt() + "</TD></TR>");
out.println("<TR><TD>文件全名(FilePathName)</TD><TD>"
+ file.getFilePathName() + "</TD></TR>");
out.println("</TABLE><BR>");
// 將文件另存
// file.saveAs("/upload/" + myFile.getFileName());
// 另存到以WEB應用程序的根目錄為文件根目錄的目錄下
// file.saveAs("/upload/" + myFile.getFileName(),
su.SAVE_VIRTUAL);
// 另存到操作系統的根目錄為文件根目錄的目錄下
// file.saveAs("c:\\temp\\" + myFile.getFileName(),
su.SAVE_PHYSICAL);
}
%>
</body>
</html>
四、文件下載篇
1、下載鏈接頁面download.html
頁面源碼如下:
<!--
文件名:download.html
作?? 者:縱橫軟件制作中心雨亦奇(zhsoft88@sohu.com)
-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>下載</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<a href="jsp/do_download.jsp">點擊下載</a>
</body>
</html>
2、下載處理頁面do_download.jsp do_download.jsp展示了如何利用jspSmartUpload組件來下載文件,從下面的源碼中就可以看到,下載何其簡單。
源碼如下:
<%@ page contentType="text/html;charset=gb2312"
import="com.jspsmart.upload.*" %><%
// 新建一個SmartUpload對象
SmartUpload su = new SmartUpload();
// 初始化
su.initialize(pageContext);
// 設定contentDisposition為null以禁止瀏覽器自動打開文件,
//保證點擊鏈接后是下載文件。若不設定,則下載的文件擴展名為
//doc時,瀏覽器將自動用word打開它。擴展名為pdf時,
//瀏覽器將用acrobat打開。
su.setContentDisposition(null);
// 下載文件
su.downloadFile("/upload/如何賺取我的第一桶金.doc");
%>
注意,執行下載的頁面,在Java腳本范圍外(即<% ... %>之外),不要包含HTML代碼、空格、回車或換行等字符,有的話將不能正確下載。不信的話,可以在上述源碼中%><%之間加入一個換行符,再下載一下,保證出錯。因為它影響了返回給瀏覽器的數據流,導致解析出錯。
3、如何下載中文文件
jspSmartUpload雖然能下載文件,但對中文支持不足。若下載的文件名中有漢字,則瀏覽器在提示另存的文件名時,顯示的是一堆亂碼,很掃人興。上面的例子就是這樣。(這個問題也是眾多下載組件所存在的問題,很少有人解決,搜索不到相關資料,可嘆!)
為了給jspSmartUpload組件增加下載中文文件的支持,我對該組件進行了研究,發現對返回給瀏覽器的另存文件名進行UTF-8編碼后,瀏覽器便能正確顯示中文名字了。這是一個令人高興的發現。于是我對jspSmartUpload組件的SmartUpload類做了升級處理,增加了toUtf8String這個方法,改動部分源碼如下:
public void downloadFile(String s, String s1, String s2, int i)
throws ServletException, IOException, SmartUploadException
???? {
if(s == null)
???? throw new IllegalArgumentException("File ''" + s +
???? "'' not found (1040).");
if(s.equals(""))
???? throw new IllegalArgumentException("File ''" + s +
???? "'' not found (1040).");
if(!isVirtual(s) && m_denyPhysicalPath)
???? throw new SecurityException("Physical path is
???? denied (1035).");
if(isVirtual(s))
???? s = m_application.getRealPath(s);
java.io.File file = new java.io.File(s);
FileInputStream fileinputstream = new FileInputStream(file);
long l = file.length();
boolean flag = false;
int k = 0;
byte abyte0[] = new byte[i];
if(s1 == null)
???? m_response.setContentType("application/x-msdownload");
else
if(s1.length() == 0)
???? m_response.setContentType("application/x-msdownload");
else
???? m_response.setContentType(s1);
m_response.setContentLength((int)l);
m_contentDisposition = m_contentDisposition != null ?
m_contentDisposition : "attachment;";
if(s2 == null)
???? m_response.setHeader("Content-Disposition",
???? m_contentDisposition + " filename=" +
???? toUtf8String(getFileName(s)));
else
if(s2.length() == 0)
???? m_response.setHeader("Content-Disposition",
???? m_contentDisposition);
else
???? m_response.setHeader("Content-Disposition",
???? m_contentDisposition + " filename=" + toUtf8String(s2));
while((long)k < l)
{
???? int j = fileinputstream.read(abyte0, 0, i);
???? k += j;
???? m_response.getOutputStream().write(abyte0, 0, j);
}
fileinputstream.close();
???? }
???? /**
????? * 將文件名中的漢字轉為UTF8編碼的串,以便下載時能正確顯示另存的文件名.
????? * 縱橫軟件制作中心雨亦奇2003.08.01
????? * @param s 原文件名
????? * @return 重新編碼后的文件名
????? */
???? public static String toUtf8String(String s) {
StringBuffer sb = new StringBuffer();
for (int i=0;i<s.length();i++) {
???? char c = s.charAt(i);
???? if (c >= 0 && c <= 255) {
sb.append(c);
???? } else {
byte[] b;
try {
???? b = Character.toString(c).getBytes("utf-8");
} catch (Exception ex) {
???? System.out.println(ex);
???? b = new byte[0];
}
for (int j = 0; j < b.length; j++) {
int k = b[j];
???? if (k < 0) k += 256;
???? sb.append("%" + Integer.toHexString(k).
???? toUpperCase());
}
???? }
}
return sb.toString();
???? }
注意源碼中粗體部分,原jspSmartUpload組件對返回的文件未作任何處理,現在做了編碼的轉換工作,將文件名轉換為UTF-8形式的編碼形式。UTF-8編碼對英文未作任何處理,對中文則需要轉換為%XX的形式。toUtf8String方法中,直接利用Java語言提供的編碼轉換方法獲得漢字字符的UTF-8編碼,之后將其轉換為%XX的形式。
將源碼編譯后打包成jspSmartUpload.jar,拷貝到Tomcat的shared/lib目錄下(可為所有WEB應用程序所共享),然后重啟Tomcat服務器就可以正常下載含有中文名字的文件了。另,toUtf8String方法也可用于轉換含有中文的超級鏈接,以保證鏈接的有效,因為有的WEB服務器不支持中文鏈接。
小結:jspSmartUpload組件是應用JSP進行B/S程序開發過程中經常使用的上傳下載組件,它使用簡單,方便?,F在我又為其加上了下載中文名字的文件的支持,真個是如虎添翼,必將贏得更多開發者的青睞。
要servlet里面支持中文的方法:
在dopost或者doget的第一句加上:
request.setCharacterEncoding("GB2312");
response.setCharacterEncoding("GB2312");
在jsp里面就把
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
里設置成charset=gb2312
如果這樣還不行,就只有在取出中文后(getParameter)強制轉換了:
String str=new String(request.getParameter("text").getBytes("ISO-8859-1"),"GB2312");
很不錯的方法,因為在java里面,亂碼是個大問題,這些一定要銘記!
//用命令行參數
import java.io.*;
public class AddArgs
{
??? public static void main(String args[]) throws IOException
????? {
??????? int sum;
??????? try
???????? {
??????????? sum = Integer.parseInt(args[0])+Integer.parseInt(args[1]);??
??????????? System.out.println("兩參數的和是:"+sum);???
???????? }
??????? catch (Exception e)
???????? {??
??????????? System.out.println("參數出現錯誤!");
???????? }
????
????? }
}
=========================================================
//用system.in
import java.io.*;
public class AddInput
{
??? public static void main(String args[]) throws IOException
????? {
??????? BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
??????? int x=0,y=0;
??????? try{
????????? System.out.println("請輸入第一個整數:");
????????? x=Integer.parseInt(br.readLine());
????????? System.out.println("請輸入第二個整數:");
????????? y=Integer.parseInt(br.readLine());
????????? System.out.println("它們的和是:"+(x+y));????????????
??????? }
??????? catch (Exception e)
??????? {
????????? System.out.println("輸入有錯誤,請重新運行!");
???????? }
????? }
}
=========================================================
//用scanner
import java.io.*;
import java.util.*;
public class AddScanner
{
??? public static void main(String args[]) throws IOException
??? {
??????? Scanner sc=new Scanner(System.in);
??????? int x=0,y=0;
??????? try
??????? {
????????? System.out.println("請輸入第一個整數:");
????????? x=sc.nextInt();
????????? System.out.println("請輸入第二個整數:");
????????? y=sc.nextInt();
????????? System.out.println("它們的和是:"+(x+y));????????????
??????? }
??????? catch (Exception e)
??????? {
????????? System.out.println("輸入有錯誤,請重新運行!");
??????? }
??? }
}
輸入流FileInputStream和輸出流 FileOutputStream,實現的是對磁盤文件的順序讀寫,而且讀寫要分別創建不同對象。相比之下RandomAccessFile類則可對文件實現隨機讀寫操作。
RandomAccessFile對象的文件位置指針遵循下面的規律:
·新建RandomAccessFile對象的文件位置指針位于文件的開頭處;
·每次讀寫操作之后,文件位置的指針都相應后移到讀寫的字節數;
·可以通過getFilePointer方法來獲得文件位置指針的位置,通過seek方法來設置文件指針的位置。
RandomAccessFile例子:
??? 最近經常有人問及在上網時,被惡意網站修改注冊表的問題,我整理了幾種常見的問題及解決辦法,供大家參考,希望對大家有所幫助。
???? 1.修改IE的標題欄和IE默認連接首頁:HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Internet Explorer\\Main HKEY_CURRENT_USER\\Software\\Microsoft\\Internet Explorer\\Main在注冊表中找到以上兩處主鍵,將其下的“Window Title”主鍵改為“IE瀏覽器”等你喜歡的名字,并關閉所有打開的IE瀏覽器窗口再重新打開就能看到效果。找到串值“Start Page”, 改為自己喜歡的網址即可。
???? 重啟以后又會變成了別人的網址的解決辦法:HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\Current Version\\Run主鍵,然后將其下的registry.exe子鍵刪除,然后刪除自運行程序c:\\Program Files\\registry.exe,最后從IE選項中重新設置起始頁就好了。
???? 改回IE的默認頁:HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Internet Explorer\\ Main\\Default_Page_URL“Default_Page_URL”這個子鍵的鍵值即起始頁的默認頁。
???? 2.修改IE的首頁:開始,運行,鍵入msconfig點擊“確定”,在彈出的窗口中切換到“啟動”選項卡,禁用可疑程序啟動項。
???? 3. 系統啟動時彈出對話框,點確定才能進去:方法(1):HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Winlogon在注冊表中找到此主鍵,“LegalNoticeCaption”是提示框的標題,“LegalNoticeText”是提示框的文本內容。刪除這兩個字符串即可。
???? 方法(2):對win2000或winxp:點擊“安全與多用戶”,再點擊左上角的“+”切換窗口后,清除“啟動時要顯示的標題”和“啟動時要顯示的信息”兩項內容即可。
???? 方法(3):看看run.
???? 4.修改IE鼠標右鍵菜單里顯示網頁廣告:HKEY_CURRENT_USER\\Software\\Microsoft\\Internet Explorer\\MenuExt
???? 5. IE首頁解鎖:[HKEY_CURRENT_USER\\Software\\Policies\\Microsoft\\Internet Explorer\\Control Panel], 一般此鍵是不存在的, 只存在[HKEY_CURRENT_USER\\Software\\Policies\\Microsoft], 所以后面一截要自己建立, 主鍵建立完后在Control Panel鍵下新建一個DWORD值數據, 鍵名為HOMEPAGE(不分大小寫), 鍵值為0. 此時再打開IE屬性時可以發現它改首頁設置的部分已經可用了。
???? IE設置項解鎖:[HKEY_CURRENT_USER\\Software\\Policies\\Microsoft\\Internet Explorer\\Control Pan el]"Settings"=dword:1 [HKEY_CURRENT_USER\\Software\\Policies\\Microsoft\\Internet Explorer\\Control Pan el]"Links"=dword:1 [HKEY_CURRENT_USER\\Software\\Policies\\Microsoft\\Internet Explorer\\Control Pan el]"SecAddSites"=dword:1將上面這些DWORD值改為“0”即可恢復功能。
???? IE的默認首頁灰色按扭不可選:HKEY_USERS\\.DEFAULT\\Software\\Policies\\Microsoft\\Internet Explorer\\Control Pan下的DWORD值“homepage”的鍵值修改為“0” “即可恢復功能。
???? 6. 去掉注冊表編輯器被鎖定:這是因為KEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System下的DWORD值“DisableRegistryTools”被修改為“1”的緣故,將其鍵值恢復為“0”即可恢復注冊表的使用。
???? win2000系統:Windows Registry Editor Version 5.00 [Hkey_current_user\\Software\\microsoft\\windows\\currentversion\\Policies\\system] "DisableRegistryTools"=dword:00000000 win98/me系統:REGEDIT4
face=Verdana>???? [HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System] "DisableRegistryTools"=dword:00000000將以上代碼copy到記事本中, 取一個任意名字的。reg文件,比如recover.reg,雙擊運行可以解除你的鎖定狀態。注意:“REGEDIT4”一定要大寫,并且它的后面一定要空一行,還有,“REGEDIT4”中的“4”和“T”之間一定不能有空格,否則將前功盡棄!
??? 7. IE默認搜索引擎被修改:HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Internet Explorer\\Search\\CustomizeSearch HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Internet Explorer\\Search\\SearchAssistant
???? 8. 查看源文件“菜單被禁用:惡意網頁修改了注冊表,具體的位置為:(1)在注冊表HKEY_CURRENT_USER\\Software\\Policies\\Microsoft\\Internet Explorer下建立子鍵”Restrictions“,然后在”Restrictions“下面建立兩DWORD值:”NoViewSource“和”NoBrowserContextMenu“,并為這兩個DWORD值賦值為”1“。
???? (2)在注冊表 HKEY_USERS\\.DEFAULT\\Software\\Policies\\Microsoft\\InternetExplorer\\Restrictions下,將兩個DWORD值:“NoViewSource”和“NoBrowserContextMenu”的鍵值都改為了“1”。第2點中提到的注冊表其實相當于第1點中提到的注冊表的分支,修改第1點中所說的注冊表鍵值,第2點中注冊表鍵值隨之改變?! 【唧w解決辦法為:將以下內容另存為后綴名為reg的注冊表文件,比方說unlock.reg,雙擊unlock.reg導入注冊表,不用重啟電腦 ,重新運行IE就會發現IE的功能恢復正常了。
???? REGEDIT4
???? [HKEY_CURRENT_USER\\Software\\Policies\\Microsoft\\Internet Explorer \\Restrictions]“NoViewSource”=dword:00000000 "NoBrowserContextMenu"=dword:00000000 [HKEY_USERS\\.DEFAULT\\Software\\Policies\\Microsoft\\Internet Explorer \\Restrictions]“NoViewSource”=dword:00000000“NoBrowserContextMenu”=dword:00000000
???? 要特別注意的是,在你編制的注冊表文件unlock.reg中,“REGEDIT4”一定要大寫,并且它的后面一定要空一行,還有,“REGEDIT4”中的“4”和“T”之間一定不能有空格,否則將前功盡棄!許多朋友寫注冊表文件之所以不成功,就是因為沒有注意到上面所說的內容,這回該注意點嘍。請注意如果你是Win2000或WinXP用戶,請將 “REGEDIT4”改為Windows Registry Editor Version 5.00.
???? ★ 可以在IE中做一些設置以便永遠不進惡意站點:
???? 打開IE,點擊“工具”→“Internet選項”→“內容”→“分級審查”,點“啟用 ”按鈕,會調出“分級審查”對話框,然后點擊“許可站點”標簽,輸入不想去的網站網址,如輸入:http://***.****.com,按“從不”按鈕,再點擊“確定”即大功告成!
???? 9. IE不能打開新窗口的解決辦法:(1.)點擊“開始”→“運行”,在彈出的“運行”對話框中輸入“regsvr32 actxprxy.dll”(注意輸入時沒有引號),然后點擊“確定”按鈕,接著會出現一個信息對話框“DllRegisterServer in actxprxy.dll succeeded”;在該對話框中點“確定”按鈕;(2.)再次點擊“開始”→“運行”,在彈出的“運行”對話框中輸入“regsvr32 shdocvw.dll”(注意輸入時沒有引號),然后點擊“確定”按鈕,接著會出現一個信息對話框“DllRegisterServer in shdocvw.dll succeeded”,在該對話框中點“確定”按鈕;(3.)重新啟動Windows,
???? 10. 右鍵功能失效:HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Restrictions,將其DWORD值"NoBrowserContextMenu"的值改為0.
???? 11. 篡改地址欄文字:解決辦法:1.地址欄下的文字。在HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\ToolBar下找到鍵值LinksFolderName,將其中的內容刪去即可。
???? 2.地址欄中無用的地址。在HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\TypeURLs中刪除無用的鍵值即可。
???? 12. IE窗口定時彈出:點擊"開始-運行-輸入msconfig",選擇"啟動",把里面后綴為hta的都勾掉,重啟。
???? 13. 修改IE工具欄:對工具欄按鈕點右鍵選“自定義”,在“當前工具欄按鈕”下拉框中選定不需要的按鈕后點擊“刪除”即可。
???? 要去掉多余的地址列表:[HKEY_CURRENT_USERSoftwareWicrosoftInternet ExplorerTypeURLs]主鍵,將右部窗口中“url1”、“url2”等鍵值名全部刪除即可。
???? 要修復鏈接欄標題,首先展開[HKEY_CURRENT_USERSoftwareWicrosoftInternet ExplorerToolbar]主鍵,在右部窗口中對鍵值名“LinksFolderName”雙擊,修改其鍵值為欲顯示的信息,或直接將該鍵值名刪除,鏈接欄的標題將恢復為默認的“鏈接”字樣。
???? 恢復Internet選項卡:在“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer”下在右邊的窗口中找到一個二進制值“NoFolderOptions”,并設值為“00 00 00 00”。
???? 桌面上的圖標全部消失:HKEY_CURRENT_USER\\ Software\\Microsoft\\Windows\\ CurrentVersion\\Policies\\Explorer,找到“NoDesktop”值項,右鍵單擊它,選擇“修改”(或者干脆刪除也可以),把它的值改為0,然后重新啟動電腦。
這只是個windows系統下不讓人注意的操作,有不少朋友為此摸不著頭腦,所以今天整理下給大家參考參考。呵呵
IE會記錄你上次關閉IE時候的設置.將IE最大化后關閉(關閉所有窗口),再打開就是最大化的了。
或者 在IE的快捷方式(注意!必須是快捷方式!?。┥蠁螕羰髽擞益I,打開屬性,在彈出的窗口中有運行方式這一欄,選擇最大化,然后確定就可以了。
怎么樣?如果還是不行的話,你就用鼠標把窗口拖成最大,然后再關點IE,即重新啟動IE。就可以了
??????? RoR是Ruby on Rails的縮寫。Ruby on Rails是一個用于編寫網絡應用程序的框架,它基于計算機軟件語言Ruby,給程序開發人員提供強大的框架支持。Ruby on Rails包括兩部分內容:Ruby語言和Rails框架。
什么是Ruby?
????? Ruby語言是一種動態語言,它與Python、Smalltalk和Perl這3種編程語言有些類似。Ruby語言起源于日本,它的研發者是日本人松本行弘(Matsumoto Yukihiro)。松本行弘在1993年開始著手Ruby語言的研發工作,他開發Ruby語言的初衷是為了提高編程的效率。1995年12月Matz推出了Ruby的第一個版本Ruby 0.95。
Ruby語言的主要特點如下。
1.純的面向對象語言
在Ruby中,一切皆是對象。下面舉一個例子來更直觀地說明Ruby語言的這一特點。
在Java中,求一個數的絕對值的代碼如下。
int c = Math.abs(-20);
而在Ruby語言中,一切皆是對象,也就是說“-20”這個數也是一個對象,因此,求一個數絕對值的Ruby代碼形式如下。
c = -20.abs
這樣的代碼編寫方式是不是更形象一些呢?
2.解釋型腳本語言
Ruby語言是解釋型腳本語言,它既有腳本語言強大的字符串處理能力和正則表達式,又不失解釋型語言的動態性。一方面,在最初設計Ruby語言時,Ruby的研發者松本行弘考慮到文字處理方面的需要,他借鑒了Perl語言在文字處理方面的成功經驗。另一方面,松本行弘將Ruby語言設定為一種解釋型語言,Ruby的動態性使得由Ruby語言編寫的程序不需要事先編譯即可直接運行,這為程序的調試帶來了方便。同時,這一特點可以實現開發過程中的快速反饋。
3.其他特點
(1)動態載入。可以在運行時候重定義自己,類也可以在運行時繼承或取消繼承。
(2)自動內存管理機制。
(3)多精度整數。
(4)迭代器和閉包。
(5)開源項目。有大量活躍的社區支持Ruby語言。
什么是Rails?
??????? 雖然Ruby語言有很多優點,但是一直以來,其流行的范圍也僅限于日本。直到2004年,Ruby才逐漸被世界上其他地區的人們所認識,那么是什么讓Ruby語言走向世界的呢?是Rails。
????? Rails框架首次提出是在2004年7月,它的研發者是26歲的丹麥人David Heinemeier Hansson。不同于已有復雜的Web 開發框架,Rails是一個更符合實際需要而且更高效的Web開發框架。Rails結合了PHP體系的優點(快速開發)和Java體系的優點(程序規整),因此,Rails在其提出后不長的時間里就受到了業內廣泛的關注。
Rails框架主要有如下的6大特點。
1.全棧式的MVC框架
????? Rails是一個全棧式的MVC框架,換句話說,通過Rails可以實現MVC模式中的各個層次,并使它們無縫地協同運轉起來。
????? 在實際開發一個MVC模式的Web應用項目時,如果使用Java開發,需要用到Struts(Model層)、Hibernate(Controller層)和Spring(View層)3個框架,而且需要額外整合3個框架開發出的內容。而使用Ruby語言開發相同的項目時,只需要用到Rails框架就可以完成。
2.約定優于配置
????? 為了說明各個對象之間的關聯關系,一般的Web應用開發框架往往采用寫入XML配置文件的方法。這種方式雖然可以解決一些問題,但是卻帶來了管理上的混亂。
????? Rails對此的態度是約定優于配置,這意味著在Rails中不會出現XML配置文件。Rails使用Web應用多年來積累的各種常見約定(更具體地說是命名規則)來代替XML配置文件,而在Rails內部的映射與發現機制根據這些約定可以實現對象之間的關聯。在第1章中,通過Rails的映射與發現機制實現了數據表與Ruby對象之間的關聯。
3.更少的代碼
????? 使用約定來代替XML配置文件說明Rails本身完成了大量的底層工作,這意味著使用更少的代碼來實現應用程序是極有可能的。此外,代碼量的縮減也減小了出現bug的可能性,降低了維護程序和升級程序的難度。
4.生成器
????? Rails使用的實時映射技術和元編程技術,免去了開發人員在開發過程中編寫大量樣板文件代碼的煩惱。在少數需要使用樣板文件代碼的時候,開發人員可以通過Rails內建的生成器腳本實時創建,而不再是通過手工編寫。Rails的這個特點可以使開發人員更專注于系統的邏輯結構,而不必為一些瑣碎的細節所煩擾。
5.零周轉時間
????? 對已有的Web應用系統進行修改后,其一般需要經過配置、編譯、發布、重新設置、測試等一系列步驟才能投入使用,這明顯浪費了許多時間。而使用Rails開發Web應用系統,可以通過瀏覽器即時查看程序運行結果,從而節約了大量的時間。
6.支架系統
????? Rails的支架系統可以自動為任何相關的數據庫表創建一套包含標準CRUD操作和前臺視圖的系統。通過支架系統,開發人員可以方便快捷地操縱數據庫中的數據表。此外,Rails也允許開發人員使用自己設計的代碼或視圖來替換自動生成的代碼和視圖。
????? 目前,Rails的最新版本是2005年12月13日發布的v1.0.0。從RoR正式提出到v1.0.0的發布,RoR在一年多的時間里受到了業內人士的廣泛關注。RoR受到廣泛關注主要有如下兩個原因:首先,RoR的開發效率高(部署容易)、功能豐富(支持Ajax等流行應用),有消息稱對于相同的Web開發項目,使用RoR開發比使用Java體系架構開發快5~10倍;此外,令人不可思議的高性能是其受到關注的另一個重要原因,根據CSDN上轉載的新聞稱使用RoR開發出來的項目性能,比基于Struts+Hibernate+Spring的Java應用還要高15%~20%。
????? RoR當前遇到的主要問題是使用RoR搭建的大型商業應用還很少,究其原因可以概括為兩點:第一,從開發能力的角度,RoR是一個基于Ruby語言的輕型Web開發框架,很多開發者對其是否適合大型應用難以把握。第二,本身使用RoR開發的大型商業應用較少,使得后來者持觀望態度。
????? 綜合分析來看,RoR的發展前景還是很光明的。RoR在短時間內取得了巨大的成就,它打破了Web開發領域的固有觀念,方便快捷的開發方式使其被廣泛接受。而事實上,現在已有幾家跨國公司正在使用RoR開發自己的Web應用程序,并且有多家大型公司在考慮使用RoR進行Web應用開發。
ROR開發環境的配置見如下鏈接
http://hi.baidu.com/jadmin/blog/item/a0d7f2ef456aca34acafd584.html