Java Web :一個入門工程總結(jié) (No.1)

大致總結(jié)一下兩種開發(fā)模式的流程,然后以 MVC模式的一個簡單工程為例,詳細(xì)總結(jié)一下具體的代碼

(這篇博客是跟隨課堂筆記的最開始一篇,之后的每節(jié)課內(nèi)容會順序更新)


一、Java Web的兩種模式 :

1. Model1 : 模式1

先上總體的結(jié)構(gòu)圖

Model1 模式圖

具體來說:

(1)首先使用 HTML或者 JSP編寫一個頁面(使用JSP便于讓數(shù)據(jù)回流,以便于某些功能的實現(xiàn),JSP中通過Java代碼段從發(fā)來的Request 中根據(jù)屬性值獲得數(shù)據(jù)并插入顯示在網(wǎng)頁中),在這個頁面的表單中輸入數(shù)據(jù),然后點(diǎn)擊提交按鈕,信息便從用戶端發(fā)給了服務(wù)器端

(2)服務(wù)器端 JSP (thanks.jsp) 既要接收并處理數(shù)據(jù),還要顯示一定的內(nèi)容,同時還要對用戶發(fā)來的數(shù)據(jù)進(jìn)行更進(jìn)一步的處理(往下與 user.class userDB.java進(jìn)行互動),可以說鴨梨山大。

(3)user.class userDB.java負(fù)責(zé)為thanks.jsp提供服務(wù),例如 thanks.jsp可以封裝一個User對象然后通過 userDB.java將新用戶的數(shù)據(jù)寫入數(shù)據(jù)庫中

總結(jié) :Model1模式下,thanks.jsp的負(fù)擔(dān)太重,對于非常簡單的業(yè)務(wù)處理的話還好說,復(fù)雜一些的業(yè)務(wù)的話就不太合適了

2.Model2 : 也稱 MVC模式

貼圖:


MVC模式圖

在這個例子中,MVC模式的運(yùn)作:

M: Model 主要就是 User.class UserDB.class 功能和之前說的差不多

V: View 這一部分主要是 : Controller接收并處理完數(shù)據(jù)之后給View一個指令,然后View就根據(jù)這個指令為用戶展示出相應(yīng)的頁面,

C: Controller 這一部分主要負(fù)責(zé)數(shù)據(jù)的進(jìn)一步處理(例如用戶數(shù)據(jù)的封裝并序列化存儲到數(shù)據(jù)庫中)

我理解的大致流程:

用戶發(fā)送數(shù)據(jù)到服務(wù)器端,首先發(fā)送給了 Controller(即 EmailListServlet.java), 在這里我們只需要接收數(shù)據(jù),處理數(shù)據(jù),然后與Model模塊(M模塊)進(jìn)行交互,最后指示View模塊應(yīng)該顯示怎樣的頁面反饋給用戶

在代碼中看一下:

完整的EmailListServlet.java 代碼:

還算完整的代碼段

第一部分就是接收了從客戶端發(fā)來的數(shù)據(jù)(這里因為客戶端也是自己,所以客戶端就是 index.jsp)

通過 request.getParameter("name") 來接收數(shù)據(jù)

第二部分就是和 Model模塊進(jìn)行交互了 (雖然并沒有完全實現(xiàn)? : - )? ? )

第三部分,將我們要發(fā)送給 View 模塊的數(shù)據(jù)打包( setAttribute方法 ), 這里的 View 模塊就是 thanks.jsp了


二、MVC模式下的一個實例工程 :

以上課時講的工程為例子 :

1. 工程結(jié)構(gòu) :

對應(yīng)上面的圖來說明一下

紅色的部分代表我工程中對應(yīng)的文件

User.java 雖然寫好了但是,因為沒有弄序列化所以還沒法傳給 thanks.jsp

圖中沒有寫 最關(guān)鍵的一個文件 :

負(fù)責(zé) index.jsp -> emailListServlet? 映射配置的 web.xml,這個會在后面提到

我工程的結(jié)構(gòu)圖

2.具體代碼 :

(1)thanks.jsp

它屬于 View層次,所以就有兩個職責(zé),接收來自Controller的指令(實際上就是一個包含一些數(shù)據(jù)的請求), 然后將這些數(shù)據(jù)展示給用戶看 ,具體代碼如下 :

thanks.jsp

顯然第一個圈里面就是從 request 中接收了數(shù)據(jù) (數(shù)據(jù)來自 Controller),第二個圈就是把這些數(shù)據(jù)展示出來,View頁面負(fù)責(zé)的就是顯示,所以涉及數(shù)據(jù)處理的部分不會很復(fù)雜

(2) emailListServlet.java 上面大致說過了,這里說一下一些細(xì)節(jié):

thanks.jsp

黃色的圈里的 url指定了要把打包好的數(shù)據(jù)發(fā)送到哪里(發(fā)送到 View 模塊去), 這里需要注意的就是 url 的寫法,之前沒有加 /thanks.jsp 中的 / , 導(dǎo)致找不到文件(404 not found),至于最后這個長長的語句,功能上就是把上面打包好的數(shù)據(jù)發(fā)送到url指定的頁面中。

(3) index.jsp

因為這個里面很大一部分是修使用的 HTML 和 CSS 代碼,所以有些長,這里只把關(guān)鍵的 表單部分代碼貼出來


index.jsp

其實這里面關(guān)鍵的部分只有幾個:

①第一個圈里畫的 action 和 method :

action 指的是要把數(shù)據(jù)發(fā)送到哪里,method是指怎么發(fā)送數(shù)據(jù),如果method 不是 post ,而是 get 的話,獲取數(shù)據(jù)的方式就是通過拼接字符串了,而action屬性在這個工程中其實指向的是 emailListServlet.java ,正因為如此,才需要在 web.xml中配置從 index.jsp 到 emailListServlet.java 的映射,這樣 Controller才能收到數(shù)據(jù)

②也要注意用戶輸入數(shù)據(jù)的 name 屬性:

因為對方接收數(shù)據(jù)的時候是要通過這個 name 屬性來決定接收哪個數(shù)據(jù)的,如果屬性名匹配就無法接收到數(shù)據(jù)

3. web.xml

這也是很關(guān)鍵的一個環(huán)節(jié),如果 index.jsp -> emailListServlet.java 的映射沒有配好,數(shù)據(jù)就傳不到Controller中,也就沒有什么意義了

web.xml

三、運(yùn)行:

(1) index.jsp 輸入數(shù)據(jù) :

(2) 經(jīng)過 emailListServlet.java 處理后直接由 View 模塊返回給用戶結(jié)果 (thanks.java)

完整的工程壓縮文件地址 :

https://github.com/ALK416/Java_Web/blob/master/Task_9_21.zip

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容