一:學(xué)會如何讀一個(gè)JavaWeb項(xiàng)目源代碼 步驟:表結(jié)構(gòu)-web.xml-mvc-db-spring
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:申請域名、網(wǎng)頁空間、營銷軟件、網(wǎng)站建設(shè)、耿馬網(wǎng)站維護(hù)、網(wǎng)站推廣。
ioc-log- 代碼
1、先了解項(xiàng)目數(shù)據(jù)庫的表結(jié)構(gòu),這個(gè)方面是最容易忘記 的,有時(shí)候我們只顧著看每一個(gè)方法是怎么進(jìn)行的,卻沒
有去了解數(shù)據(jù)庫之間的主外鍵關(guān)聯(lián)。其實(shí)如果先了解數(shù)據(jù) 庫表結(jié)構(gòu),再去看一個(gè)方法的實(shí)現(xiàn)會更加容易。
2、然后需要過一遍web.xml,知道項(xiàng)目中用到了什么攔
截器,監(jiān)聽器,過濾器,擁有哪些配置文件。如果是攔截 器,一般負(fù)責(zé)過濾請求,進(jìn)行AOP 等;如果是監(jiān) 可能是定時(shí)任務(wù),初始化任務(wù);配置文件有如使用了 spring
后的讀取mvc 相關(guān),db 相關(guān),service 相關(guān),aop 相關(guān)的文件。
3、查看攔截器,監(jiān)聽器代碼,知道攔截了什么請求,這
個(gè)類完成了怎樣的工作。有的人就是因?yàn)槿鄙倭诉@一步, 自己寫了一個(gè)action,配置文件也沒有寫錯(cuò),但是卻怎么
調(diào)試也無法進(jìn)入這個(gè)action,直到別人告訴他,請求被攔
4、接下來,看配置文件,首先一定是mvc相關(guān)的,如 springmvc
中,要請求哪些請求是靜態(tài)資源,使用了哪些 view 策略,controller 注解放在哪個(gè)包下等。 然后是db 相關(guān)配置文件,看使用了什么數(shù)據(jù)庫,使用了
什么orm框架,是否開啟了二級緩存,使用哪種產(chǎn)品作 為二級緩存,事務(wù)管理的處理,需要掃描的實(shí)體類放在什 么位置。最后是spring 核心的ioc
功能相關(guān)的配置文件, 知道接口與具體類的注入大致是怎樣的。當(dāng)然還有一些如 apectj 置文件,也是在這個(gè)步驟中完成
5、log
相關(guān)文件,日志的各個(gè)級別是如何處理的,在哪些 地方使用了log 記錄日志
6、從上面幾點(diǎn)后知道了整個(gè)開源項(xiàng)目的整體框架,閱讀 每個(gè)方法就不再那么難了。
7、當(dāng)然如果有項(xiàng)目配套的開發(fā)文檔也是要閱讀的。
.java文件的話,非項(xiàng)目那種單篇幅的源代碼需要先進(jìn)行編譯,生成.class文件可以在命令控制臺下用java 文件名 進(jìn)行運(yùn)行,編譯java文件需要javac.exe程序 應(yīng)該是jdk中的工具,所以你需要下載jdk并配置環(huán)境變量,然后在控制臺運(yùn)行javac編譯源文件所在目錄下的java文件,會在本目錄下生成一個(gè)同名的.class文件
(沒有報(bào)錯(cuò)的情況下) ,然后運(yùn)行java 文件名 即可運(yùn)行該代碼(前提是你這篇文件需要有main方法)。
package?test2;
import?java.io.BufferedReader;
import?java.io.File;
import?java.io.FileInputStream;
import?java.io.FileOutputStream;
import?java.io.IOException;
import?java.io.InputStream;
import?java.io.InputStreamReader;
import?java.util.HashMap;
import?java.util.Map;
import?java.util.Set;
public?class?JavaCodeAnalyzer?{
public?static?void?analyze(File?file)?throws?IOException{
//FileOutputStream?fos?=?new?FileOutputStream("F;"+File.separator+"result.txt");
if(!(file.getName().endsWith(".txt")||file.getName().endsWith(".java"))){
System.out.println("輸入的分析文件格式不對!");
}
InputStream?is=?new?FileInputStream(file);
BufferedReader?br=?new?BufferedReader(new?InputStreamReader(is));
String?temp;
int?count=0;
int?countSpace=0;
int?countCode=0;
int?countDesc=0;
MapString,?Integer?map?=?getKeyWords();
while((temp=br.readLine())!=null){
countKeys(temp,?map);
count++;
if(temp.trim().equals("")){
countSpace++;
}else?if(temp.trim().startsWith("/*")||temp.trim().startsWith("http://")){
countDesc++;
}else{
countCode++;
}
}
System.out.printf("代碼行數(shù):"+countCode+"占總行數(shù)的%4.2f\n",(double)countCode/count);
System.out.printf("空行數(shù):"+countSpace+"占總行數(shù)的%4.2f\n",(double)countSpace/count);
System.out.printf("注釋行數(shù):"+countDesc+"占總行數(shù)的%4.2f\n",(double)countDesc/count);
System.out.println("總行數(shù):"+count);
System.out.println("出現(xiàn)最多的5個(gè)關(guān)鍵字是:");
System.out.println("");
System.out.println("");
System.out.println("");
System.out.println("");
System.out.println("");
}
public?static?void?main(String[]?args)?{
getKeyWords();
File?file?=?new?File("F://Test.java");
try?{
analyze(file);
}?catch?(IOException?e)?{
//?TODO?自動生成?catch?塊
e.printStackTrace();
}
}
public?static?MapString,Integer?getKeyWords(){
MapString,Integer?map?=?new?HashMapString,?Integer();
String[]keywords?=?{"abstract","assert","boolean","break","byte","case","catch","char","class","continue","default","do","double","else","enum","extends","final","finally","float","for","if","implements","import","instanceof","int","interface","long","native","new","package","private","protected","public","return","????strictfp","short","static","super","????switch","synchronized","this","throw","throws","transient","try","void","volatile","while","goto","const"};
for(String?s:keywords){
map.put(s,?0);
}
return?map;
}
public?static?void?countKeys(String?s,MapString,Integer?map){
SetString?keys?=?map.keySet();
for(String?ss:keys){
if(s.indexOf(ss)!=-1){
map.put(ss,?map.get(ss)+1);
}
}
}
}
上班沒啥時(shí)間了,還有點(diǎn)沒寫完,你在想想。
在Eclipse中查看JDK類庫的源代碼
設(shè)置:
1.點(diǎn) “window”- "Preferences" - "Java" - "Installed JRES"
2.此時(shí)"Installed JRES"右邊是列表窗格,列出了系統(tǒng)中的 JRE 環(huán)境,選擇你的JRE,然后點(diǎn)邊上的 "Edit...", 會出現(xiàn)一個(gè)窗口(Edit JRE)
3.選中rt.jar文件的這一項(xiàng):“c:\program files\java\jre_1.5.0_06\lib\rt.jar”?
點(diǎn) 左邊的“+” 號展開它
4.展開后,可以看到“Source Attachment:(none)”,點(diǎn)這一項(xiàng),點(diǎn)右邊的按鈕“Source Attachment...”, 選擇你的JDK目錄下的 “src.zip”文件
5.一路點(diǎn)"ok",結(jié)束。
dt.jar是關(guān)于運(yùn)行環(huán)境的類庫,主要是swing的包?
tools.jar是關(guān)于一些工具的類庫?
rt.jar包含了jdk的基礎(chǔ)類庫,也就是你在java doc里面看到的所有的類的class文件
使用:
可以在 Java 源代碼編輯器或代碼片段編輯測試窗中選擇類型、方法或字段的名稱,然后對元素的定義打開編輯器。
在 Java 編輯器中,選擇類型、方法或字段的名稱。您也可以僅僅在名稱中單擊一次。?
執(zhí)行下列其中一項(xiàng)操作:?
1.從菜單欄中,選擇瀏覽 打開聲明?
2.從編輯器的彈出菜單中,選擇打開聲明?
3.按 F3 鍵,如下圖
第一次使用eclipse查看jar包里的源代碼時(shí),沒有導(dǎo)入jdk的項(xiàng)目源碼,所以無法查看源碼。
查看源代碼的方法:
一、打開eclipse,點(diǎn)擊window,之后選擇Preferences選項(xiàng)。
二、找到Java選項(xiàng),點(diǎn)開,選擇Installed JRES,此時(shí)右邊是列表窗格,列出了系統(tǒng)中的JRE環(huán)境,選擇你的JRE,然后點(diǎn)邊上的Edit。
三、選中rt.jar文件的這一項(xiàng),點(diǎn)擊左邊的三角形展開它,之后會看到Source Attachment:(none),點(diǎn)這一項(xiàng),再點(diǎn)擊右邊的Source Attachment。
四、在彈出來的窗口中選擇External location再找到你jdk目錄下的src.zip文件,之后一直點(diǎn)擊ok就好了。