鯉魚論壇 研究筆記(未)
2008.10.21第一天網站地址: http://www.liyunet.com/
源碼下載: http://www.liyunet.com/bbs/download.jsp
我主要是利用該論壇的簡易性來研究JSP技術,以及緩存技術。雖然說目前大部分論壇應用的都是主流框架技術,但說回來,這些框架也只是對JSP等相關技術的一個封裝,而了解底部應用及其原理更容易讓我理解主流框架的內部原理機制。不至于讓框架把我們變成“傻子”。
那就開始吧
首先,和某些大蝦一樣的習慣,我們從WEB-INF下的web.xml開始,從以下代碼中可以發現隨著tomcat啟動時,自動加載了InitServlet類。這是一個Servlet類。
WEB-INF\web.xml部分代碼:


2

3

4

5

6


查看com.bcxy.servlet.InitServlet類,代碼很簡單:
開始做了一個對此類日志(log4j)的綁定。接著通過SystemConfig取得了系統配置中的連接類型conntype(查看classes目錄下的SystemConfig.xml可知此變量是判斷使用連接池的類型0:3P0; 1:Proxool)。接著是初始化操作,記錄一些必要的啟動信息(log4j)(其中做了本地地址和網絡訪問地址的轉換)。
用DBUtil.close測試連接池是否加載成功。
最后是釋放類所做的必要操作。判斷使用的是哪一種連接池,然后關閉。這樣我們的第一個類就分析完畢。
接著需要了解到
SystemConfig類是加載SystemConfig.xml配置文件,并設定方法去讀取。其中有一定的類型轉換。
此時似乎已經找不到頭緒了。那這樣吧。我們就開始訪問我們自己搭建的論壇,從首頁開始,也就是index.jsp頁面。
瀏覽index.jsp代碼,由上向下理解每一個語句的含義(整體分體)。
設定頁面編碼;導入IPLocalizer類(應該是做IP顯示的工具類);插入INC/const.jsp頁(過后會有分析);設定stats變量數值(通過閱讀其他jsp頁面發現,此變量的作用主要是在于在首頁顯示用戶狀態時,兼并顯示當前用戶做瀏覽的頁面:也就是stats的值,這樣我們可以在客戶可訪問的范圍內對stats變量進行設置,就可以查看在線用戶的當前行為);繼續插入INC/theme.jsp(估計是定制論壇模板的文件);<table>標簽內部就是連接到相關顯示數據信息的jsp頁面并附加了參數。其中的一些格式是通過上面引用文件中的變量設置,相對不難理解;論壇消息廣播部分,通過一個可執行jsp頁面vector顯示在首頁頂部,當中訪問數據庫的細節需要進一步研究代碼);接著是帖子的遍歷,也就是首頁最關鍵的部分,這里看起來不是由jsp頁面來負責獲取數據,而是通過Forum類來獲取一些過濾之后的數據:這里所說的過濾是例如置頂帖子,最新帖子等有一些特殊標記的數據:;
index.jsp的其他部分就都是大同小異了。都是通過一個遍歷來展現具有相同特性的數據。;大家需要注意一些關于頁面表現的而非java技術的部分,例如信息層的提示,和一些圖片連接。
通過index.jsp的學習,我們大概已經了解了大部分jsp頁面代碼的表現形式和含義。當然,一定要注意在這個過程中,參數傳遞、參數獲取的代碼部分,不要遺漏。除了一些我們可以看到的頁面之外,上面部分也講到了一些并不用于顯示給用戶的頁面,這里我們認為它是可執行頁面,也就是說它對我們的數據和請求做了一些處理,或者說把我們的請求轉交給了服務器(比如servlet)。
預計晚上要研究一下有關數據庫方面的存取類JdbcWrapper以及連接獲取和釋放、數據查詢插入。
2008.10.22
大概昨天寫的已經忘的差不多了,那么我們還是從index.jsp文件開始,前幾行沒有什么問題,都是一些導入文件的標簽,那么我們從SkinUtil.這個類入手。在查看SkinUtil類代碼的時候我們發現里面應用了一些com\bcxy\bbs\util?包中類,其中含有三個工具類。(偷笑,看了文件大小,應該代碼不多,我們看看里面都是什么)在開始之前我們應了解一下GCookie.java類的大概內容和作用??磳氚覀兛梢源蟾帕私庖幌麓祟惖淖饔茫簩RL的編碼與解碼,產生和讀取Cookie,還有就是做一些日志記錄(log4j)。
我們仔細閱讀后,了解到,其中有一個重載方法,也就是setCookie方法,根據不同的參數,可以讓我們選擇直接賦予變量名和值的方法,或者是賦予變量名和值另外加上最大保存時間的方法。? 類中的另一個方法是獲取Cookie方法值。
ParamUtil類也很簡單,是取得字符串和 取得整數的重載方法,其中的參數決定是否有默認值,是否需要轉碼。
SysUtil類中根據SystemConfig類中的讀取方法讀取配置文件systemconfig.properties,按照里面的設置,來判斷是否對參數和數據庫讀取操作中的參數進行編碼。其中還有一個方法是取得真實地址,當然這些都是根據systemconfig.properties文件中配置而定的。
BBSCconst.java類簡單的設置了一些常量。作用是設置數據庫表名的時候加上systemconfig.properties中設置的前綴。
回到SkinUtil.java類似乎看起來一些剛剛還陌生的類方法,顯得明朗。前面設置了一個Cookie的變量名并賦了值。

這里用到了新類,也就是我們昨天說過的要了解的關于數據庫連接的類。也是今天要解決的重點。打開JdbcWrapper類,查看代碼.(插一句,看代碼的時候,我覺得先看包名,了解大概要用到的類和方法,去設想這個類要實現的功能),yi一眼看來,大概都熟悉,無非是連接數據庫 讀取,結果保存,異常,還有一些類似數組的HashMap還有遍歷用得Iterator。想想,大概就是數據層的一些基礎CRUD操作。但是其中有個類不是很熟悉,DatabaseMetaData類,查看sun公司的在線文檔,發現這是個接口而且方法奇多,文檔的第一句這么寫,

我也不能理解這句話包含了什么內容。不管他,在程序中慢慢體會吧。JdbcWrapper這個類有點長,不過,大部分方法都有類似的作用,也就是說真正不同功能的代碼也只有幾分之一而已。我看的都想睡覺了。
在網吧,因為不便,先離開咯
今天還好,自己有一臺電腦,可以不限制時間。繼續工作....
之前研究JdbcWrapper類的時候有一個小小的疑問。如下
?

?2


?3

?4

?5



?6



?7

?8

?9

10

今天看群里鯉魚回答內容如下:

一時還沒有理解開來。
看過來看過去,JdbcWrapper類對我來講還是有一部分難以理解。索性不去管它,等在下面的代碼中出現時,反復查閱應該會有更多的收獲。