




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第第2講講 基于基于Servlet+JavaBean+Jsp開發(fā)開發(fā)應用的過程應用的過程第第2講講 基于基于Servlet+JavaBean+Jsp開發(fā)應用的過程開發(fā)應用的過程 本講主要介紹主流的本講主要介紹主流的java web編程技術、設計模式編程技術、設計模式和框架,以及如何利用和框架,以及如何利用Eclipese開發(fā)開發(fā)Web應用程序。應用程序。 要點:要點: 1、Java Web編程的主要組件技術;編程的主要組件技術; 2、MVC設計模式;設計模式; 3、用、用Eclipse構建一個基于構建一個基于MVC模式的模式的Java Web的應的應用程序。用程序。 目的目的: 掌握如何用掌握
2、如何用Eclipse構建一個基于構建一個基于MVC模式的模式的Java WEB的應用程序。的應用程序。 2.1 java web 編程的主要組件技術nHtmlnjspnServletnJavabeannJdbcnXmlnTomcatnMySQL2.2 MVC設計模式 今天,我們見到的絕大部分應用,都是基于今天,我們見到的絕大部分應用,都是基于B/S(瀏覽(瀏覽器器/服務器)架構的,其中的服務器就是服務器)架構的,其中的服務器就是Web服務器??煞掌???梢?,見,Web應用是目前廣泛使用的應用模式。應用是目前廣泛使用的應用模式。Web程序開發(fā)方法的發(fā)展程序開發(fā)方法的發(fā)展: JSP的的Model
3、1 JSP的的Model 2 MVC 1 Model 1和和Model 2 對于對于Java的動態(tài)的動態(tài)Web編程技術而言,則經歷了編程技術而言,則經歷了Model 1和和Model 2時代。時代。 Model 1: Model 1就是就是JSP大行其道的時代,在大行其道的時代,在Model 1模式下,整個模式下,整個Web應用幾乎全部由應用幾乎全部由JSP頁面組成,頁面組成,JSP頁面接收處理客戶端請求,對請求處頁面接收處理客戶端請求,對請求處理后直接做出響應。用少量的理后直接做出響應。用少量的JavaBean來處理數(shù)據庫連接、數(shù)據庫訪問來處理數(shù)據庫連接、數(shù)據庫訪問等操作。等操作。 Mode
4、l 2: Model 2下下JSP不再承擔控制器的責任,它僅僅是表現(xiàn)層角色,僅不再承擔控制器的責任,它僅僅是表現(xiàn)層角色,僅僅用于將結果呈現(xiàn)給用戶,僅用于將結果呈現(xiàn)給用戶,JSP頁面的請求與頁面的請求與Servlet(控制器)交互,(控制器)交互,而而Servlet負責與后臺的負責與后臺的JavaBean通信。通信。 在在Model 2模式下,模型(模式下,模型(Model)由)由JavaBean 充當,視圖(充當,視圖(View)由由JSP頁面充當,而控制器(頁面充當,而控制器(Controller)則由)則由Servlet充當。充當。Model 1的程序流程:的程序流程:特點:特點: 由由J
5、SP頁面組成,頁面組成,JSP頁面接收處理客戶端請求,對請求處理后直接頁面接收處理客戶端請求,對請求處理后直接做出響應。用少量的做出響應。用少量的JavaBean來處理數(shù)據庫連接、數(shù)據庫訪問等操作來處理數(shù)據庫連接、數(shù)據庫訪問等操作Model 2的程序流程的程序流程:基本上是基本上是MVC結構結構特點:特點: Model 2下下JSP不再承擔控制器的責任,它僅僅是表現(xiàn)層角色,僅僅用于將結不再承擔控制器的責任,它僅僅是表現(xiàn)層角色,僅僅用于將結果呈現(xiàn)給用戶,果呈現(xiàn)給用戶,JSP頁面的請求與頁面的請求與Servlet(控制器)交互,而(控制器)交互,而Servlet負責與后臺負責與后臺的的JavaBe
6、an通信。通信。 在在Model 2模式下,模型(模式下,模型(Model)由)由JavaBean 充當,視圖充當,視圖(View)由)由JSP頁面充當,而控制器(頁面充當,而控制器(Controller)則由)則由Servlet充當。充當。2 Model 1和和Model 2的比較的比較 對于非常小型的對于非常小型的Web站點,如果后期的更新、維護站點,如果后期的更新、維護工作不是特別大,可以使用工作不是特別大,可以使用Model 1的模式來開發(fā)應用,的模式來開發(fā)應用,而不是使用而不是使用Model 2的模式。的模式。 雖然雖然Model 2提供了更好的可擴展性及可維護性,提供了更好的可擴展
7、性及可維護性,但但增加了前期開發(fā)成本增加了前期開發(fā)成本。從某種程度上講,。從某種程度上講,Model 2為了為了降低系統(tǒng)后期維護的復雜度,卻導致前期開發(fā)的更高復雜降低系統(tǒng)后期維護的復雜度,卻導致前期開發(fā)的更高復雜度。度。 3 MVC思想思想 MVC并不是并不是Java語言所特有的設計思想,也并不是語言所特有的設計思想,也并不是Web應用所特有的思想,它是所有面向對象程序設計語言應用所特有的思想,它是所有面向對象程序設計語言都應該遵守的規(guī)范。都應該遵守的規(guī)范。 MVC思想將一個應用分成三個基本部分:思想將一個應用分成三個基本部分:Model(模型)、(模型)、View(視圖)和(視圖)和Cont
8、roller(控制器),這三(控制器),這三個部分以最少的耦合協(xié)同工作,從而提高應用的可擴展性個部分以最少的耦合協(xié)同工作,從而提高應用的可擴展性及可維護性。及可維護性。MVCMVCMVC: M(model)是指數(shù)據模型,)是指數(shù)據模型, V(View)是指用戶界面,)是指用戶界面, C(Control)則是控制器。則是控制器。 使用使用MVCMVC的目的是將的目的是將M M和和V V的實現(xiàn)代碼分離,從而使同的實現(xiàn)代碼分離,從而使同一個程序可以使用不同的表現(xiàn)形式。一個程序可以使用不同的表現(xiàn)形式。 模型、視圖與控制器的分離,使得一個模型可以具有多個模型、視圖與控制器的分離,使得一個模型可以具有多個
9、顯示視圖。如果用戶通過某個視圖的控制器改變了模型的顯示視圖。如果用戶通過某個視圖的控制器改變了模型的數(shù)據,所有其它依賴于這些數(shù)據的視圖都應反映到這些變數(shù)據,所有其它依賴于這些數(shù)據的視圖都應反映到這些變化。因此,無論何時發(fā)生了何種數(shù)據變化,控制器都會將化。因此,無論何時發(fā)生了何種數(shù)據變化,控制器都會將變化通知所有的視圖,導致顯示的更新。這實際上是一種變化通知所有的視圖,導致顯示的更新。這實際上是一種模型的變化模型的變化- -傳播機制。模型、視圖、控制器傳播機制。模型、視圖、控制器3 3者之間的關者之間的關系和各自的主要功能。系和各自的主要功能。MVC的組成部分 視圖(視圖(ViewView)代表
10、用戶交互界面,對于代表用戶交互界面,對于WebWeb應用來應用來說就是說就是HTMLHTML界面。界面。 模型(模型(ModelModel):):就是業(yè)務流程就是業(yè)務流程/ /狀態(tài)的處理以及狀態(tài)的處理以及業(yè)務規(guī)則的制定。業(yè)務規(guī)則的制定。 控制(控制(ControllerController):):可以理解為一個分發(fā)器,可以理解為一個分發(fā)器,他來決定選擇什么樣的模型,選擇什么樣的視圖,他來決定選擇什么樣的模型,選擇什么樣的視圖,可以完成什么樣的用戶請求,控制層并不做任何可以完成什么樣的用戶請求,控制層并不做任何的數(shù)據處理。的數(shù)據處理。MVC帶來的好處 MVCMVC從根本上強制性的將它們分開,最大
11、程從根本上強制性的將它們分開,最大程度上實現(xiàn)了程序代碼與網頁的分離。度上實現(xiàn)了程序代碼與網頁的分離。 數(shù)據和業(yè)務規(guī)則從表示層分開,所以可以數(shù)據和業(yè)務規(guī)則從表示層分開,所以可以最大化的重用代碼。最大化的重用代碼。MVC的特點MVC特點:特點:n 多個視圖可以對應一個模型。按多個視圖可以對應一個模型。按MVC設計模式,一個模型對應多個視設計模式,一個模型對應多個視圖,可以減少代碼的復制及代碼的維護量,一旦模型發(fā)生改變,也易于維圖,可以減少代碼的復制及代碼的維護量,一旦模型發(fā)生改變,也易于維護。護。n 模型返回的數(shù)據與顯示邏輯分離。模型數(shù)據可以應用任何的顯示技術,模型返回的數(shù)據與顯示邏輯分離。模型數(shù)
12、據可以應用任何的顯示技術,例如,使用例如,使用JSP頁面、頁面、Velocity模板或者直接產生模板或者直接產生Excel文檔等。文檔等。n 應用被分隔為三層,降低了各層之間的耦合,提供了應用的可擴展性。應用被分隔為三層,降低了各層之間的耦合,提供了應用的可擴展性。 n 控制層的概念也很有效,由于它把不同的模型和不同的視圖組合在一起,控制層的概念也很有效,由于它把不同的模型和不同的視圖組合在一起,完成不同的請求。因此,控制層可以說是包含了用戶請求權限的概念。完成不同的請求。因此,控制層可以說是包含了用戶請求權限的概念。n MVC更符合軟件工程化管理的精神。不同的層各司其職,每一層的組更符合軟件
13、工程化管理的精神。不同的層各司其職,每一層的組件具有相同的特征,有利于通過工程化和工具化產生管理程序代碼。件具有相同的特征,有利于通過工程化和工具化產生管理程序代碼。4 常用的常用的MVC框架框架 Struts: -包括包括struts1和和struts2兩個。兩個。JSF: JSF是一個標準是一個標準 ,目前,目前,JSF是作為是作為JEE 5.0的一個組成部分,與的一個組成部分,與JEE 5.0一起發(fā)布一起發(fā)布 JSF的行為方法在的行為方法在POJO中實現(xiàn),中實現(xiàn),JSF的的Managed Bean無需繼承無需繼承任何特別的類。因此,無需在表單和模型對象之間實現(xiàn)多余的控制器任何特別的類。因
14、此,無需在表單和模型對象之間實現(xiàn)多余的控制器層。層。JSF中沒有控制器對象,控制器行為通過模型對象實現(xiàn)。中沒有控制器對象,控制器行為通過模型對象實現(xiàn)。 JSF的事件框架可以細化到表單中每個字段。的事件框架可以細化到表單中每個字段。JSF依然是基于依然是基于JSP/Servlet的,仍然是的,仍然是JSP/Servlet架構,因而學習曲線相對簡單架構,因而學習曲線相對簡單 2.3 用Eclipse構建一個基于MVC模式的Java Web應用程序題目要求:題目要求:(1)技術要求)技術要求: 按照按照MVC設計模式,利用設計模式,利用JSP、Servlet及及JavaBean構建一個簡單的登錄系統(tǒng)
15、。構建一個簡單的登錄系統(tǒng)。(2)系統(tǒng)功能要求:)系統(tǒng)功能要求: 當用戶在登錄頁面上填寫用戶名和密碼并提交后,當用戶在登錄頁面上填寫用戶名和密碼并提交后,系統(tǒng)檢查該用戶是否已經注冊,若注冊,系統(tǒng)進入主頁面,系統(tǒng)檢查該用戶是否已經注冊,若注冊,系統(tǒng)進入主頁面,否則,進入注冊頁面。系統(tǒng)的工作流程見下圖。否則,進入注冊頁面。系統(tǒng)的工作流程見下圖。(2)控制器控制器-1LoginServlet(1) 登錄頁面Login.jsp(5)數(shù)據組件userdoadb_op(6)數(shù)據庫MySQL進行驗證,不符合格式,返回注冊頁面,重新注冊,并提示出錯情況,注冊成功,進入登錄頁面未注冊 登錄系統(tǒng)的工作流程登錄系統(tǒng)的
16、工作流程(3)提示:登錄成功提示:登錄成功Main.jsp(過(過20秒后再自動秒后再自動進入注冊頁面進入注冊頁面)(4)進入注冊頁面Register.jsp(7)控制器控制器-2RegisterServlet(8)提示:注冊失敗Register_err.jsp(過20秒后再自動進入注冊頁面)(9)注冊成功Register_succ.jsp(過20秒后再自動進入注冊頁面)已注冊或者或者密碼錯誤(10)進入主頁面Main2.jsp構建系統(tǒng)的處理步驟(1)數(shù)據庫設計:數(shù)據庫設計:構建數(shù)據庫表構建數(shù)據庫表T_UserInfo(2)在在Eclipse中創(chuàng)建一個項目中創(chuàng)建一個項目:Login_Proj(
17、3)構建視圖組件構建視圖組件:登錄頁面(:登錄頁面(login.jsp)、主頁面)、主頁面(main.jsp)、注冊頁面注冊頁面(register.jsp),注冊失敗(Register_err.jsp),注冊成功(Register_succ.jsp)(4)構建控制層組件:構建控制層組件: 一個一個servlet(LoginServlet.java)-實現(xiàn)登錄的控制實現(xiàn)登錄的控制 一個一個servlet(RegisterServlet.Java)-實現(xiàn)注冊的驗證控制實現(xiàn)注冊的驗證控制(5)構建業(yè)務邏輯層組件(模型組件)構建業(yè)務邏輯層組件(模型組件): 一個一個JavaBean:user,doa,
18、db_op(6)部署該程序到服務器部署該程序到服務器Tomcat中中,然后運行。,然后運行。(1)數(shù)據庫設計:構建數(shù)據庫表數(shù)據庫設計:構建數(shù)據庫表T_UserInfo利用利用MySQL數(shù)據庫,數(shù)據庫,n創(chuàng)建數(shù)據庫:創(chuàng)建數(shù)據庫:usern創(chuàng)建表及其結構:創(chuàng)建表及其結構:T_UserInfo字段名字段名字段類型字段類型字段描述字段描述userName文本(文本(20)用戶名,主鍵用戶名,主鍵password文本(文本(10)密碼密碼數(shù)據表結構數(shù)據表結構T_UserInfo注意,該數(shù)據庫所存放的位置注意,該數(shù)據庫所存放的位置(2)在在Eclipse中創(chuàng)建一個項目:中創(chuàng)建一個項目:Login_Proj
19、 按按Eclipse建立工程的提示,建立建立工程的提示,建立Web工程工程,工程的名稱為:,工程的名稱為:Login_Proj。(3)構建視圖組件:構建視圖組件:- 登錄頁面(登錄頁面(login.jsp)n 選中工程選中工程“Login_Proj”,n 擊右鍵,選擊右鍵,選“新建新建”,n 按按Eclipse的提示,建立的提示,建立jsp,名稱為:,名稱為:Login。n 修改默認修改默認jsp內容內容,達到我們所要求的編碼達到我們所要求的編碼。login.jsp的代碼的代碼 登錄頁面 用戶名: 密 碼: (3)構建視圖組件構建視圖組件- 主頁面主頁面
20、(main.jsp)n 選中工程選中工程“Login_Proj”,n 擊右鍵,選擊右鍵,選“新建新建”,n 按按Eclipse的提示,建立的提示,建立jsp,名稱為:,名稱為:main.jsp。n 修改默認修改默認jsp內容內容,達到我們所要求的編碼達到我們所要求的編碼。main.jsp代碼代碼 主頁面 ,你成功登錄,20秒后自動進入主頁面! 類似可以建立其它的頁面:類似可以建立其它的頁面: 系統(tǒng)頁面系統(tǒng)頁面main2.jsp 注冊頁面注冊頁面register.jsp 注冊失敗提示頁面注冊失敗提示頁面Register_err.jsp 注冊成功提示頁面注冊成功提示頁面Register_succ.
21、jsp構建控制層組件(構建控制層組件(第第4步步) 建立數(shù)據建立數(shù)據JavaBean用戶(用戶(user);); 建立連接數(shù)據庫的建立連接數(shù)據庫的JavaBean(doa) 建立實現(xiàn)對用戶數(shù)據庫進行操作的建立實現(xiàn)對用戶數(shù)據庫進行操作的java類類-db_op.java4.1 建立數(shù)據建立數(shù)據JavaBean用戶(用戶(user)package JavaBean;public class user private String username; private String password; public String getUsername() return username; publi
22、c void setUsername(String username) this.username = username; public String getPassword() return password; public void setPassword(String password) this.password = password; 4.2 建立連接數(shù)據庫的建立連接數(shù)據庫的JavaBean(doa)package JavaBean;public class doa private String db_username; private String db_password; pri
23、vate String db_driver; private String db_connection; public String getDb_username() return db_username; public void setDb_username(String db_username) this.db_username = db_username; public String getDb_password() return db_password; public void setDb_password(String db_password) this.db_password =
24、db_password; public String getDb_driver() return db_driver; public void setDb_driver(String db_driver) this.db_driver = db_driver; public String getDb_connection() return db_connection; public void setDb_connection(String db_connection) this.db_connection = db_connection; 4.3 在在JavaBean(doa)的基礎上,建立實
25、現(xiàn)對用的基礎上,建立實現(xiàn)對用戶數(shù)據庫進行操作的戶數(shù)據庫進行操作的java類類-db_op.javapublic class db_op public Connection db_getConnection()Connection conn=null; String db_username=null; String db_password=null; String db_driver=null; String db_connection=null; Properties pro = new Properties(); File file = new File(H:web_15Login_Proj
26、perties); try pro.load(new FileInputStream(file); catch (Exception e) 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 Cl
27、ass.forName(db_driver).newInstance(); conn=DriverManager.getConnection(db_connection, db_username,db_password); return conn; catch(Exception e) System.out.println(e); return null; 實實現(xiàn)現(xiàn)數(shù)數(shù)據據庫庫的的連連接接public boolean select_1(user u) /查詢用戶是否已經注冊 Connection conn=null; ResultSet rs=null; Statement ps=null;
28、String xm=u.getUsername(); String pass=u.getPassword(); conn=db_getConnection(); String s1=select * from T_userInfo where username=+xm+ and password=+pass+; try ps=conn.createStatement(); rs=ps.executeQuery(s1); if(rs.next() rs.close(); ps.close(); conn.close(); return true; else rs.close(); ps.clos
29、e(); conn.close(); return false; catch(SQLException e) return false; public boolean select_2(String u) /在注冊時,查詢是否有重名的用戶已經注冊Connection conn=null;ResultSet rs=null;Statement ps=null;conn=db_getConnection();String s1=select * from T_userInfo where username=+u+ ;tryps=conn.createStatement(); rs=ps.execu
30、teQuery(s1);if(rs.next()rs.close(); ps.close(); conn.close();return true;elsers.close(); ps.close(); conn.close();return false;catch(SQLException e)return false;public void append(user u)/注冊時,添加注冊用戶信息Connection conn=null;Statement ps=null;conn=db_getConnection();String xm=u.getUsername();String pass
31、=u.getPassword();String s1=insert into T_userInfo(username,password) values(+xm+,+pass+) ;tryps=conn.createStatement();ps.executeUpdate(s1);ps.close();conn.close();catch(SQLException e)System.out.println(e);(5)構建控制層組件()構建控制層組件(第第5步步):): 5.1 一個一個servlet(LoginServlet.java) -實現(xiàn)登錄的控制實現(xiàn)登錄的控制 5.2 一個一個serv
32、let(RegisterServlet.Java) 實現(xiàn)注冊的驗證控制實現(xiàn)注冊的驗證控制 5.3 web.xml配置文件的配置文件的解讀解讀5.2 構建控制層組件:一個構建控制層組件:一個servlet(registerServlet.javapublic void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException String xm=(String)request.getParameter(username); String mm=(Strin
33、g)request.getParameter(password); String mm2=(String)request.getParameter(repassword); String type_err=; db_op b=new db_op(); if(b.select_2(xm) type_err=xm+:該用戶已經注冊!; HttpSession s=request.getSession(true); s.setAttribute(type_err,type_err); response.sendRedirect(Register_err.jsp); else if(!mm.equal
34、s(mm2) type_err=兩次密碼不一致錯!; HttpSession s=request.getSession(true); s.setAttribute(type_err,type_err); response.sendRedirect(Register_err.jsp); else HttpSession s=request.getSession(true); s.setAttribute(username,xm); s.setAttribute(password,mm); user u=new user();u.setUsername(xm);u.setPassword(mm);
35、 db_op d=new db_op(); d.append(u); response.sendRedirect(Register_succ.jsp); 5.1 構建控制層組件:一個構建控制層組件:一個servlet(LoginServlet.java)public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException user u=new user(); String xm=; String ps=; xm=request.getParame
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課題申報書丟了咋辦
- 英語教改課題申報書
- 國家課題項目申報書
- 新課標相關課題申報書
- 合同范本號和合同編號
- 加工承攬合同范本格式
- 青年生育意愿課題申報書
- 員工店鋪勞務合同范本
- 化工用消泡劑采購合同范例
- 低價出售二手叉車合同范本
- 2025人教版一年級下冊數(shù)學教學進度表
- DeepSeek教案寫作指令
- 2025年安徽省合肥熱電集團招聘50人歷年高頻重點模擬試卷提升(共500題附帶答案詳解)
- 休學復學申請書
- 北京2025年02月北京市地質礦產勘查院所屬事業(yè)單位公開招考工作人員筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- DeepSeek零基礎到精通手冊(保姆級教程)
- 煤礦監(jiān)測監(jiān)控培訓
- 瓷磚鋪貼勞務承包協(xié)議書
- 2025年四川司法警官職業(yè)學院高職單招職業(yè)適應性測試近5年??及鎱⒖碱}庫含答案解析
- 新建污水處理廠工程EPC總承包投標方案(技術標)
- 柔性電路板自動化制造-深度研究
評論
0/150
提交評論