鯉魚論壇 研究筆記(未)

          2008.10.21第一天
          網(wǎng)站地址: http://www.liyunet.com/
          源碼下載: http://www.liyunet.com/bbs/download.jsp

          我主要是利用該論壇的簡易性來研究JSP技術(shù),以及緩存技術(shù)。雖然說目前大部分論壇應用的都是主流框架技術(shù),但說回來,這些框架也只是對JSP等相關(guān)技術(shù)的一個封裝,而了解底部應用及其原理更容易讓我理解主流框架的內(nèi)部原理機制。不至于讓框架把我們變成“傻子”。


          那就開始吧
          首先,和某些大蝦一樣的習慣,我們從WEB-INF下的web.xml開始,從以下代碼中可以發(fā)現(xiàn)隨著tomcat啟動時,自動加載了InitServlet類。這是一個Servlet類。
          WEB-INF\web.xml部分代碼:
          1
          2<servlet-name>InitServlet</servlet-name>
          3????????<servlet-class>com.bcxy.servlet.InitServlet</servlet-class>
          4????????<load-on-startup>1</load-on-startup>
          5??????</servlet>
          6

          查看com.bcxy.servlet.InitServlet類,代碼很簡單:
          開始做了一個對此類日志(log4j)的綁定。接著通過SystemConfig取得了系統(tǒng)配置中的連接類型conntype(查看classes目錄下的SystemConfig.xml可知此變量是判斷使用連接池的類型0:3P0; 1:Proxool)。接著是初始化操作,記錄一些必要的啟動信息(log4j)(其中做了本地地址和網(wǎng)絡(luò)訪問地址的轉(zhuǎn)換)。
          用DBUtil.close測試連接池是否加載成功。
          最后是釋放類所做的必要操作。判斷使用的是哪一種連接池,然后關(guān)閉。這樣我們的第一個類就分析完畢。
          接著需要了解到
          SystemConfig類是加載SystemConfig.xml配置文件,并設(shè)定方法去讀取。其中有一定的類型轉(zhuǎn)換。

          此時似乎已經(jīng)找不到頭緒了。那這樣吧。我們就開始訪問我們自己搭建的論壇,從首頁開始,也就是index.jsp頁面。
          瀏覽index.jsp代碼,由上向下理解每一個語句的含義(整體分體)。

          設(shè)定頁面編碼;導入IPLocalizer類(應該是做IP顯示的工具類);插入INC/const.jsp頁(過后會有分析);設(shè)定stats變量數(shù)值(通過閱讀其他jsp頁面發(fā)現(xiàn),此變量的作用主要是在于在首頁顯示用戶狀態(tài)時,兼并顯示當前用戶做瀏覽的頁面:也就是stats的值,這樣我們可以在客戶可訪問的范圍內(nèi)對stats變量進行設(shè)置,就可以查看在線用戶的當前行為);繼續(xù)插入INC/theme.jsp(估計是定制論壇模板的文件);<table>標簽內(nèi)部就是連接到相關(guān)顯示數(shù)據(jù)信息的jsp頁面并附加了參數(shù)。其中的一些格式是通過上面引用文件中的變量設(shè)置,相對不難理解;論壇消息廣播部分,通過一個可執(zhí)行jsp頁面vector顯示在首頁頂部,當中訪問數(shù)據(jù)庫的細節(jié)需要進一步研究代碼);接著是帖子的遍歷,也就是首頁最關(guān)鍵的部分,這里看起來不是由jsp頁面來負責獲取數(shù)據(jù),而是通過Forum類來獲取一些過濾之后的數(shù)據(jù):這里所說的過濾是例如置頂帖子,最新帖子等有一些特殊標記的數(shù)據(jù):;
          index.jsp的其他部分就都是大同小異了。都是通過一個遍歷來展現(xiàn)具有相同特性的數(shù)據(jù)。;大家需要注意一些關(guān)于頁面表現(xiàn)的而非java技術(shù)的部分,例如信息層的提示,和一些圖片連接。
          通過index.jsp的學習,我們大概已經(jīng)了解了大部分jsp頁面代碼的表現(xiàn)形式和含義。當然,一定要注意在這個過程中,參數(shù)傳遞、參數(shù)獲取的代碼部分,不要遺漏。除了一些我們可以看到的頁面之外,上面部分也講到了一些并不用于顯示給用戶的頁面,這里我們認為它是可執(zhí)行頁面,也就是說它對我們的數(shù)據(jù)和請求做了一些處理,或者說把我們的請求轉(zhuǎn)交給了服務器(比如servlet)。

          預計晚上要研究一下有關(guān)數(shù)據(jù)庫方面的存取類JdbcWrapper以及連接獲取和釋放、數(shù)據(jù)查詢插入。
          2008.10.22
          大概昨天寫的已經(jīng)忘的差不多了,那么我們還是從index.jsp文件開始,前幾行沒有什么問題,都是一些導入文件的標簽,那么我們從SkinUtil.這個類入手。在查看SkinUtil類代碼的時候我們發(fā)現(xiàn)里面應用了一些com\bcxy\bbs\util?包中類,其中含有三個工具類。(偷笑,看了文件大小,應該代碼不多,我們看看里面都是什么)在開始之前我們應了解一下GCookie.java類的大概內(nèi)容和作用。看導入包我們可以大概了解一下此類的作用:對URL的編碼與解碼,產(chǎn)生和讀取Cookie,還有就是做一些日志記錄(log4j)。
          我們仔細閱讀后,了解到,其中有一個重載方法,也就是setCookie方法,根據(jù)不同的參數(shù),可以讓我們選擇直接賦予變量名和值的方法,或者是賦予變量名和值另外加上最大保存時間的方法。? 類中的另一個方法是獲取Cookie方法值。
          ParamUtil類也很簡單,是取得字符串和 取得整數(shù)的重載方法,其中的參數(shù)決定是否有默認值,是否需要轉(zhuǎn)碼。
          SysUtil類中根據(jù)SystemConfig類中的讀取方法讀取配置文件systemconfig.properties,按照里面的設(shè)置,來判斷是否對參數(shù)和數(shù)據(jù)庫讀取操作中的參數(shù)進行編碼。其中還有一個方法是取得真實地址,當然這些都是根據(jù)systemconfig.properties文件中配置而定的。
          BBSCconst.java類簡單的設(shè)置了一些常量。作用是設(shè)置數(shù)據(jù)庫表名的時候加上systemconfig.properties中設(shè)置的前綴。
          回到SkinUtil.java類似乎看起來一些剛剛還陌生的類方法,顯得明朗。前面設(shè)置了一個Cookie的變量名并賦了值。

          ret?=?new?JdbcWrapper().doIntSearch(sql,?0);

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

          Comprehensive?information?about?the?database?as?a?whole.?

          我也不能理解這句話包含了什么內(nèi)容。不管他,在程序中慢慢體會吧。JdbcWrapper這個類有點長,不過,大部分方法都有類似的作用,也就是說真正不同功能的代碼也只有幾分之一而已。我看的都想睡覺了。

          在網(wǎng)吧,因為不便,先離開咯
          今天還好,自己有一臺電腦,可以不限制時間。繼續(xù)工作....
          之前研究JdbcWrapper類的時候有一個小小的疑問。如下

          ?

          ?1?????//######這里有一點不明白,為什么要判斷getAutoClose()
          ?2????/*
          ?3?????*?當需要事務支持時,需要設(shè)置autoClose=false,那就等到事務提交時再關(guān)閉數(shù)據(jù)庫連接。
          ?4?????*?*/

          ?5????public?void?closeConnection()?{
          ?6????????if?(getAutoClose())?{
          ?7????????????DBUtil.close(pstmt,?con);
          ?8????????}

          ?9????}

          10

          今天看群里鯉魚回答內(nèi)容如下:

          當需要事務支持時,需要設(shè)置autoClose=false,那就等到事務提交時再關(guān)閉數(shù)據(jù)庫連接。


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

          posted on 2008-10-21 11:47 金家寶 閱讀(368) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 江阴市| 乌兰察布市| 衡东县| 常宁市| 达日县| 英吉沙县| 澎湖县| 昭觉县| 尤溪县| 青州市| 大荔县| 北川| 清新县| 灵台县| 宝丰县| 剑川县| 南陵县| 海盐县| 永新县| 聊城市| 邵阳县| 城口县| 郁南县| 临安市| 侯马市| 呼图壁县| 云龙县| 富锦市| 湘西| 中江县| 朝阳区| 柳州市| 凌海市| 连南| 安福县| 射洪县| 吴忠市| 饶河县| 桐梓县| 西昌市| 六盘水市|