日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

MVC分层开发模式

發布時間:2023/12/10 c/c++ 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MVC分层开发模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MVC

  • 1. 什么是mvc開發模式
  • 2. 基于servlet手寫mvc框架

1. 什么是mvc開發模式

  • mvc不是一種技術,只是一種開發模式
  • 使用分層開發模式能在大型項目中,讓開發人員更好的協同工作
  • 便于項目的維護和擴展
  • M: Model 模型層->數據庫層->dao
  • V: View 視圖層->收集和展示用戶數據->html/jsp
  • C: Controller->數據封裝->邏輯處理->流程控制->servlet/action/controller

2. 基于servlet手寫mvc框架

  • 什么是框架?

是一種標準或者規范,使用別人寫好的東西,按照他的制造好的輪子,他的流程,去開發我想要實現的功能,提高開發效率,降低開發成本。

  • 框架的分類,分為前后端框架
  • 前端框架分為功能性的和美觀性的
  • 功能性的:
    jQuery,vue,angular 判斷數據合法性,dom操作
  • 美觀性的:
    bootstrap,easyui,react,qucikui…
    • 什么是mvc框架

    mvc是后端框架,專門用來解決controller與view層數據交互的問題,對這個交互過程中的各種操作進行規范和封裝,讓開發人員在開發web應用程序時對請求響應的控制更為方便(數據層的訪問不屬于mvc框架內)

    • mvc框架的職責
  • 規范開發流程
  • 對請求數據進行封裝(如頁面有100個表單 多個表單)
  • 流程跳轉的規范 (是轉發,重定向,還是js跳轉)
    • 工作流程圖

    • ActionServlet好比一個大哥 (mvc框架的核心功能),大哥接收到老板的任務(接收到業務請求時),安排小弟(服務對象,實現業務的類)來完成任務,小弟最后執行任務(完成邏輯處理),把結果返回大哥,最后結果返回(流程控制)老板(客戶端)。

    • 基于servlet的mvc框架核心成員

    • ActionServlet servlet 接收特定的請求,mvc框架的入口
    • Action接口service方法,規范所有小弟的服務方法
    • 小弟xxxAction實現接口,完成邏輯處理,為客戶端提供服務
    • .properties鍵值對配置文件,描述業務請求與xxxAction類的路徑 (反射根據業務請求,取到配置文件的服務類)
    • 可封裝response流,輸出js代碼跳轉
    • 核心控制器ActionServlet

  • 配置文件
  • <servlet><servlet-name>ActionServlet</servlet-name><servlet-class>com.lovely.mvc.ActionServlet</servlet-class></servlet><servlet-mapping><servlet-name>ActionServlet</servlet-name><url-pattern>*.do</url-pattern> <!-- 如接收query.do 的業務請求--></servlet-mapping>
  • action接口,規范服務類
  • package com.lovely.mvc;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;public interface Action {// service服務方法接口,返回要跳轉的頁面urlpublic String service(HttpServletRequest req, HttpServletResponse resp);}
  • 創建配置文件(核心控制器根據業務請求,跳到對應的服務類完成業務)

  • 控制器代碼

  • package com.lovely.mvc;import java.io.IOException; import java.io.InputStream; import java.util.Properties;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;public class ActionServlet extends HttpServlet {/*** 核心控制servlet* 根據訪問方式 和 類的路徑信息 到對應的servlet來處理*/private static final long serialVersionUID = 1L;private Properties property = null;@Overridepublic void init() throws ServletException {property = new Properties();// 加載配置文件InputStream in = this.getServletContext().getResourceAsStream("/WEB-INF/config.properties");try {property.load(in);} catch (IOException e) {e.printStackTrace();} finally {try {if (in != null)in.close();} catch (IOException e) {e.printStackTrace();}}}@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {String uri = req.getRequestURI();String key = uri.substring(uri.lastIndexOf("/") + 1, uri.lastIndexOf("."));System.out.println(uri + "\t" + key);// 根據請求對象 拿到對應的類 進行服務String value = property.get(key).toString();try {// 反射拿到類對象Class<?> c = Class.forName(value);// 創建action對象Action action = (Action) c.newInstance();String result = action.service(req, resp);if (result != null) {// 根據返回結果 決定是請求轉發 還是重定向if (result.startsWith("forward")) {String path = result.split(":")[1];req.getRequestDispatcher(path).forward(req, resp);} else if (result.startsWith("redirect")) {String path = result.split(":")[1];resp.sendRedirect(req.getContextPath() + path);} else {// 寫路徑默認請求轉發req.getRequestDispatcher(result).forward(req, resp);} }} catch (ClassNotFoundException e) {e.printStackTrace();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}}}
  • 提供服務對象類(以查詢為例)
  • package com.lovely.action;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import com.lovely.dao.CommonDao; import com.lovely.entity.Ticket; import com.lovely.mvc.Action;public class QueryAction implements Action {@Overridepublic String service(HttpServletRequest req, HttpServletResponse resp) {CommonDao dao = new CommonDao();req.setAttribute("list", dao.queryAll(Ticket.class));// 返回轉發的地址return "/list.jsp";}}
    • 以上就算一個基于servlet實現的mvc框架了,別人已經有更牛的框架,這里只是拿來分析。
    • 上面的代碼,離不開數據庫操作,請看
      反射和注解對dao層操作

    總結

    以上是生活随笔為你收集整理的MVC分层开发模式的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。