我們所學(xué)習(xí)的技術(shù)框架有很多講解_第1頁(yè)
我們所學(xué)習(xí)的技術(shù)框架有很多講解_第2頁(yè)
我們所學(xué)習(xí)的技術(shù)框架有很多講解_第3頁(yè)
我們所學(xué)習(xí)的技術(shù)框架有很多講解_第4頁(yè)
我們所學(xué)習(xí)的技術(shù)框架有很多講解_第5頁(yè)
已閱讀5頁(yè),還剩121頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 我們所學(xué)習(xí)的技術(shù)框架有很多,例如struts1、struts2、JSF、Spring、SpringMVC、Hibernate、ibatis在上篇博客我說了我們可能在開發(fā)的路途上會(huì)要學(xué)習(xí)這些框架,我也給出了我對(duì)框架學(xué)習(xí)的幾點(diǎn): 我們首先要看一下這個(gè)框架屬于開發(fā)結(jié)構(gòu)中的那一層。因?yàn)槲覀兊拈_發(fā)都是要用分層的思想來做的,所以我們第一個(gè)就要看看我們開發(fā)分層中,各個(gè)層次之間有哪些框架。 我們從圖上看到了那些框架屬于哪一層的(這里還有很多框架沒有涉及到)。之后我們來看一些常用的框架(這個(gè)常用相對(duì)于個(gè)人而言,我這里所說的常用針對(duì)我自己來說,如果這里我沒有介紹全的話,大家可以到相關(guān)的框架官網(wǎng)去查閱一下資料自主

2、學(xué)習(xí))。 下面我就簡(jiǎn)單的介紹一些我經(jīng)常使用的框架的結(jié)構(gòu)和一些分析: Struts框架(分為struts1和struts2): 一、Struts框架結(jié)構(gòu)圖: 優(yōu)點(diǎn): 1. Struts框架是一個(gè)基于mvc的框架,所以它繼承了所有mvc的優(yōu)點(diǎn),例如:復(fù)用性好,團(tuán)隊(duì)開發(fā)分工明確,結(jié)構(gòu)層次分明等 2. 給程序開發(fā)者在servlet層上節(jié)約了大量的開發(fā)時(shí)間,應(yīng)用程序開發(fā)者不再去觸及大量的servlet的編寫,僅僅變換為配置文件。 二、Struts1框架 1.框架的結(jié)構(gòu)圖: 2. Struts1框架有五個(gè)常用對(duì)象:actionservlet、actionmapping、actionform、action、

3、actionforward a) Actionservlet是核心控制,URL 地址映射、ActionForm的匹配、 Action 的執(zhí)行都需要這個(gè)類來進(jìn)行導(dǎo)航 b) Actionmapping:它們可將請(qǐng)求URI映射到Action類,并且將Action類與ActionFormbean相關(guān)聯(lián) c) Actionform:收集表單數(shù)據(jù) d) Action: 完成所需的業(yè)務(wù)邏輯,確定要跳轉(zhuǎn)的頁(yè)面 e) Actionforward:用來封裝轉(zhuǎn)發(fā)路徑的 3. Struts1框架的執(zhí)行流程: 1) 檢索和用戶匹配的ActionMapping實(shí)例,如果不存在,就返回請(qǐng)求路徑無效的錯(cuò)誤信息 2)如果Act

4、ionForm實(shí)例不存在,就創(chuàng)建一個(gè)ActionForm的對(duì)象,把客戶提交的表單數(shù)據(jù)封裝到ActionForm對(duì)象中。 3)根據(jù)配置信息決定是否要進(jìn)行表單驗(yàn)證,如果需要,就調(diào)用ActionForm的validate()方法 4)如果validate()方法放回null,或者并不包含ActionMessage的ActionError對(duì)象,就表示驗(yàn)證成功 5) ActionServlet根據(jù)ActionMapping所包含的映射信息決定將請(qǐng)求轉(zhuǎn)發(fā)給那個(gè)action,如果相應(yīng)的action實(shí)例不存在,就先創(chuàng)建這個(gè)action對(duì)象,然后再調(diào)用這個(gè)action的excute()方法 6)action的e

5、xecute()方法返回一個(gè)ActionForword對(duì)象,ActionServlet會(huì)把客戶請(qǐng)求轉(zhuǎn)發(fā)給ActionForword對(duì)象所指向的JSP組件 7)ActionForword對(duì)象指向JSP組件生成動(dòng)態(tài)網(wǎng)頁(yè)返回給客戶 4.優(yōu)點(diǎn):和struts框架的優(yōu)點(diǎn)相同 5.缺點(diǎn): 1) 表現(xiàn)層技術(shù)單一:僅能用jsp 2) 與servletAPI耦合性高,難于測(cè)試(httpservletrequest、httpservletresponse) 3) 嚴(yán)重依賴于ServletAPI(繼承action,繼承actionform),與struts1框架耦合性太高 這篇博客就寫到這里,如果再寫篇幅可能會(huì)過長(zhǎng)

6、,對(duì)讀者的閱讀造成負(fù)面影響,所以我會(huì)在下面的博客中陸續(xù)介紹我經(jīng)常使用的框架,當(dāng)然我也會(huì)在這些同層之間的框架的分析中加入各個(gè)框架的區(qū)別,當(dāng)然在適當(dāng)?shù)牡胤綍?huì)畫一些圖片來表示他們之間的知識(shí)關(guān)聯(lián)性,希望讀者能夠我一些建議和意見。 在上篇博客中,我簡(jiǎn)單的介紹了我們分層開發(fā)中每一層中擁有的框架,而且介紹了我常用的框架struts1的結(jié)構(gòu)和原理分析,那么今天我繼續(xù)介紹我熟悉的框架struts2的框架的結(jié)構(gòu)和原理分析。 在說struts2框架之前,我要先介紹另外一個(gè)框架webwork框架,這個(gè)框架也是一個(gè)mvc的框架,這個(gè)框架的設(shè)計(jì)思路是采用攔截鏈將用戶的請(qǐng)求的數(shù)據(jù)轉(zhuǎn)發(fā)到Action中,并負(fù)責(zé)將Action的

7、處理結(jié)果轉(zhuǎn)換成對(duì)用戶的響應(yīng)。它的這種設(shè)計(jì)思路能夠和ServletAPI分離,鑒于我們的上篇博客介紹的struts1的缺點(diǎn),所以webwork框架解決了struts1的這個(gè)缺點(diǎn)。 我們來看一下webwork框架的結(jié)構(gòu)圖:有了這個(gè)流程圖,我就不給大家講解具體的原理流程了,它采用的是攔截鏈的機(jī)制,通過這些攔截鏈完成用戶的相應(yīng)請(qǐng)求,從而與servletAPI分離,當(dāng)與servlet分離開的時(shí)候,也就是表明和容器解耦了;另外,我們從結(jié)構(gòu)圖中看到它的視圖模版有jsp、FreeMarker等等,它的表示層技術(shù)比struts1框架的飽滿許多。 所以,webwork框架解決了struts1框架存在的問題,而且它

8、的設(shè)計(jì)思路是非常好的,鑒于此,struts2框架就在struts1框架的基礎(chǔ)上引入了webwork框架的設(shè)計(jì)思路應(yīng)運(yùn)而生了。所以我們就能夠發(fā)現(xiàn)struts2兼具struts1的特性而且通過引入webwork框架的設(shè)計(jì)思路解決了struts1的一些缺點(diǎn)。 struts2框架的大致的體系圖: 從圖中我們能夠看出它是引入的webwork框架的設(shè)計(jì)思路,而且它也是基于mvc的一個(gè)開源的框架。之后我們來說一下struts2框架的一個(gè)執(zhí)行流程(流程圖和webwork框架非常類似):1. 瀏覽器發(fā)送請(qǐng)求,通過幾層過濾器完成一些功能,之后到actionmapper中,之后將請(qǐng)求傳到核心控制器中2. 核心控制器

