MVC即 Model-View-Controller 的缩写,是按照职责划分模块一种设计模式,其中Model是核心。前端
MVC适合大型应用的开发。清晰的职责划分,有利于复杂项目的开发,并提升代码健壮性和可重用性。java
在请求/响应方式的Web应用中,模型没法向视图推送消息。MVC帮助Web开发实现了先后端分离,视图就是前端的页面,控制器和模型属于后端,先后端之间的数据交流使用JSON格式。web
😄 控制器能够本身实现一些简单的业务,但它主要仍是用于控制业务流程,清晰的职责划分对于复杂的项目十分有益spring
后端有四个重要的部件:后端
DispatcherServlet:仅做为接收前端请求的入口,不控制业务流程,具体流程交给专门的控制器完成。设计模式
Controller:控制流程调用模型,获得结果后选择相应的视图展现给用户spring-mvc
JavaBean/EJB:模型,实现具体业务,例如CRUD...服务器
RequestMapping:DispatcherServlet做为请求的统一入口,是如何选择适当Controller执行业务流程呢?这就要创建URL请求和Controller之间的映射关系,使用Java注解和反射来建这个映射。mvc
DispatcherServletapp
@WebServlet(urlPatterns = "*",loadOnStartup = 0) public class DispatcherServlet extends HttpServlet { @Override public void init(ServletConfig config) throws ServletException { 初始化RequestMapping中的映射信息; } @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //获取请求的uri String uri = req.getRequestURI(); Object o = 调用RequestMapping的方法将uri映射到Controller ; Methon m = ... ; 其余 others = ...; //调用Controller try { Object result = method.invoke(object, req, resp); switch (根据映射中的信息选择) { case 视图: 从result中获取视图地址; case 数据: 维持请求使用的视图,仅返回数据; ... ... } } catch (ReflectiveOperationException e) { e.printStackTrace(); } } private void responseView(HttpServletRequest req, HttpServletResponse resp, String result) throws IOException { resp.sendRedirect(result); } private void responseText(HttpServletRequest req, HttpServletResponse resp, String result) throws IOException { PrintWriter writer = resp.getWriter(); writer.println(result); } }
RequestMapping
public class RequestMapping { //存储映射的集合 private static Map map = new HashMap<>(); //获取映射服务 public static MVCMapping get(String uri) { return map.get(uri); } //加载映射 public static void load() { 读取配置文件; 类加载器加载获取配置文件中Controller对象的实例; for (循环条件) { if (Controller的方法包含的信息) { 放入map集合创建映射关系; } } } }
Controller
public class DemoController { @注解(信息:方法对应的url) public T methonName(HttpServletRequest req, HttpServletResponse resp) { 控制业务流程,调用模型; return T; } @注解(信息:方法对应的url) 其余方法{ } }
文章参考书籍: