用Eclipse開發(fā)javaweb應(yīng)用程序.ppt
《用Eclipse開發(fā)javaweb應(yīng)用程序.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《用Eclipse開發(fā)javaweb應(yīng)用程序.ppt(36頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
第2講基于Servlet+JavaBean+Jsp開發(fā)應(yīng)用的過程,第2講基于Servlet+JavaBean+Jsp開發(fā)應(yīng)用的過程,本講主要介紹主流的javaweb編程技術(shù)、設(shè)計(jì)模式和框架,以及如何利用Eclipese開發(fā)Web應(yīng)用程序。要點(diǎn):1、JavaWeb編程的主要組件技術(shù);2、MVC設(shè)計(jì)模式;3、用Eclipse構(gòu)建一個(gè)基于MVC模式的JavaWeb的應(yīng)用程序。目的:掌握如何用Eclipse構(gòu)建一個(gè)基于MVC模式的JavaWEB的應(yīng)用程序。,,2.1javaweb編程的主要組件技術(shù),HtmljspServletJavabeanJdbcXmlTomcatMySQL,,2.2MVC設(shè)計(jì)模式,今天,我們見到的絕大部分應(yīng)用,都是基于B/S(瀏覽器/服務(wù)器)架構(gòu)的,其中的服務(wù)器就是Web服務(wù)器。可見,Web應(yīng)用是目前廣泛使用的應(yīng)用模式。Web程序開發(fā)方法的發(fā)展:JSP的Model1JSP的Model2MVC,,1Model1和Model2,對(duì)于Java的動(dòng)態(tài)Web編程技術(shù)而言,則經(jīng)歷了Model1和Model2時(shí)代。Model1:Model1就是JSP大行其道的時(shí)代,在Model1模式下,整個(gè)Web應(yīng)用幾乎全部由JSP頁面組成,JSP頁面接收處理客戶端請(qǐng)求,對(duì)請(qǐng)求處理后直接做出響應(yīng)。用少量的JavaBean來處理數(shù)據(jù)庫連接、數(shù)據(jù)庫訪問等操作。Model2:Model2下JSP不再承擔(dān)控制器的責(zé)任,它僅僅是表現(xiàn)層角色,僅僅用于將結(jié)果呈現(xiàn)給用戶,JSP頁面的請(qǐng)求與Servlet(控制器)交互,而Servlet負(fù)責(zé)與后臺(tái)的JavaBean通信。在Model2模式下,模型(Model)由JavaBean充當(dāng),視圖(View)由JSP頁面充當(dāng),而控制器(Controller)則由Servlet充當(dāng)。,,Model1的程序流程:,,,特點(diǎn):由JSP頁面組成,JSP頁面接收處理客戶端請(qǐng)求,對(duì)請(qǐng)求處理后直接做出響應(yīng)。用少量的JavaBean來處理數(shù)據(jù)庫連接、數(shù)據(jù)庫訪問等操作,,Model2的程序流程:基本上是MVC結(jié)構(gòu),特點(diǎn):Model2下JSP不再承擔(dān)控制器的責(zé)任,它僅僅是表現(xiàn)層角色,僅僅用于將結(jié)果呈現(xiàn)給用戶,JSP頁面的請(qǐng)求與Servlet(控制器)交互,而Servlet負(fù)責(zé)與后臺(tái)的JavaBean通信。在Model2模式下,模型(Model)由JavaBean充當(dāng),視圖(View)由JSP頁面充當(dāng),而控制器(Controller)則由Servlet充當(dāng)。,,2Model1和Model2的比較,對(duì)于非常小型的Web站點(diǎn),如果后期的更新、維護(hù)工作不是特別大,可以使用Model1的模式來開發(fā)應(yīng)用,而不是使用Model2的模式。雖然Model2提供了更好的可擴(kuò)展性及可維護(hù)性,但增加了前期開發(fā)成本。從某種程度上講,Model2為了降低系統(tǒng)后期維護(hù)的復(fù)雜度,卻導(dǎo)致前期開發(fā)的更高復(fù)雜度。,,3MVC思想,MVC并不是Java語言所特有的設(shè)計(jì)思想,也并不是Web應(yīng)用所特有的思想,它是所有面向?qū)ο蟪绦蛟O(shè)計(jì)語言都應(yīng)該遵守的規(guī)范。MVC思想將一個(gè)應(yīng)用分成三個(gè)基本部分:Model(模型)、View(視圖)和Controller(控制器),這三個(gè)部分以最少的耦合協(xié)同工作,從而提高應(yīng)用的可擴(kuò)展性及可維護(hù)性。,,MVC,MVC:M(model)是指數(shù)據(jù)模型,V(View)是指用戶界面,C(Control)則是控制器。使用MVC的目的是將M和V的實(shí)現(xiàn)代碼分離,從而使同一個(gè)程序可以使用不同的表現(xiàn)形式。模型、視圖與控制器的分離,使得一個(gè)模型可以具有多個(gè)顯示視圖。如果用戶通過某個(gè)視圖的控制器改變了模型的數(shù)據(jù),所有其它依賴于這些數(shù)據(jù)的視圖都應(yīng)反映到這些變化。因此,無論何時(shí)發(fā)生了何種數(shù)據(jù)變化,控制器都會(huì)將變化通知所有的視圖,導(dǎo)致顯示的更新。這實(shí)際上是一種模型的變化-傳播機(jī)制。模型、視圖、控制器3者之間的關(guān)系和各自的主要功能。,,MVC的組成部分,視圖(View)代表用戶交互界面,對(duì)于Web應(yīng)用來說就是HTML界面。模型(Model):就是業(yè)務(wù)流程/狀態(tài)的處理以及業(yè)務(wù)規(guī)則的制定??刂疲–ontroller):可以理解為一個(gè)分發(fā)器,他來決定選擇什么樣的模型,選擇什么樣的視圖,可以完成什么樣的用戶請(qǐng)求,控制層并不做任何的數(shù)據(jù)處理。,,MVC帶來的好處,MVC從根本上強(qiáng)制性的將它們分開,最大程度上實(shí)現(xiàn)了程序代碼與網(wǎng)頁的分離。數(shù)據(jù)和業(yè)務(wù)規(guī)則從表示層分開,所以可以最大化的重用代碼。,,MVC的特點(diǎn),,MVC特點(diǎn):多個(gè)視圖可以對(duì)應(yīng)一個(gè)模型。按MVC設(shè)計(jì)模式,一個(gè)模型對(duì)應(yīng)多個(gè)視圖,可以減少代碼的復(fù)制及代碼的維護(hù)量,一旦模型發(fā)生改變,也易于維護(hù)。模型返回的數(shù)據(jù)與顯示邏輯分離。模型數(shù)據(jù)可以應(yīng)用任何的顯示技術(shù),例如,使用JSP頁面、Velocity模板或者直接產(chǎn)生Excel文檔等。應(yīng)用被分隔為三層,降低了各層之間的耦合,提供了應(yīng)用的可擴(kuò)展性??刂茖拥母拍钜埠苡行В捎谒巡煌哪P秃筒煌囊晥D組合在一起,完成不同的請(qǐng)求。因此,控制層可以說是包含了用戶請(qǐng)求權(quán)限的概念。MVC更符合軟件工程化管理的精神。不同的層各司其職,每一層的組件具有相同的特征,有利于通過工程化和工具化產(chǎn)生管理程序代碼。,,4常用的MVC框架,Struts:----包括struts1和struts2兩個(gè)。JSF:JSF是一個(gè)標(biāo)準(zhǔn),目前,JSF是作為JEE5.0的一個(gè)組成部分,與JEE5.0一起發(fā)布JSF的行為方法在POJO中實(shí)現(xiàn),JSF的ManagedBean無需繼承任何特別的類。因此,無需在表單和模型對(duì)象之間實(shí)現(xiàn)多余的控制器層。JSF中沒有控制器對(duì)象,控制器行為通過模型對(duì)象實(shí)現(xiàn)。JSF的事件框架可以細(xì)化到表單中每個(gè)字段。JSF依然是基于JSP/Servlet的,仍然是JSP/Servlet架構(gòu),因而學(xué)習(xí)曲線相對(duì)簡單,,2.3用Eclipse構(gòu)建一個(gè)基于MVC模式的JavaWeb應(yīng)用程序,題目要求:(1)技術(shù)要求:按照MVC設(shè)計(jì)模式,利用JSP、Servlet及JavaBean構(gòu)建一個(gè)簡單的登錄系統(tǒng)。(2)系統(tǒng)功能要求:當(dāng)用戶在登錄頁面上填寫用戶名和密碼并提交后,系統(tǒng)檢查該用戶是否已經(jīng)注冊(cè),若注冊(cè),系統(tǒng)進(jìn)入主頁面,否則,進(jìn)入注冊(cè)頁面。系統(tǒng)的工作流程見下圖。,,(2)控制器-1LoginServlet,(1)登錄頁面Login.jsp,(5)數(shù)據(jù)組件userdoadb_op,(6)數(shù)據(jù)庫MySQL,進(jìn)行驗(yàn)證,不符合格式,返回注冊(cè)頁面,重新注冊(cè),并提示出錯(cuò)情況,注冊(cè)成功,進(jìn)入登錄頁面,未注冊(cè),,,,,,登錄系統(tǒng)的工作流程,(3)提示:登錄成功Main.jsp(過20秒后再自動(dòng)進(jìn)入注冊(cè)頁面),(4)進(jìn)入注冊(cè)頁面Register.jsp,,(7)控制器-2RegisterServlet,,(8)提示:注冊(cè)失敗Register_err.jsp(過20秒后再自動(dòng)進(jìn)入注冊(cè)頁面),,,(9)注冊(cè)成功Register_succ.jsp(過20秒后再自動(dòng)進(jìn)入注冊(cè)頁面),,,已注冊(cè),或者,,密碼錯(cuò)誤,(10)進(jìn)入主頁面Main2.jsp,,構(gòu)建系統(tǒng)的處理步驟,(1)數(shù)據(jù)庫設(shè)計(jì):構(gòu)建數(shù)據(jù)庫表T_UserInfo(2)在Eclipse中創(chuàng)建一個(gè)項(xiàng)目:Login_Proj(3)構(gòu)建視圖組件:登錄頁面(login.jsp)、主頁面(main.jsp)、注冊(cè)頁面(register.jsp),注冊(cè)失敗(Register_err.jsp),注冊(cè)成功(Register_succ.jsp)(4)構(gòu)建控制層組件:一個(gè)servlet(LoginServlet.java)---->實(shí)現(xiàn)登錄的控制一個(gè)servlet(RegisterServlet.Java)-?實(shí)現(xiàn)注冊(cè)的驗(yàn)證控制(5)構(gòu)建業(yè)務(wù)邏輯層組件(模型組件):一個(gè)JavaBean:user,doa,db_op(6)部署該程序到服務(wù)器Tomcat中,然后運(yùn)行。,,(1)數(shù)據(jù)庫設(shè)計(jì):構(gòu)建數(shù)據(jù)庫表T_UserInfo,利用MySQL數(shù)據(jù)庫,創(chuàng)建數(shù)據(jù)庫:user創(chuàng)建表及其結(jié)構(gòu):T_UserInfo,數(shù)據(jù)表結(jié)構(gòu)T_UserInfo,注意,該數(shù)據(jù)庫所存放的位置,,(2)在Eclipse中創(chuàng)建一個(gè)項(xiàng)目:Login_Proj,按Eclipse建立工程的提示,建立Web工程,工程的名稱為:Login_Proj。,,(3)構(gòu)建視圖組件:--登錄頁面(login.jsp),選中工程“Login_Proj”,擊右鍵,選“新建”,按Eclipse的提示,建立jsp,名稱為:Login。修改默認(rèn)jsp內(nèi)容,達(dá)到我們所要求的編碼。,,login.jsp的代碼,登錄頁面用戶名:密,,(3)構(gòu)建視圖組件--主頁面(main.jsp),選中工程“Login_Proj”,擊右鍵,選“新建”,按Eclipse的提示,建立jsp,名稱為:main.jsp。修改默認(rèn)jsp內(nèi)容,達(dá)到我們所要求的編碼。,,main.jsp代碼,主頁面,你成功登錄,20秒后自動(dòng)進(jìn)入主頁面!,,類似可以建立其它的頁面:系統(tǒng)頁面main2.jsp注冊(cè)頁面register.jsp注冊(cè)失敗提示頁面Register_err.jsp注冊(cè)成功提示頁面Register_succ.jsp,,構(gòu)建控制層組件(第4步)建立數(shù)據(jù)JavaBean—用戶(user);建立連接數(shù)據(jù)庫的JavaBean—(doa)建立實(shí)現(xiàn)對(duì)用戶數(shù)據(jù)庫進(jìn)行操作的java類--db_op.java,4.1建立數(shù)據(jù)JavaBean—用戶(user),packageJavaBean;publicclassuser{privateStringusername;privateStringpassword;publicStringgetUsername(){returnusername;}publicvoidsetUsername(Stringusername){this.username=username;}publicStringgetPassword(){returnpassword;}publicvoidsetPassword(Stringpassword){this.password=password;}},,4.2建立連接數(shù)據(jù)庫的JavaBean—(doa),packageJavaBean;publicclassdoa{privateStringdb_username;privateStringdb_password;privateStringdb_driver;privateStringdb_connection;publicStringgetDb_username(){returndb_username;}publicvoidsetDb_username(Stringdb_username){this.db_username=db_username;}publicStringgetDb_password(){returndb_password;}publicvoidsetDb_password(Stringdb_password){this.db_password=db_password;}publicStringgetDb_driver(){returndb_driver;}publicvoidsetDb_driver(Stringdb_driver){this.db_driver=db_driver;}publicStringgetDb_connection(){returndb_connection;}publicvoidsetDb_connection(Stringdb_connection){this.db_connection=db_connection;}},,4.3在JavaBean—(doa)的基礎(chǔ)上,建立實(shí)現(xiàn)對(duì)用戶數(shù)據(jù)庫進(jìn)行操作的java類---db_op.java,publicclassdb_op{publicConnectiondb_getConnection(){Connectionconn=null;Stringdb_username=null;Stringdb_password=null;Stringdb_driver=null;Stringdb_connection=null;Propertiespro=newProperties();Filefile=newFile("H:\\web_15\\Login_Proj\\src\\db.properties");try{pro.load(newFileInputStream(file));}catch(Exceptione){e.printStackTrace();}db_username=pro.getProperty("db_username","");db_password=pro.getProperty("db_password","");db_driver=pro.getProperty("db_driver",db_driver);db_connection=pro.getProperty("db_connection",db_connection);try{Class.forName(db_driver).newInstance();conn=DriverManager.getConnection(db_connection,db_username,db_password);returnconn;}catch(Exceptione){System.out.println(e);returnnull;}},實(shí)現(xiàn)數(shù)據(jù)庫的連接,,publicbooleanselect_1(useru){//查詢用戶是否已經(jīng)注冊(cè)Connectionconn=null;ResultSetrs=null;Statementps=null;Stringxm=u.getUsername();Stringpass=u.getPassword();conn=db_getConnection();Strings1="select*fromT_userInfowhereusername="+xm+"andpassword="+pass+"";try{ps=conn.createStatement();rs=ps.executeQuery(s1);if(rs.next()){rs.close();ps.close();conn.close();returntrue;}else{rs.close();ps.close();conn.close();returnfalse;}}catch(SQLExceptione){returnfalse;}},publicbooleanselect_2(Stringu){//在注冊(cè)時(shí),查詢是否有重名的用戶已經(jīng)注冊(cè)Connectionconn=null;ResultSetrs=null;Statementps=null;conn=db_getConnection();Strings1="select*fromT_userInfowhereusername="+u+"";try{ps=conn.createStatement();rs=ps.executeQuery(s1);if(rs.next()){rs.close();ps.close();conn.close();returntrue;}else{rs.close();ps.close();conn.close();returnfalse;}}catch(SQLExceptione){returnfalse;}},publicvoidappend(useru){//注冊(cè)時(shí),添加注冊(cè)用戶信息Connectionconn=null;Statementps=null;conn=db_getConnection();Stringxm=u.getUsername();Stringpass=u.getPassword();Strings1="insertintoT_userInfo(username,password)values("+xm+","+pass+")";try{ps=conn.createStatement();ps.executeUpdate(s1);ps.close();conn.close();}catch(SQLExceptione){System.out.println(e);}}},(5)構(gòu)建控制層組件(第5步):5.1一個(gè)servlet(LoginServlet.java)---->實(shí)現(xiàn)登錄的控制5.2一個(gè)servlet(RegisterServlet.Java)?實(shí)現(xiàn)注冊(cè)的驗(yàn)證控制5.3web.xml配置文件的解讀,5.2構(gòu)建控制層組件:一個(gè)servlet(registerServlet.java,publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{Stringxm=(String)request.getParameter("username");Stringmm=(String)request.getParameter("password");Stringmm2=(String)request.getParameter("repassword");Stringtype_err="";db_opb=newdb_op();if(b.select_2(xm)){type_err=xm+":該用戶已經(jīng)注冊(cè)!";HttpSessions=request.getSession(true);s.setAttribute("type_err",type_err);response.sendRedirect("Register_err.jsp");}elseif(!mm.equals(mm2)){type_err="兩次密碼不一致錯(cuò)!";HttpSessions=request.getSession(true);s.setAttribute("type_err",type_err);response.sendRedirect("Register_err.jsp");}else{HttpSessions=request.getSession(true);s.setAttribute("username",xm);s.setAttribute("password",mm);useru=newuser();u.setUsername(xm);u.setPassword(mm);db_opd=newdb_op();d.append(u);response.sendRedirect("Register_succ.jsp");}},,5.1構(gòu)建控制層組件:一個(gè)servlet(LoginServlet.java),publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{useru=newuser();Stringxm="";Stringps="";xm=request.getParameter("username");ps=request.getParameter("password");u.setUsername(xm);u.setPassword(ps);HttpSessions=request.getSession(true);s.setAttribute("username",xm);db_opd=newdb_op();booleantf=d.select_1(u);if(tf){response.sendRedirect("main2.jsp");}else{response.sendRedirect("register2.jsp");}},,5.3web.xml配置文件的解讀和配置,,提示:必須要學(xué)會(huì)自己修改和配置,這對(duì)于我們了解servlet的工作原理和實(shí)用有著重要的作用。,JavaWeb應(yīng)用通過一個(gè)基于XML的發(fā)布描述符文件來配置其發(fā)布信息,這個(gè)文件名為web.xml,它存放于WEB-INF子目錄下。在web.xml文件中可主要包含如下配置信息:(1)Servlet的定義。(2)Servlet的初始化參數(shù)。(3)Servlet以及JSP的映射。(4)Filter的定義。(5)安全域配置參數(shù)。(6)welcome文件清單。(7)資源引用。(8)環(huán)境變量的定義。,(6)部署該程序到服務(wù)器Tomcat中,然后運(yùn)行另外,必須對(duì)系統(tǒng)進(jìn)行測(cè)試和調(diào)試,,總結(jié),該程序的設(shè)計(jì)關(guān)鍵:(1)了解系統(tǒng)流程,給出系統(tǒng)分析,并給出圖形描述;(2)數(shù)據(jù)庫模型的設(shè)計(jì):為了使對(duì)數(shù)據(jù)庫的操作,具有通用性,采用屬性文件,存放數(shù)據(jù)庫連接的有關(guān)信息,通過對(duì)數(shù)據(jù)文件的讀,獲取該信息,實(shí)現(xiàn)連接;(3)網(wǎng)頁之間是如何傳遞信息的?(4)jsp網(wǎng)頁與servlet之間是如何傳遞信息的:信息由jsp?servlet如何實(shí)現(xiàn);信息由servlet?jsp如何實(shí)現(xiàn);(5)應(yīng)該自己逐步設(shè)計(jì),絕不能找一個(gè)類似的程序修該一下。,,- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- Eclipse 開發(fā) javaweb 應(yīng)用程序
鏈接地址:http://m.jqnhouse.com/p-3447466.html