9、filterDispatcher根據(jù)請(qǐng)求決定調(diào)用合適的Action3. 調(diào)用webwork的攔截器鏈自動(dòng)請(qǐng)求通用功能,如校驗(yàn)之類的操作4. 回調(diào)action的execute方法,獲取用戶請(qǐng)求執(zhí)行相應(yīng)的業(yè)務(wù)邏輯5. 之后返回字符串,匹配result,之后跳轉(zhuǎn)到相應(yīng)的視圖或其他的文檔6. 之后在執(zhí)行相應(yīng)的攔截器鏈自動(dòng)請(qǐng)求功能,隨后轉(zhuǎn)到web客戶端。 這樣我們就對(duì)struts2框架的結(jié)構(gòu)上的東西做了一個(gè)簡(jiǎn)單的介紹。在上篇博客講解了struts1框架,所以有必要在這里對(duì)他倆進(jìn)行一下對(duì)比(我僅僅總結(jié)了五條我認(rèn)為比較重要的,以后如果發(fā)現(xiàn)其他的在隨時(shí)補(bǔ)充):1. 在Action實(shí)現(xiàn)類方面的對(duì)比(struts

10、1的Action繼承action,struts2實(shí)現(xiàn)接口,也可以不實(shí)現(xiàn),可以定制服務(wù))2. 線程模式方面的對(duì)比(struts1存在線程安全問題,struts2不存在)3. ServletAPI依賴方面的對(duì)比(struts1依賴servletAPI,struts2不是)4. 可測(cè)性方面的對(duì)比(struts1難測(cè)試,依賴容器,struts2不是)5. 封裝請(qǐng)求參數(shù)的對(duì)比(struts1使用actionform;struts2直接寫到action,并且支持pojo對(duì)象) 在上篇博客中介紹了struts2框架的原理和流程分析,可以說struts框架一路走來,改變非常大,而且讓我們開發(fā)人員變得更加輕松,

11、里面的設(shè)計(jì)理念的改變也是讓我們編程人員的思路得到更大的擴(kuò)展。 可以說,一個(gè)先進(jìn)的技術(shù)或者框架就是要不斷的進(jìn)步才能永遠(yuǎn)讓編程人員喜歡和使用,一個(gè)優(yōu)秀的編程人員也是要不斷的進(jìn)步才能永遠(yuǎn)讓這個(gè)世界變得更加絢麗多彩。其實(shí)編程就是這樣有意思的! 前面說了一些宏觀上學(xué)習(xí)框架相關(guān)的思想方面的東西,下面繼續(xù)來介紹我經(jīng)常使用的框架和框架的分析,這篇博客主要介紹的是hibernate框架。 首先說hibernate框架是數(shù)據(jù)持久層的框架,這個(gè)框架是非常強(qiáng)大的,它讓編程人員純粹的用面向?qū)ο蟮姆绞絹碜鲩_發(fā),讓編程人員所面對(duì)的都是對(duì)象。僅僅從這一點(diǎn)它的設(shè)計(jì)思路就是非常讓編程人員喜愛的。 回想我們普通的開發(fā)流程,和客戶溝

12、通定需求,抽象出來原型,從原型中建立數(shù)據(jù)模型到庫(kù)表結(jié)構(gòu)的建立,之后在映射成對(duì)象模型,之后在用oo的設(shè)計(jì)思想完成后續(xù)的程序開發(fā)。但是當(dāng)我們使用了hibernate框架以后,原先的設(shè)計(jì)思路就顯得不再那么具有優(yōu)勢(shì)了。我們直接建立對(duì)象模型,之后利用hibernate框架映射成數(shù)據(jù)模型,我們不再去考慮數(shù)據(jù)庫(kù)關(guān)系模型的東西,僅僅考慮的東西僅僅就是類和對(duì)象,這樣的開發(fā)才是面向?qū)ο蟮拈_發(fā),也才是最接近人類思考問題的方式。所以hibernate框架的設(shè)計(jì)思路是非常好的。 hibernate框架設(shè)計(jì)思路的優(yōu)越性其實(shí)體現(xiàn)在了它本身的框架的原理上。hibernate封裝了JDBC,減輕了開發(fā)人員在持久層的大量重復(fù)性工

