1.什么是MVC
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范。用一种业务逻辑、数据、界面显示分离的方法,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。
2.MVC的结构
Model:是应用程序中用于处理应用程序数据逻辑的部分,通常模型对象负责在数据库中存取数据。
View:是应用程序中处理数据显示的部分,通常视图是依据模型数据创建的。
Controller:是应用程序中处理用户交互的部分,通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
3.三层架构和MVC的区别
1. 三层架构是基于业务逻辑来分的,而MVC是基于页面来分的;
2. 三层是种软件架构,通过接口实现编程,MVC模式是一种复合设计模式,一种解决方案;
3. 三层架构模式是体系结构模式,MVC是设计模式;
4. 三层架构模式又可归于部署模式,MVC可归于表示模式。
4.MVC的原理
5.MVC的实现
package com.xuyahui.framework; import java.io.IOException; import java.util.HashMap; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.xuyahui.web.BookAction; /** * 对应图中的ActionServlet:中央控制器 * * @author 86155 * */ @WebServlet("*.action") public class DispathServlet extends HttpServlet{ public Map<String, Action> actionMap = new HashMap<String, Action>(); @Override public void init() throws ServletException { actionMap.put("/book", new BookAction()); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String uri = req.getRequestURI(); uri = uri.substring(uri.lastIndexOf("/"), uri.lastIndexOf("*")); Action action = actionMap.get(uri); action.execute(req, resp); } }
5.1控制器
package com.xuyahui.framework; import java.io.IOException; import java.lang.reflect.Method; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 子控制器 * * @author 86155 * */ public class Action { protected void execute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String methodName = req.getParameter("methodName"); try { Method m = this.getClass().getDeclaredMethod(methodName, HttpServletRequest.class,HttpServletResponse.class); m.setAccessible(true); m.invoke(this, req,resp); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
5.2增删改查方法类
package com.xuyahui.web; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.xuyahui.framework.Action; public class BookAction extends Action{ public void add(HttpServletRequest req, HttpServletResponse resp) { System.out.println("BookAction.add...."); } public void upd(HttpServletRequest req, HttpServletResponse resp) { System.out.println("BookAction.upd...."); } public void del(HttpServletRequest req, HttpServletResponse resp) { System.out.println("BookAction.del...."); } public void list(HttpServletRequest req, HttpServletResponse resp) { System.out.println("BookAction.list...."); } }
5.3效果展示
出现了增删改查方法就说明代码没有问题