初學(xué)java的小白接到了項(xiàng)目:JSP頁(yè)面與MySQL數(shù)據(jù)庫(kù)連接、MVC模式等。怎么做才能體現(xiàn)項(xiàng)目需求呢?
網(wǎng)友解答: 謝謝邀請(qǐng)!JSP是Java Web開(kāi)發(fā)的傳統(tǒng)技術(shù)之一,雖然弊端比較多,比如業(yè)務(wù)邏輯與顯示邏輯耦合、無(wú)法分別部署、開(kāi)發(fā)角色分工不清等問(wèn)題,但是JSP對(duì)于初學(xué)者來(lái)說(shuō)還是有一定的學(xué)
謝謝邀請(qǐng)!
JSP是Java Web開(kāi)發(fā)的傳統(tǒng)技術(shù)之一,雖然弊端比較多,比如業(yè)務(wù)邏輯與顯示邏輯耦合、無(wú)法分別部署、開(kāi)發(fā)角色分工不清等問(wèn)題,但是JSP對(duì)于初學(xué)者來(lái)說(shuō)還是有一定的學(xué)習(xí)必要性,有不少遺留項(xiàng)目依然需要采用JSP技術(shù)。
MySQL數(shù)據(jù)庫(kù)是目前使用比較多的數(shù)據(jù)庫(kù)之一,尤其在Web開(kāi)發(fā)領(lǐng)域。MySQL數(shù)據(jù)庫(kù)簡(jiǎn)單易學(xué)且功能強(qiáng)大,Java程序員往往都對(duì)MySQL數(shù)據(jù)庫(kù)比較熟悉。雖然通過(guò)JSP直接連接MySQL數(shù)據(jù)庫(kù)是可以做到的,但是這種做法顯然是有很多問(wèn)題的,恰好通過(guò)MVC結(jié)構(gòu)是可以基本解決這些問(wèn)題的。
MVC是一個(gè)軟件開(kāi)發(fā)領(lǐng)域的經(jīng)典結(jié)構(gòu),采用MVC進(jìn)行Web開(kāi)發(fā)也就是所謂的Model2開(kāi)發(fā)方式,這種開(kāi)發(fā)方式用JavaBean來(lái)描述M(模型),采用JSP來(lái)描述V(視圖),采用Servlet來(lái)描述C(控制器)。MVC最大的好處是實(shí)現(xiàn)了不同部分的解耦,提升了Web程序的模塊化程度,使得多角色協(xié)作開(kāi)發(fā)有了重要的基礎(chǔ),也為日后的優(yōu)化打下來(lái)基礎(chǔ)。
要想利用MVC結(jié)構(gòu)完成一個(gè)傳統(tǒng)Java Web開(kāi)發(fā),需要綜合使用Servlet、JSP、JavaBean、JDBC、MVC、DAO等一系列傳統(tǒng)技術(shù),而通過(guò)一個(gè)模擬銀行“存取轉(zhuǎn)”業(yè)務(wù)的Web應(yīng)用是一個(gè)不錯(cuò)的選擇。
存取轉(zhuǎn)業(yè)務(wù)的基礎(chǔ)是賬戶(hù),所以可以先寫(xiě)一個(gè)Account類(lèi)作為M部分,然后為M定義一個(gè)映射表格。以DAO的方式完成數(shù)據(jù)庫(kù)與Account類(lèi)的映射,需要定義接口、實(shí)現(xiàn)類(lèi)和工廠類(lèi)。接著定義控制器Servlet,在Servlet中完成用戶(hù)請(qǐng)求的各種“導(dǎo)航”,最終通過(guò)JSP完成呈現(xiàn)。
這個(gè)過(guò)程只是一個(gè)基本的模擬,而且并沒(méi)有采用任何開(kāi)源框架,對(duì)于Java學(xué)習(xí)者來(lái)說(shuō),學(xué)習(xí)開(kāi)源框架是必要的。在掌握了MVC和DAO之后,再學(xué)習(xí)SpringMVC和Mybatis會(huì)更容易理解。
作者簡(jiǎn)介:中國(guó)科學(xué)院大學(xué)計(jì)算機(jī)專(zhuān)業(yè)研究生導(dǎo)師,從事IT行業(yè)多年,研究方向包括動(dòng)態(tài)軟件體系結(jié)構(gòu)、大數(shù)據(jù)、人工智能相關(guān)領(lǐng)域,有多年的一線(xiàn)研發(fā)經(jīng)驗(yàn)。
歡迎關(guān)注作者,歡迎咨詢(xún)計(jì)算機(jī)相關(guān)問(wèn)題。
網(wǎng)友解答:謝邀~
針對(duì)這個(gè)問(wèn)題,具體的怎么連接數(shù)據(jù)庫(kù),怎么增刪查改,這些代碼自己用google一下就可以得到答案,這里就不細(xì)說(shuō);初學(xué)者寫(xiě)代碼經(jīng)常會(huì)有個(gè)問(wèn)題:把所有代碼都寫(xiě)在“一層”里,甚至是一個(gè)類(lèi)、一個(gè)方法里。
下面我談?wù)勛约旱慕ㄗh,如果意見(jiàn)不同,請(qǐng)留言討論。
什么是MVCMVC是Model—View—Controler的簡(jiǎn)稱(chēng);即模型—視圖—控制;MVC是一種設(shè)計(jì)模式,它強(qiáng)制性的把應(yīng)用程序的輸入、處理和輸出分開(kāi)。
視圖: 視圖是用戶(hù)看到并與之交互的界面;視圖向用戶(hù)顯示相關(guān)的數(shù)據(jù),并接受用戶(hù)的輸入;視圖不進(jìn)行任何業(yè)務(wù)邏輯處理。
模型: 模型表示業(yè)務(wù)數(shù)據(jù)和業(yè)務(wù)處理;相當(dāng)于JavaBean;一個(gè)模型能為多個(gè)視圖提供數(shù)據(jù)。這提高了應(yīng)用程序的重用性
控制器: 當(dāng)用戶(hù)單擊Web頁(yè)面中的提交按鈕時(shí),控制器接受請(qǐng)求并調(diào)用相應(yīng)的模型去處理請(qǐng)求;然后根據(jù)處理的結(jié)果調(diào)用相應(yīng)的視圖來(lái)顯示處理的結(jié)果。
MVC的處理過(guò)程:首先控制器接受用戶(hù)的請(qǐng)求,調(diào)用相應(yīng)的模型來(lái)進(jìn)行業(yè)務(wù)處理,并返回?cái)?shù)據(jù)給控制器??刂破髡{(diào)用相應(yīng)的視圖來(lái)顯示處理的結(jié)果。并通過(guò)視圖呈現(xiàn)給用戶(hù)。
代碼如何分層大概知道什么是MVC了吧,其實(shí)就是:對(duì)代碼分層,各司其職。
現(xiàn)在看看題主的代碼怎么寫(xiě),我就按照我的習(xí)慣進(jìn)行一下分層:
JSP能直接訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)么?技術(shù)上是沒(méi)問(wèn)題的,但是我們通常不會(huì)這么做。和數(shù)據(jù)庫(kù)完成交互的,一般代碼里面會(huì)有兩層:Model和Dao。Model相當(dāng)于JavaBean,是對(duì)數(shù)據(jù)庫(kù)表中數(shù)據(jù)的承載,Dao就是對(duì)數(shù)據(jù)庫(kù)表的操作。這里可以是JDBC,也可以使用ORM框架。
再往上,我一般會(huì)設(shè)置單獨(dú)的Service層,Service會(huì)有業(yè)務(wù)邏輯,可能會(huì)調(diào)用其他的Service,也可能會(huì)調(diào)用Dao層中的方法,也可能是調(diào)用其他系統(tǒng)的接口。
Service上面,再是Controller層,主要用于接受客戶(hù)端的數(shù)據(jù),并對(duì)數(shù)據(jù)進(jìn)行簡(jiǎn)單的校驗(yàn)。(我這樣的寫(xiě)法,Service層+Controller層 = MVC中的C)
瀏覽器(客戶(hù)端)與C層的交互,會(huì)使用的View。
當(dāng)然,靜態(tài)變量、配置、工具類(lèi)等,都會(huì)有單獨(dú)的包,不在這里討論。
具體的流程所以具體的一個(gè)流程是這樣的?例如頁(yè)面輸入用戶(hù)身份證號(hào),查詢(xún)用戶(hù)詳細(xì)信息:
JSP中輸入身份證號(hào);
Controller層拿到View,對(duì)于代碼來(lái)說(shuō)就是個(gè)Java對(duì)象,這一層可以增加驗(yàn)證,比如不能輸入空、null或是身份證號(hào)規(guī)則驗(yàn)證;
傳到Service層,這一層這個(gè)場(chǎng)景下,沒(méi)有什么特殊處理;
傳到Dao層,查詢(xún)數(shù)據(jù)庫(kù),返回客戶(hù)信息:客戶(hù)姓名-張三,客戶(hù)性別-M;開(kāi)始返回;
傳回Service層,把M轉(zhuǎn)成“男”(不過(guò)經(jīng)常是在SQL中直接關(guān)聯(lián)字典表了);
傳回Controller層,再傳回JSP展示。
我將持續(xù)分享Java開(kāi)發(fā)、架構(gòu)設(shè)計(jì)、程序員職業(yè)發(fā)展等方面的見(jiàn)解,希望能得到你的關(guān)注。