13、作,它利用了java反射機(jī)制來實(shí)現(xiàn)程序的透明性;它就是通過這兩點(diǎn)才達(dá)到從對(duì)象出發(fā)而非關(guān)系數(shù)據(jù)庫(kù)出發(fā)的效果。介紹這么多理論性的東西之后我們能夠感覺到hibernate框架的強(qiáng)大,來看看它的結(jié)構(gòu)圖: 在hibernate框架中有幾個(gè)比較重要的接口和類:1. Query接口:Query負(fù)責(zé)執(zhí)行各種數(shù)據(jù)庫(kù)查詢。它可以使用HQL語(yǔ)句或SQL語(yǔ)句兩種表達(dá)方式。2. Configuration類:Configuration類負(fù)責(zé)配置并啟動(dòng)Hibernate,創(chuàng)建SessionFactory對(duì)象3. SessionFactory接口:SessionFactory接口負(fù)責(zé)初始化Hibernate。它充當(dāng)數(shù)據(jù)存儲(chǔ)

14、源的代理,并負(fù)責(zé)創(chuàng)建Session對(duì)象4. Session接口:Session接口負(fù)責(zé)執(zhí)行被持久化對(duì)象的CRUD操作5. Transaction接口:Transaction接口負(fù)責(zé)事務(wù)相關(guān)的操作 hibernate框架就是在利用這幾個(gè)接口來封裝了JDBC,而且我們用這些接口來操作數(shù)據(jù)庫(kù)變得非常簡(jiǎn)單,減少了我們?cè)诔志脤拥拇a量。 從這個(gè)結(jié)構(gòu)圖和我的一些分析就能發(fā)現(xiàn)hibernate框架是非常強(qiáng)大,而且它給我們開發(fā)人員的開發(fā)帶來了非常大的便利,尤其是他的設(shè)計(jì)思路還有它的“全自動(dòng)”的映射對(duì)象模型和關(guān)系模型。 但是hibernate框架也有它的一些缺點(diǎn):1. 既然是封裝了JDBC,所以很明顯它沒有JD

15、BC的效率高,尤其是在大量的處理表更新操作的時(shí)候。2. 它有局限性,一個(gè)持久化類不能映射多個(gè)表3. 它應(yīng)對(duì)大數(shù)量的時(shí)候顯得非常笨拙,這一點(diǎn)沒有JDBC和接下來要介紹的IBatis框架 其實(shí)一項(xiàng)技術(shù)或者一個(gè)框架都有它的優(yōu)缺點(diǎn),選擇最合適的才是王道。 這篇博客主要是介紹了hibernate框架的結(jié)構(gòu)和分析,闡述了hibernate框架的優(yōu)缺點(diǎn),【具體詳細(xì)使用要等到我的框架學(xué)習(xí)的后續(xù)文章】??偟膩碚fhibernate框架在持久層的作用非常明顯,我們懂得了它的優(yōu)缺點(diǎn)之后,才能做到我們是否是要選擇這個(gè)框架作為我們持久層開發(fā)的必須的技術(shù)支撐,所以這些我常用的框架結(jié)構(gòu)和分析不單單是在介紹一些框架學(xué)習(xí)的宏觀知

16、識(shí)把控,更多的是在為將來做項(xiàng)目開發(fā)中選擇合適的技術(shù)支撐做鋪墊。后續(xù)的博客在不斷更新,希望這些博客能夠?qū)ψx者的開發(fā)過程帶來幫助,當(dāng)然如果讀者對(duì)我的博客有什么好的建議或者意見,請(qǐng)與我聯(lián)系。聯(lián)系方式見博客側(cè)邊欄! 先看MVC模式流程圖(其實(shí)MVC設(shè)計(jì)模式就是java中的model2。): 就像圖上所標(biāo)識(shí)的C層主要是Servlet層控制頁(yè)面跳轉(zhuǎn),M層就是具體的業(yè)務(wù)處理邏輯,而JSP就是所謂的V層。MVC是有別于我們所說的三層,我們平常所說的三層是UI層、BLL層、DAL層,具體的區(qū)別如圖: 從圖上能看出來,JSP和Servlet構(gòu)成了UI層,而Model層分成了BLL層和DAL層(也就是業(yè)務(wù)邏輯和數(shù)據(jù)

17、持久層)。 從理論上認(rèn)清了MVC設(shè)計(jì)模式之后,下面開始動(dòng)手敲一個(gè)MVC設(shè)計(jì)模式示例代碼: JSP索引頁(yè)面index.jsp: htmlview plaincopyprint?1. 3. 4. 5. 6. 7. Inserttitlehere8. 9. 10. 11. 姓名:12. 13. 14. 15. 16. 業(yè)務(wù)邏輯代碼UserManager: javaview plaincopyprint?1. packagecom.cjq.servlet;2. 3. importjava.util.ArrayList;4. importjava.util.List;5. 6. publicclassU

