首先了解一下下面幾個概念,講得不太准確:
1、JVM
JVM是class以及jar(實際上就是很多個class壓縮在一起)的運行環境,特征就是java和javaw命令,通過這兩個命令,你可以執行class和jar文件。你可以通過-classpath參數指定你需要加載的jar文件
2、JDK
JDK就是JAVA的命令行開發環境,內置了JVM,特征就是javac命令,這個命令允許你將.java源文件批量或者單個編譯成.class文件,從而可以通過JVM的java命令執行。在編譯時你可以通過-classpath參數指定你的源代碼依賴的jar文件。
3、Tomcat等JEE中間件
JEE中間件主要是為了讓JAVA程序能夠提供http服務、向客戶展現html及相關資源而准備的一個運行環境,通常已經包含了JDK(或者像 tomcat一樣需要配置JDK所在路徑).這個運行環境的特征是能夠讓你部署一個war包,運行環境能夠自動加載WEB-INF/classes下 的.class文件和WEB-INF/lib下jar文件。當用戶通過瀏覽器訪問中間件中你的war包所部署的路徑時,中間件能夠按照J2EE標准調用你 的war包中的class和jsp頁面,並將執行結果返回給瀏覽器。 在這種情況下你只需要將你的.java文件編譯好放到WEB-INF/classes目錄下。
然后說說純文本JAVA WEB開發,有這么幾種類型:
1、純文本只有JSP
如果項目中只有jsp頁面,就很稀松平常了,你只需要在tomcat的webapps下新建一個目錄,然后在里面新建.jsp文件,就可以通過類似於 http://localhost:8080/app/a.jsp的方式執行這個jsp文件了。早期的JAVA WEB項目都差不多是這么干的,那時候IDE的用處確實不大。別的技術像ASP和PHP之類十幾年了一直是用這種純文本的方式來編寫代碼,效率和有IDE 沒太大差別。
2、除了JSP還有輔助JAVA類
如果除了JSP以外,你還需要一些JAVA類來輔助JSP頁面,這時候你必須手工新建.java文件,然后用通過文本編輯器(記事本/vi/UE等)打開 他,往里面手工寫代碼。你將代碼寫完后,還需要將這個.java文件編譯成.class,然后才能放到WEB-INF/classes下執行,
有兩種方式完成編譯動作:
方式一:JDK+構建工具(ANT或者MAVEN),通過配置ANT調用JDK中的javac命令將你的JAVA代碼編譯成class並放置到你的WEB-INF/classes目錄下
方式二:ANT實際上也是將你的配置轉換成javac命令中的各種參數,所以你也可以直接在命令行輸出javac,然后javac就會提示你需要提供什么樣的參數以及各種參數有什么用途,你可以根據提示自己調用javac編譯.java文件成.class文件。
兩種方式效率都有點低,所以你還需要有一個.bat(或者.sh)批處理文件來幫助你每隔幾十秒就自動編譯一下指定目錄下的.java文件。
你可能需要寫的輔助JAVA類有:
一、全局性的ServletFilter(例如用於用戶權限檢查)
二、復雜輸出的Servlet(jsp不適合用來動態向瀏覽器提供圖片等資源,這時候寫Servlet)
三、在JSP中使用的Tag類,以減少JSP中大量的<%%>代碼。
這種類不會很多,一般項目能有二三十個就差不多了,所以最初寫輔助類的痛苦時期過去以后,開發效率就和使用IDE沒什么區別了
3、除了JSP還有大量JAVA類
你的系統比較龐大了,需要一些框架性的東西來進行總體約束,然后在按照框架的要求來編寫大量的JAVA類,通過這些JAVA類來完成瀏覽器端的請求。
這時候你的系統狀態已經比較類型與SSH這種形態了,每個頁面都會有對應的Action/Controller,以及FormBean/Model,或者還有專門的Service/BL類和DAO類。
這樣你的系統中就會有大量的.java文件需要編譯成.class,而且要引用的jar數量也顯著增加,這時候你作為一個沒有IDE的人,痛苦就要來了:
大量的時間花在等待編譯上了,無論是使用構建工具的增量編譯功能還是自己寫一個更強大的批處理文件來掃描改動過的類,每次編譯都需要一點時間,並且都不是非常可靠。特別是“減量編譯”通常都支持不好,可能會有潛在的錯誤。
如果每次都使用全部重新編譯以得到可靠的編譯結果,那么最好的做法是讓你每個JAVA類都一次寫完一次編譯成功,如果多出幾個錯誤或者多修改幾次,你會發現編譯用的時間就顯著大於你寫代碼的時間。
這種情況下純文本和IDE的開發效率會有顯著的區別。
如果我必須在這種痛苦的純文本條件下工作,我會先寫一個JAVA類,讓這個JAVA類單獨開一個進程運行,這個進程會自動掃描相應目錄下的java文件增/改/刪,
然后調用sun.tools.javac.Main類來進行編譯,如果只是新增和修改則只單獨編譯幾個類,如果有刪除則全部重新編譯。
那么Eclipse做了些什么?
1、Eclipse提供了WEB項目工程向導,幫助你快速創建項目
2、Eclipse將你的WEB-INF/lib下的jar文件管理起來,並對其中的class類進行了索引,以便於你快速查看相關類的位置、繼承關系、引用關系。
3、Eclipse提供一個完善的增量編譯器,所寫即所得。Eclipse當年能夠勝出的一個重要原因就在他的編譯器,Eclipse的JDT實現了自己 的編譯器(因此Eclipse甚至都不需要JDK,只要有JVM就可以了),能夠快速、增量地將你對代碼的修改反映到class文件上。這是當時的 JBuilder望塵莫及的,當時每次改完類都得重新編譯一下,那個痛苦呀,當時我在公司引進Eclipse的時候,兩個月之內大家就全部拋棄 JBuilder X了(當時花了錢買了正版)。
4、提供了完善的調試功能,基於IDE的調試效率會遠高於命令行調試。
5、提供了語法加亮、語法提示、中間件管理等輔助工具。
1. 首先建一個文件夾作為工程名稱,比如Hello好了,
2. 在Hello下建立WEB-INF文件夾。
3. 在WEB-INF文件夾下面建lib,classes兩個文件夾,還有web.xml文件
4. 編輯web.xml的內容,有能力的,直接徒手寫出來,不怕也就一個xml而已,請配welcome file為index.jsp。
5. 在Hello下新建一個index.jsp,編輯內容。
把Hello整個拷貝到tomcat的webapps下,啟動tomcat,一個最簡但的web項目就好了。
編寫java類,你懂的,不多說了。假設我們用notepad創建一個HelloServlet.java,有能力的,直接徒手用記事本寫出Servlet來。
編譯java類,javac懂吧?如果類有多層的包結構,可以手動的在classes下創建包結構,然后把javac得到的class文件拷進去嘛。
javac -d . HelloServlet.java
該命令可以自動生成含有包結構的class文件,拷貝到classes文件夾就好了。
然后配置web.xml中的servlet。
這樣,如果類很多的話,很累吧?工作效率很低?
請用Ant吧,寫個合適的build.xml然后ant一下,真方便啊。
