MVC概念
百度:MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設計典范,用一種業務邏輯、數據、界面顯示分離的方法組織代碼,將業務邏輯聚集到一個部件里面,在改進和個性化定制界面及用戶交互的同時,不需要重新編寫業務邏輯。MVC被獨特的發展起來用於映射傳統的輸入、處理和輸出功能在一個邏輯的圖形化用戶界面的結構中。
Model(模型)表示應用程序核心(比如數據庫記錄列表)。JavaBean
View(視圖)顯示數據(數據庫記錄)。Javaee中的Jsp
Controller(控制器)處理輸入(寫入數據庫記錄)。Javaee中的Servlet
模型(javaweb中的javaBean)
Model是應用程序中用於處理應用程序數據邏輯的部分。通常模型對象負責在數據庫中存取數據。
視圖(javaweb中的jsp)
視圖是用戶看到並與之交互的界面。對老式的Web應用程序來說,視圖就是由HTML元素組成的界面,在新式的Web應用程序中,HTML依舊在視圖中扮演着重要的角色,但一些新的技術已層出不窮,它們包括等Adobe Flash和像XHTML,XML/XSL,WML一些標識語言和Web services.
控制器(javaweb中的Servlet)
控制器接受用戶的輸入並調用模型和視圖去完成用戶的需求,所以當單擊Web頁面中的超鏈接和發送HTML表單時,控制器本身不輸出任何東西和做任何處理。它只是接收請求並決定調用哪個模型構件去處理請求,然后再確定用哪個視圖來顯示返回的數據。
常見名詞解釋:
JavaBeans:就是簡單的java類但是符合某種特殊規范的實體類。
例如:
package com.zyb.pojo;//實體類 public class User { private int uid; private String uname; private String pwd; private String sex; private int age; private String birth; public int getUid() { return uid; } public void setUid(int uid) { this.uid = uid; } public String getUname() { return uname; } public void setUname(String uname) { this.uname = uname; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getBirth() { return birth; } public void setBirth(String birth) { this.birth = birth; } @Override public String toString() { return "User [uid=" + uid + ", uname=" + uname + ", pwd=" + pwd + ", sex=" + sex + ", age=" + age + ", birth=" + birth + "]"; } public User() { super(); // TODO Auto-generated constructor stub } public User(int uid, String uname, String pwd, String sex, int age, String birth) { super(); this.uid = uid; this.uname = uname; this.pwd = pwd; this.sex = sex; this.age = age; this.birth = birth; } }
Dao層
DAO(Data Access Object):數據訪問接口。數據訪問:顧名思義就是與數據庫打交道,夾在業務邏輯與數據庫資源中間。DAO模式是標准的J2EE設計模式之一,開發人員使用這個模式把底層的數據訪問操作和上層的商務邏輯分開。
package com.zyb.dao; import java.util.List; import com.zyb.pojo.User; public interface UserDao { /** * 根據用戶名密碼查詢用戶信息 * @param uname用戶名 * @param pwd密碼 * @return 查詢的用戶信息 */ User checkUserloginDao(String uname,String pwd); /** * 修改用戶密碼 * @param newPwd * @param uid * @return */ int UserChagePwdDao(String newPwd, int uid); List<User> showUserDao(); }
Service
Service層是為了處理包含多個POJO對象(即對多個表的數據操作)時,進行事務等管理。所以Service層(其接口的實現類)被注入一個或多個DAO對象,以完成有意義的數據操作。
package com.zyb.sercvice; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.zyb.dao.UserDao; import com.zyb.pojo.User; public interface UserService { /** * 校驗用戶登錄 * @param uname:用戶名 * @param pwd:用戶密碼 * @return 返回查詢到的用戶信息 */ User checkUserloginService(String uname,String pwd); /** * * 根據uid修改用戶密碼 * @param newPwd * @param uid * @return */ int UserChagePwdService(String newPwd, int uid); /** * 查詢所有用戶信息 * @param req * @param resp * @return */ List<User> showUserService(); }
package com.zyb.sercvice.impl; import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import com.zyb.dao.UserDao; import com.zyb.dao.impl.UserDaoImpl; import com.zyb.pojo.User; import com.zyb.sercvice.UserService; public class UserServiceImpl implements UserService{ //聲明Dao層對象 UserDao ud = new UserDaoImpl(); //聲明日志對象 Logger logger = Logger.getLogger(UserServiceImpl.class); //用戶登錄 public User checkUserloginService(String uname, String pwd) { //打印日志 logger.debug(uname+"發起登錄請求"); User u = ud.checkUserloginDao(uname, pwd); //判斷 if(u!=null){ logger.debug(uname+"登錄成功"); }else{ logger.debug(uname+"登錄失敗"); } return u; } //修改用戶密碼 @Override public int UserChagePwdService(String newPwd, int uid) { // TODO Auto-generated method stub logger.debug(uid+"發起密碼修改請求"); int mark= ud.UserChagePwdDao(newPwd,uid); if(mark>0){ logger.debug(uid+"密碼修改成功"); }else{ logger.debug(uid+"密碼修改失敗"); } return mark; } @Override public List<User> showUserService() { // TODO Auto-generated method stub List<User> lu = new ArrayList<User>(); lu.addAll(ud.showUserDao()); for(int i=0;i<lu.size();i++){ logger.debug(lu.get(i).getUid()+" "+lu.get(i).getUname()+" "+lu.get(i).getPwd()+" "+lu.get(i).getAge()+" "+lu.get(i).getBirth()+lu.get(i).getSex()); } return lu; } }
工程目錄:
簡單介紹:從上往下進行處理,從下往上進行從傳遞。
User是存儲對應Servlet
Service是業務層,Servlet告訴它該如何處理,返回給Serevlet處理結果
Pojo:模式(javaBean)存儲用戶信息
Dao:處理與數據庫相關的操作,將結果返回給Service
MVC的好處就是在添加新功能是可以做到條例清晰,可擴展性強、代碼邏輯清晰。