18、serManager7. 8. publicvoidaddUser(Stringusername)9. System.out.println(UserManager.addUsre()-username:+username);10. 11. 12. publicvoiddelUser(Stringusername)13. System.out.println(UserManager.delUser()-username:+username);14. 15. 16. publicvoidmodifyUser(Stringusername)17. System.out.println(UserMa

19、nager.modifyUser()-username+username);18. 19. 20. publicListqueryUser(Stringusername)21. System.out.println(UserManager.queryUser()-username+username);22. ListuserList=newArrayList();23. userList.add(a);24. userList.add(b);25. userList.add(c);26. returnuserList;27. 28. Servlet控制代碼: javaview plaincop

20、yprint?1. packagecom.cjq.servlet;2. 3. importjava.io.IOException;4. importjava.util.List;5. 6. importjavax.servlet.ServletException;7. importjavax.servlet.http.HttpServlet;8. importjavax.servlet.http.HttpServletRequest;9. importjavax.servlet.http.HttpServletResponse;10. 11. publicclassTestServletext

21、endsHttpServlet12. 13. 14. protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)15. throwsServletException,IOException16. 17. StringrequestURI=request.getRequestURI();18. System.out.println(request=+requestURI);19. Stringpath=requestURI.substring(requestURI.indexOf(/,1),requestUR

22、I.indexOf(.);20. System.out.println(path=+path);21. 22. Stringusername=request.getParameter(username);23. UserManageruserManager=newUserManager();24. /userManager.addUser(username);25. Stringforward=;26. if(/servlet/delUser.equals(path)27. userManager.delUser(username);28. forward=/del_success.jsp;2

23、9. elseif(/servlet/addUser.equals(path)30. userManager.addUser(username);31. forward=/add_success.jsp;32. elseif(/servlet/modifyUser.equals(path)33. userManager.modifyUser(username);34. forward=/modify_success.jsp;35. elseif(/servlet/queryUser.equals(path)36. ListuserList=userManager.queryUser(usern

24、ame);37. request.setAttribute(userList,userList);38. forward=/query_success.jsp;39. else40. thrownewRuntimeException(請(qǐng)求失敗);41. 42. request.getRequestDispatcher(forward).forward(request,response);43. 44. 這個(gè)servlet代碼主要實(shí)現(xiàn)的功能判斷是那個(gè)頁(yè)面請(qǐng)求服務(wù)器做那些操作,之后調(diào)用業(yè)務(wù)邏輯實(shí)現(xiàn)相應(yīng)業(yè)務(wù)操作。 配置Servlet: htmlview plaincopyprint?1. 2. we

25、b-appxmlns:xsi=/2001/XMLSchema-instancexmlns=3. test_Servlet4. 5. index.html6. index.htm7. index.jsp8. default.html9. default.htm10. default.jsp11. 12. 13. 14. TestServlet15. com.cjq.servlet.TestServlet16. 17. 18. TestServlet19. *.action20. 21. 22. 23. 輸出結(jié)果: 通過上面的示例已經(jīng)對(duì)MVC設(shè)計(jì)模式有了初步的認(rèn)識(shí),

26、其實(shí)這個(gè)示例是對(duì)Struts框架學(xué)習(xí)的基礎(chǔ),只有弄清楚了這個(gè)實(shí)例才能弄清楚Struts框架的實(shí)現(xiàn)原理和Struts框架使用。 那么我們?cè)趺床拍芡ㄟ^這個(gè)示例引入Struts框架呢?這個(gè)問題從IF-Eles開始。 首先我們看到了TestServlet中出現(xiàn)了許多if-else語(yǔ)句,這樣是非常不穩(wěn)定的,這樣的程序是非常不靈活的,以后如果有變化,那么維護(hù)是非常差的;而且我們?cè)趇f-else中出現(xiàn)了大量的字符串,這樣在coding的時(shí)候會(huì)出現(xiàn)寫錯(cuò),這樣無形中給調(diào)試帶來了麻煩。所以去掉if-else成了我們重構(gòu)的第一步,也是我們進(jìn)行Struts框架學(xué)習(xí)的第一步。 如何才能去掉If-ELSE呢?請(qǐng)看下一篇文

27、章深入淺出學(xué)習(xí)Struts1框架(二):重構(gòu)MVC模式代碼中跳轉(zhuǎn)路徑和業(yè)務(wù)邏輯。在上篇博文深入淺出學(xué)習(xí)Struts1框架(一):一個(gè)簡(jiǎn)單mvc模式代碼示例開始中簡(jiǎn)單說了一下MVC模式代碼的實(shí)現(xiàn)和MVC模式和三層架構(gòu)的區(qū)別,并且留下一個(gè)問題如何去掉TestServlet中的IF-Else語(yǔ)句塊。 因?yàn)樵赥estServlet中出現(xiàn)了If-Else語(yǔ)句塊,所以讓程序變得不再靈活,讓應(yīng)付需求變化時(shí)變得笨拙。所以就承接上篇文章來重構(gòu)一下TestServlet代碼,主要是用繼承多肽來進(jìn)一步對(duì)TestServlet進(jìn)行重構(gòu)。雖然這一篇文章最后沒有將if-else徹底去掉,但是比起上篇文章的代碼顯得更加靈活

28、,也為下一篇徹底去掉If-else埋下伏筆。 下面進(jìn)入重構(gòu)階段: 先看一下上篇文章的TestServlet代碼:javaview plaincopyprint?1. packagecom.cjq.servlet;2. 3. importjava.io.IOException;4. importjava.util.List;5. 6. importjavax.servlet.ServletException;7. importjavax.servlet.http.HttpServlet;8. importjavax.servlet.http.HttpServletRequest;9. impor

29、tjavax.servlet.http.HttpServletResponse;10. 11. publicclassTestServletextendsHttpServlet12. 13. 14. protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)15. throwsServletException,IOException16. 17. StringrequestURI=request.getRequestURI();18. System.out.println(request=+requestU

30、RI);19. Stringpath=requestURI.substring(requestURI.indexOf(/,1),requestURI.indexOf(.);20. System.out.println(path=+path);21. 22. Stringusername=request.getParameter(username);23. UserManageruserManager=newUserManager();24. /userManager.addUser(username);25. Stringforward=;26. if(/servlet/delUser.equ

31、als(path)27. userManager.delUser(username);28. forward=/del_success.jsp;29. elseif(/servlet/addUser.equals(path)30. userManager.addUser(username);31. forward=/add_success.jsp;32. elseif(/servlet/modifyUser.equals(path)33. userManager.modifyUser(username);34. forward=/modify_success.jsp;35. elseif(/s

32、ervlet/queryUser.equals(path)36. ListuserList=userManager.queryUser(username);37. request.setAttribute(userList,userList);38. forward=/query_success.jsp;39. else40. thrownewRuntimeException(請(qǐng)求失敗);41. 42. request.getRequestDispatcher(forward).forward(request,response);43. 44. 首先我們看到了在每個(gè)語(yǔ)句塊中都出現(xiàn)了給forwa

33、rd賦值,其實(shí)也就是給頁(yè)面跳轉(zhuǎn)的路徑賦值,針對(duì)每個(gè)請(qǐng)求路徑判斷來賦值跳轉(zhuǎn)路徑。另外每個(gè)IF-Else語(yǔ)句塊中都有業(yè)務(wù)處理,我們要把這些業(yè)務(wù)處理分別放到類里面,讓職責(zé)更加單一,這樣更加符合面向?qū)ο蟮乃悸贰?就從這里我們開始重構(gòu),我們可以將這個(gè)跳轉(zhuǎn)路徑和業(yè)務(wù)邏輯封裝起來。 既然封裝,那么我們就抽象出來一個(gè)借口,主要完成一個(gè)方法,這個(gè)方法主要的功能就是要完成業(yè)務(wù)邏輯封裝和路徑跳轉(zhuǎn)的返回。隨后建立四個(gè)類,主要實(shí)現(xiàn)相應(yīng)的增刪改查的業(yè)務(wù)處理和處理之后的跳轉(zhuǎn)路徑返回。 代碼如下: 接口Action:javaview plaincopyprint?1. packagecom.cjq.servlet;2. 3.

34、 importjavax.servlet.http.HttpServletRequest;4. importjavax.servlet.http.HttpServletResponse;5. 6. publicinterfaceAction7. 8. publicStringexecute(HttpServletRequestrequest,HttpServletResponseresponse)9. throwsException;10. 增刪改查實(shí)現(xiàn)類: 添加用戶實(shí)現(xiàn)類:javaview plaincopyprint?1. packagecom.cjq.servlet;2. 3. impo

35、rtjavax.servlet.http.HttpServletRequest;4. importjavax.servlet.http.HttpServletResponse;5. 6. publicclassAddUserActionimplementsAction7. 8. 9. publicStringexecute(HttpServletRequestrequest,10. HttpServletResponseresponse)throwsException11. Stringusername=request.getParameter(username);12. UserManage

36、ruserManager=newUserManager();13. userManager.addUser(username);14. return/add_success.jsp;15. 16. 17. 刪除用戶實(shí)現(xiàn)類:javaview plaincopyprint?1. packagecom.cjq.servlet;2. 3. importjavax.servlet.http.HttpServletRequest;4. importjavax.servlet.http.HttpServletResponse;5. 6. publicclassDelUserActionimplementsA

37、ction7. 8. 9. publicStringexecute(HttpServletRequestrequest,10. HttpServletResponseresponse)throwsException11. Stringusername=request.getParameter(username);12. UserManageruserManager=newUserManager();13. userManager.delUser(username);14. return/del_success.jsp;15. 16. 17. 更新用戶實(shí)現(xiàn)類:javaview plaincopy

38、print?1. packagecom.cjq.servlet;2. 3. importjavax.servlet.http.HttpServletRequest;4. importjavax.servlet.http.HttpServletResponse;5. 6. publicclassModifyUserActionimplementsAction7. 8. Override9. publicStringexecute(HttpServletRequestrequest,10. HttpServletResponseresponse)throwsException11. Stringu

39、sername=request.getParameter(username);12. UserManageruserManager=newUserManager();13. userManager.modifyUser(username);14. return/modify_success.jsp;15. 16. 17. 查詢用戶實(shí)現(xiàn)類:javaview plaincopyprint?1. packagecom.cjq.servlet;2. 3. importjava.util.List;4. 5. importjavax.servlet.http.HttpServletRequest;6.

40、importjavax.servlet.http.HttpServletResponse;7. 8. publicclassQueryUserActionimplementsAction9. 10. Override11. publicStringexecute(HttpServletRequestrequest,12. HttpServletResponseresponse)throwsException13. Stringusername=request.getParameter(username);14. UserManageruserManager=newUserManager();1

41、5. ListuserList=userManager.queryUser(username);16. request.setAttribute(userList,userList);17. return/query_success.jsp;18. 19. 20. TestServlet類重構(gòu)如下:javaview plaincopyprint?1. packagecom.cjq.servlet;2. 3. importjava.io.IOException;4. importjava.util.List;5. 6. importjavax.servlet.ServletException;7

42、. importjavax.servlet.http.HttpServlet;8. importjavax.servlet.http.HttpServletRequest;9. importjavax.servlet.http.HttpServletResponse;10. 11. publicclassTestServletextendsHttpServlet12. 13. 14. protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)15. throwsServletException,IOExce

43、ption16. 17. StringrequestURI=request.getRequestURI();18. System.out.println(request=+requestURI);19. Stringpath=requestURI.substring(requestURI.indexOf(/,1),requestURI.indexOf(.);20. System.out.println(path=+path);21. 22. Actionaction=null;23. if(/servlet/delUser.equals(path)24. action=newDelUserAction();25. elseif(/servlet/addUser.equals(path)26. action=newAddUserAction();27. elseif(/servlet/modifyUser.equals(path)28. action=newModifyUserAction();29. elseif(/servlet/queryUser.e

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論