
今天跟一位美國回來的大學(xué)宿舍同學(xué)聚會,此兄留學(xué)博士畢業(yè),目前在美國一所公立大學(xué)任教,拿著不菲的薪水,現(xiàn)在卻想著回國發(fā)展,這次回來就是來參加中科院的面試。他有一位做大學(xué)老師的父親,從小過著衣食無憂有規(guī)劃的生活,每一次人生重大選擇都有他父親張羅著親戚朋友同學(xué)給一塊出主意,想來人生雖有波瀾,卻也幸福安穩(wěn)。我們同宿舍其他幾位就沒這么好的福氣了,都是從外地考到北京,家庭條件如何不說,至少對于人生的規(guī)劃和選擇,基本上都得自己想主意,自己去試錯,但也落得瀟灑自由。
人生之路怎樣去走,本無優(yōu)劣對錯,只要不是渾渾噩噩,就算對得起自己人生在世走一遭。不過自己心中卻埋下了一個疑問,將來對我自己的小孩,應(yīng)當教他怎樣去過自己的一生。
開始項目開發(fā)復(fù)盤,此次復(fù)盤主要從三個角度出發(fā),第一是關(guān)于MVC模型的理解,第二是網(wǎng)站基本業(yè)務(wù)邏輯設(shè)計,第三是Servlet/JSP開發(fā)過程中的一些坑。
(一)MVC模型的一些理解
MVC也被稱為Model2 模型,自然也就有Model 1模型。不過MVC作為當下最流行的Web應(yīng)用架構(gòu),我自然是從這里開始學(xué)習的。所以一開始我設(shè)計的架構(gòu)模式是這樣的:

實際開發(fā)過程中,走著走著就變形成這樣式兒了:

嗯,實在是因為Tomcat服務(wù)器“很友好”地把網(wǎng)站入口默認設(shè)置成了index.jsp,我開始還想掰回來從Servlet入口先處理瀏覽器請求,后來發(fā)現(xiàn)完全多余,尤其是網(wǎng)站中大部分的Get請求,先用Servlet處理完全就是脫了褲子放屁。后來就把Servlet定位于專門處理Post請求,分析提交的表單數(shù)據(jù),使用JavaBean業(yè)務(wù)單元進行處理,根據(jù)結(jié)果調(diào)用相應(yīng)的網(wǎng)頁進行響應(yīng)。
(二)網(wǎng)站基本業(yè)務(wù)邏輯設(shè)計
本階段網(wǎng)站基本業(yè)務(wù)邏輯主要包括單個用戶的業(yè)務(wù)邏輯,單個活動的業(yè)務(wù)邏輯。分別如下:

其中,數(shù)據(jù)庫的連接開始我放在了Controller層,用起來很不方便。后來還是放在Model層比較合適,在Tomcat中設(shè)置了一個JNTI數(shù)據(jù)庫服務(wù),直接在Model層構(gòu)造器中調(diào)用服務(wù)器提供的服務(wù)。
其他基本業(yè)務(wù)邏輯主要是要考慮業(yè)務(wù)流程的代碼實現(xiàn)(稍復(fù)雜的業(yè)務(wù)流程最好畫個簡單的示意圖),難點在流程設(shè)計,如何用變量控制分支,如何給不同的操作結(jié)果用變量賦予含義,以及針對不同的結(jié)果,如何在View層表達出來等。
(三)Servlet/JSP開發(fā)中的一些小竅門
這一部分主要是總結(jié)下這幾天遇到的一些坑,先從Tomcat服務(wù)器的配置說起。與HttpServer內(nèi)置式API接口不同,Tomcat提供一個獨立于Web應(yīng)用程序的服務(wù)器,只需要將應(yīng)用程序與服務(wù)器綁定,然后把服務(wù)器啟動起來,然后就可以邊改應(yīng)用程序邊看修改結(jié)果了,非常方便。
(1)Tomcat服務(wù)器的配置文件

我只是粗略研究了web.xml;server.xml;context.xml三個配置文件,其中我在文件路徑的研究花了我不少時間,至少影響以下幾方面:
(2)無法向JSP中引入靜態(tài)資源的問題;
開始在JSP中無論把靜態(tài)資源考到那個文件夾,把路徑怎樣設(shè)置都無法引入。后來找到辦法,在server.xml中添加一句
<Context docBase="D:/Java/adt-bundle-windows-x86-20131030/Workspace/CommunityEntertain/WebContent/StaticFile" path="/static" reloadable="true" />
然后在link中,將url寫成"/static/xx.css"文件就可以了。代碼中,docBase代表本地硬盤路徑,path代表虛擬映射路徑。
(3)無法在子頁面間共享一個session問題;
我在登錄后,使用session記錄了我的登錄狀態(tài)(登錄令牌)。然后在首頁點擊一個鏈接進入子頁面時,發(fā)現(xiàn)我的登錄令牌失效了,無論怎樣調(diào)試都不起作用。折騰半天,網(wǎng)上查的資料也都不管用,后來終于試出來,原來登錄令牌并沒有丟,而是我將子頁面放在了一個虛擬映射路徑中了,鏈接轉(zhuǎn)過去的時候,系統(tǒng)就自動重建了一個Session。將子頁面放到根目錄下就沒問題了。
(4)同一個文件在Servlet,JSP,甚至redirect時的路徑名都會不同。
這個也是路徑問題,JSP可以用虛擬映射路徑,但是Servlet不能用;用控制器redirect頁面時,發(fā)現(xiàn)轉(zhuǎn)向文件在同一目錄下時直接寫文件名就可以了。
(5)數(shù)據(jù)庫中記錄id編碼的自增
數(shù)據(jù)庫增加記錄要想做到編號自增,需要首先給ID字段屬性增加自增性
alter table 表名 modify 字段名 數(shù)據(jù)類型 AUTO_INCREMENT;
然后在添加記錄時,不要主動給ID賦值就可以了。
最后貼一個圖,然后睡啦

下一階段目標:基本算法、程序設(shè)計模式、軟件架構(gòu)模式、復(fù)雜業(yè)務(wù)、Spring/SpringMVC/Mybatis、CEv6.0