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) 其餘方法{ } }
文章參考書籍: