摘要:顯示層控制層數(shù)據(jù)層統(tǒng)一交給或者處理處理流程客戶端發(fā)送到執(zhí)行讀取返回返回給在返回給在給客戶端問(wèn)題代碼雜亂即方式客戶端發(fā)送到然后執(zhí)行用于讀取控制器獲取到讀取的數(shù)據(jù)以后再次返回給生成文件給客戶端分為顯示層控制層模型層屬于提供的分布式組件服務(wù)分
Model1
顯示層,控制層,數(shù)據(jù)層,統(tǒng)一交給jsp或者javabean處理.
處理流程客戶端發(fā)送request 到 jsp jsp 執(zhí)行javabean javabean讀取databases
返回 databases 返回給javabean 在返回給jsp 在response 給客戶端
問(wèn)題代碼雜亂
即 jsp + dao 方式
客戶端發(fā)送request 到servlet 然后servlet 執(zhí)行javabean javabean用于讀取databases 控制器,獲取到j(luò)avabean讀取的數(shù)據(jù)以后,再次返回給jsp,jso生成html文件,response 給客戶端
分為 顯示層 控制層 模型層
EJB 屬于SUN提供的分布式組件服務(wù) 分為會(huì)話bean 實(shí)體bean 消息驅(qū)動(dòng)bean實(shí)栗
一個(gè)登錄程序
用戶提交登錄信息,發(fā)送給servlet servlet數(shù)據(jù)驗(yàn)證失敗將會(huì)返回給登錄頁(yè),同時(shí)servlet將會(huì)調(diào)用數(shù)據(jù)層操作dao,dao到數(shù)據(jù)庫(kù)databases進(jìn)行驗(yàn)證,結(jié)果返回給servlet 然后返回兩個(gè)結(jié)果,登錄成功,登錄失敗.
no | 列名稱 | 描述 |
---|---|---|
1 | userid | 保存用戶的登錄id |
2 | name | 用戶真實(shí)姓名 |
3 | password | 用戶密碼 |
![](https://melovemingming-125387...
)
package com.ming.dbc; import java.sql.Connection; import java.sql.DriverManager; public class DatabaseConnection { private static final String DBDRIVER = "com.mysql.cj.jdbc.Driver"; private static final String DBURL = "jdbc:mysql://47.94.95.84:32786/test"; private static final String DBUSER = "test"; private static final String DBPASSWORD = "ABCcba20170607"; private Connection connection = null; // 連接數(shù)據(jù)庫(kù) public DatabaseConnection() throws Exception{ try{ Class.forName(DBDRIVER); connection = DriverManager.getConnection(DBURL, DBUSER, DBPASSWORD); }catch (Exception e){ throw e; } } // 獲得數(shù)據(jù)庫(kù)連接 public Connection getConnection(){ return this.connection; } // 數(shù)據(jù)庫(kù)關(guān)閉 public void close() throws Exception{ if(this.connection != null){ try{ this.connection.close(); }catch (Exception e){ throw e; } } } }dao層 定義接口
package com.ming.dao; import com.ming.vo.User; public interface IUserDAO { /** * 用戶登錄驗(yàn)證 * @param user 傳入VO對(duì)象 * @return 驗(yàn)證操作結(jié)果 * @throws Exception 拋出錯(cuò)誤 */ public boolean findLogin(User user) throws Exception; }實(shí)現(xiàn)類
package com.ming.dao; import com.ming.vo.User; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; public class UserDAOImpl implements IUserDAO { // 數(shù)據(jù)庫(kù)連接對(duì)象 private Connection connection = null; // 操作對(duì)象 private PreparedStatement preparedStatement = null; // 數(shù)據(jù)庫(kù)連接 public UserDAOImpl(Connection _connection){ this.connection = _connection; } /** * 用戶登錄驗(yàn)證 * * @param user 傳入VO對(duì)象 * @return 驗(yàn)證操作結(jié)果 * @throws Exception 拋出錯(cuò)誤 */ @Override public boolean findLogin(User user) throws Exception { boolean flag = false; try{ String sql = "SELECT name FROM user WHERE userid = ? AND password = ?"; // 獲得實(shí)例化對(duì)象 this.preparedStatement = this.connection.prepareStatement(sql); // 設(shè)置id this.preparedStatement.setString(1, user.getUserid()); this.preparedStatement.setString(2, user.getPassword()); ResultSet resultset = this.preparedStatement.executeQuery(); if(resultset.next()){ user.setName(resultset.getString(1)); flag = true; } }catch (Exception e){ throw e; }finally { if(this.preparedStatement != null){ try{ this.preparedStatement.close(); }catch (Exception e){ throw e; } } } return flag; } }代理類
package com.ming.dao; import com.ming.dbc.DatabaseConnection; import com.ming.vo.User; public class UserDAOProxy implements IUserDAO { private DatabaseConnection databaseConnection = null; private IUserDAO dao = null; public UserDAOProxy(){ try{ this.databaseConnection = new DatabaseConnection(); }catch (Exception e){ e.printStackTrace(); } this.dao = new UserDAOImpl(this.databaseConnection.getConnection()); } /** * 用戶登錄驗(yàn)證 * * @param user 傳入VO對(duì)象 * @return 驗(yàn)證操作結(jié)果 * @throws Exception 拋出錯(cuò)誤 */ @Override public boolean findLogin(User user) throws Exception { boolean flag = false; try{ flag = this.dao.findLogin(user); }catch (Exception e){ throw e; }finally { this.databaseConnection.close(); } return flag; } }定義代理工廠
package com.ming.factory; import com.ming.dao.IUserDAO; import com.ming.dao.UserDAOProxy; public class DAOFactory { public static IUserDAO getIuserDAOInstance(){ return new UserDAOProxy(); } }實(shí)體關(guān)系映射
package com.ming.vo; // 對(duì)user表進(jìn)行映射 public class User { private String userid; private String name; private String password; public String getUserid() { return userid; } public String getName() { return name; } public String getPassword() { return password; } public void setUserid(String userid) { this.userid = userid; } public void setName(String name) { this.name = name; } public void setPassword(String password) { this.password = password; } }視圖層
<%@ page import="java.util.List" %> <%@ page import="java.util.Iterator" %><%-- Created by IntelliJ IDEA. User: ming Date: 19-3-16 Time: 下午11:07 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %>配置文件Title 用戶登錄程序
<% Listinfo = (List )request.getAttribute("info"); if(info != null){ Iterator iterator = info.iterator(); while(iterator.hasNext()){ %> <%=iterator.next()%>
<% } } %>
mvc運(yùn)行流程Archetype Created Web Application login com.ming.servlrt.LoginServlet login /loginServlet
表單提交到servlet,servlet調(diào)用dao進(jìn)行表單驗(yàn)證,然后dao連接數(shù)據(jù)庫(kù)進(jìn)行驗(yàn)證,驗(yàn)證結(jié)果返回給業(yè)務(wù)層,即servlet,在業(yè)務(wù)層servlet中獲取info等日志信息,然后服務(wù)器端跳轉(zhuǎn)到運(yùn)行結(jié)果頁(yè)面即view層.
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/73749.html
摘要:基于此,一種新一開(kāi)發(fā)模式誕生了框架是市面上獨(dú)一無(wú)二的多主體共存的靈活混合型開(kāi)發(fā)模型。在這個(gè)時(shí)候,框架將會(huì)為他們帶來(lái)便利。規(guī)范化框架符合標(biāo)準(zhǔn),重新實(shí)現(xiàn)了等特性。開(kāi)發(fā)者只需要把對(duì)應(yīng)的類注冊(cè)到中即可,代碼量不超過(guò)行便可使用框架 kerkee showImg(https://segmentfault.com/img/remote/1460000006785286); kerkee框架的誕生...
摘要:基于此,一種新一開(kāi)發(fā)模式誕生了框架是市面上獨(dú)一無(wú)二的多主體共存的靈活混合型開(kāi)發(fā)模型。在這個(gè)時(shí)候,框架將會(huì)為他們帶來(lái)便利。規(guī)范化框架符合標(biāo)準(zhǔn),重新實(shí)現(xiàn)了等特性。開(kāi)發(fā)者只需要把對(duì)應(yīng)的類注冊(cè)到中即可,代碼量不超過(guò)行便可使用框架 kerkee showImg(https://segmentfault.com/img/remote/1460000006785286); kerkee框架的誕生...
摘要:面向?qū)ο笕筇卣骼^承性多態(tài)性封裝性接口。第五階段封裝一個(gè)屬于自己的框架框架封裝基礎(chǔ)事件流冒泡捕獲事件對(duì)象事件框架選擇框架。核心模塊和對(duì)象全局對(duì)象,,,事件驅(qū)動(dòng),事件發(fā)射器加密解密,路徑操作,序列化和反序列化文件流操作服務(wù)端與客戶端。 第一階段: HTML+CSS:HTML進(jìn)階、CSS進(jìn)階、div+css布局、HTML+css整站開(kāi)發(fā)、 JavaScript基礎(chǔ):Js基礎(chǔ)教程、js內(nèi)置對(duì)...
摘要:面向?qū)ο笕筇卣骼^承性多態(tài)性封裝性接口。第五階段封裝一個(gè)屬于自己的框架框架封裝基礎(chǔ)事件流冒泡捕獲事件對(duì)象事件框架選擇框架。核心模塊和對(duì)象全局對(duì)象,,,事件驅(qū)動(dòng),事件發(fā)射器加密解密,路徑操作,序列化和反序列化文件流操作服務(wù)端與客戶端。 第一階段: HTML+CSS:HTML進(jìn)階、CSS進(jìn)階、div+css布局、HTML+css整站開(kāi)發(fā)、 JavaScript基礎(chǔ):Js基礎(chǔ)教程、js內(nèi)置對(duì)...
閱讀 2148·2021-10-14 09:43
閱讀 2206·2019-08-30 15:55
閱讀 738·2019-08-30 14:23
閱讀 2030·2019-08-30 13:21
閱讀 1246·2019-08-30 12:50
閱讀 2210·2019-08-29 18:46
閱讀 2292·2019-08-29 17:28
閱讀 2375·2019-08-29 17:21