最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MVC框架自定義實現(xiàn)過程

 更新時間:2021年08月31日 16:29:49   作者:十二o  
這篇文章主要介紹了MVC框架自定義實現(xiàn)過程,通過搞懂什么是MVC以及MVC的運行原理然后再去理解其演繹過程,本文附含了詳細(xì)的思維導(dǎo)圖幫助大家更好的理解MVC

1、思維導(dǎo)圖

2、什么是MVC?

MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫, 它是一種軟件設(shè)計典范,用一種業(yè)務(wù)邏輯、數(shù)據(jù)、界面顯示分離的方法組織代碼。

3、運行原理

用戶發(fā)送請求 → 中央控制器接受用戶請求 → 分析請求連接/獲取到用戶需要的類+方法 → 調(diào)用相對應(yīng)的Model → 訪問數(shù)據(jù)庫服務(wù)器

4、演繹過程

4.1.控制層

BookServlet:

package com.tyf.web;
import java.io.IOException;
import java.lang.reflect.Method;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class BookServlet extends HttpServlet {	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		/**
		 * 增刪改查缺陷:
		 * 		當(dāng)需求發(fā)送改變,或者新增需求的時候,需要改動下面代碼
		 * 
		 * 解決方案:
		 * 		前臺傳遞name到后臺,實際就是想要調(diào)用當(dāng)前(this)類對象的name方法
		 */
		String name = req.getParameter("name");	
		try {
			Method m = this.getClass().getDeclaredMethod(name, HttpServletRequest.class,HttpServletResponse.class);
			m.setAccessible(true);
			m.invoke(this, req,resp);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
		/*if ("add".equals(name)) {
			add(req,resp);
		}else if ("delete".equals(name)) {
			delete(req,resp);
		}else if ("edit".equals(name)) {
			edit(req,resp);
		}else if ("list".equals(name)) {
			list(req,resp);
		}else if ("load".equals(name)) {
			load(req,resp);
		}*/
	}
}

DispatchServlet:

package com.tyf.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.tyf.web.BookAction;
/**
 * 
 * 目標(biāo):
 * 	根據(jù)自定義mvc框架的原理圖  完成框架的研發(fā)
 * @author Tang  中央控制器
 * 	尋找子控制器
 *
 * 2021年8月30日  下午6:49:35
 */
 
@WebServlet("*.action")
public class DispatchServlet extends HttpServlet {	
	//存放子控制器的容器
	private Map<String , ActionSupport> actions = new HashMap<String , ActionSupport>();
	//初始化子控制器容器(集合),經(jīng)過初始化,action容器內(nèi)部就有了子控制器
	//init(初始化方法),service(服務(wù)),destroy(銷毀)
	@Override
	public void init() throws ServletException {
		actions.put("/book", new BookAction());
	} 
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//完成子控制器對的過程
		//瀏覽器:http://localhost:8080/J2ee12/book.action?name=add
		//目標(biāo):BookAction.add()...
		/**
		 * 思路:
		 * 	1.從瀏覽器URL中獲取到"/book"字符串
		 * 	2.在子控制器中拿到BookAction
		 * 	3.BookAction.add()
		 */
		String url = req.getRequestURI();
		url = url.substring(url.lastIndexOf("/"), url.lastIndexOf("."));
		//action=BookAction
		ActionSupport action = actions.get(url);
		action.execute(req, resp);
	}
}

 4.2.模型層

 ActionSupport:

package com.tyf.framework; 
import java.lang.reflect.Method;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class ActionSupport implements Action {
 	@Override
	public void execute(HttpServletRequest req, HttpServletResponse resp) {
		String name = req.getParameter("name");	
		try {
			Method m = this.getClass().getDeclaredMethod(name, HttpServletRequest.class,HttpServletResponse.class);
			m.setAccessible(true);
			m.invoke(this, req,resp);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}  
	} 
}

 DispatchServlet:

package com.tyf.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.tyf.web.BookAction; 
/**
 * 
 * 目標(biāo):
 * 	根據(jù)自定義mvc框架的原理圖  完成框架的研發(fā)
 * 
 * 
 * @author Tang  中央控制器
 * 	尋找子控制器
 *
 * 2021年8月30日  下午6:49:35
 */ 
@WebServlet("*.action")
public class DispatchServlet extends HttpServlet {	
	//存放子控制器的容器
	private Map<String , ActionSupport> actions = new HashMap<String , ActionSupport>();
	//初始化子控制器容器(集合),經(jīng)過初始化,action容器內(nèi)部就有了子控制器
	//init(初始化方法),service(服務(wù)),destroy(銷毀)
	@Override
	public void init() throws ServletException {
		actions.put("/book", new BookAction());
	}
 	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//完成子控制器對的過程
		//瀏覽器:http://localhost:8080/J2ee12/book.action?name=add
		//目標(biāo):BookAction.add()...
		/**
		 * 思路:
		 * 	1.從瀏覽器URL中獲取到"/book"字符串
		 * 	2.在子控制器中拿到BookAction
		 * 	3.BookAction.add()
		 */
		String url = req.getRequestURI();
		url = url.substring(url.lastIndexOf("/"), url.lastIndexOf("."));
		//action=BookAction
		ActionSupport action = actions.get(url);
		action.execute(req, resp);
	}
}

  4.3視圖層  

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	目前多數(shù)人增刪改查的代碼:
		<a href="${pageContext.request.contextPath}/book/add" rel="external nofollow" >增加</a>
		<a href="${pageContext.request.contextPath}/book/delete" rel="external nofollow" >刪除</a>
		<a href="${pageContext.request.contextPath}/book/edit" rel="external nofollow" >修改</a>
		<a href="${pageContext.request.contextPath}/book/list" rel="external nofollow" >查詢</a>
	<hr>
	增刪改查的代碼2.0
		<a href="${pageContext.request.contextPath}/book.action?name=add" rel="external nofollow" >增加</a>
		<a href="${pageContext.request.contextPath}/book.action?name=delete" rel="external nofollow" >刪除</a>
		<a href="${pageContext.request.contextPath}/book.action?name=edit" rel="external nofollow" >修改</a>
		<a href="${pageContext.request.contextPath}/book.action?name=list" rel="external nofollow" >查詢</a>
	<hr>
	增刪改查的代碼3.0
		<a href="${pageContext.request.contextPath}/book.action?name=load" rel="external nofollow" >回顯</a>
		<a href="${pageContext.request.contextPath}/book.action?name=ref" rel="external nofollow" >關(guān)聯(lián)</a>
	
</body>
</html>

5、運行結(jié)果

以上就是MVC框架自定義實現(xiàn)過程的詳細(xì)內(nèi)容,更多關(guān)于MVC框架的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解如何在Spring中為@Value注解設(shè)置默認(rèn)值

    詳解如何在Spring中為@Value注解設(shè)置默認(rèn)值

    在Spring開發(fā)中,我們經(jīng)常會遇到需要從配置文件中讀取屬性的情況,@Value注解是Spring提供的一種便捷方式,能夠讓我們輕松地將配置文件中的屬性注入到Spring Bean中,
    2024-10-10
  • Springmvc數(shù)據(jù)格式化原理及代碼案例

    Springmvc數(shù)據(jù)格式化原理及代碼案例

    這篇文章主要介紹了Springmvc數(shù)據(jù)格式化原理及代碼案例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • SpringBoot高級配置之臨時屬性、配置文件、日志、多環(huán)境配置詳解

    SpringBoot高級配置之臨時屬性、配置文件、日志、多環(huán)境配置詳解

    這篇文章主要介紹了SpringBoot高級配置之臨時屬性、配置文件、日志、多環(huán)境配置,本文結(jié)合實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-02-02
  • Java使用自定義注解+反射實現(xiàn)字典轉(zhuǎn)換代碼實例

    Java使用自定義注解+反射實現(xiàn)字典轉(zhuǎn)換代碼實例

    這篇文章主要介紹了Java使用自定義注解+反射實現(xiàn)字典轉(zhuǎn)換代碼實例,注解是一種能被添加到j(luò)ava代碼中的元數(shù)據(jù),類、方法、變量、參數(shù)和包都可以用注解來修飾,注解對于它所修飾的代碼并沒有直接的影響,需要的朋友可以參考下
    2023-09-09
  • Java經(jīng)典排序算法之希爾排序詳解

    Java經(jīng)典排序算法之希爾排序詳解

    這篇文章主要為大家詳細(xì)介紹了Java經(jīng)典排序算法之希爾排序,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • 基于Mybatis的配置文件入門必看篇

    基于Mybatis的配置文件入門必看篇

    這篇文章主要介紹了Mybatis的配置文件入門,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 使用itextpdf解決PDF合并的問題

    使用itextpdf解決PDF合并的問題

    這篇文章主要介紹了使用itextpdf解決PDF合并的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • SpringMVC下實現(xiàn)Excel文件上傳下載

    SpringMVC下實現(xiàn)Excel文件上傳下載

    這篇文章主要為大家詳細(xì)介紹了SpringMVC下實現(xiàn)Excel文件上傳下載,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • java中&和&&的基本區(qū)別與常見的誤用

    java中&和&&的基本區(qū)別與常見的誤用

    &?和&&是Java中用于邏輯運算的兩個運算符,&是按位與和邏輯與兼用的運算符,而&&僅用于邏輯與運算,并具有短路特性,這篇文章主要介紹了java中&和&&的基本區(qū)別與常見的誤用,需要的朋友可以參考下
    2025-02-02
  • java語言實現(xiàn)猜數(shù)字游戲

    java語言實現(xiàn)猜數(shù)字游戲

    這篇文章主要為大家詳細(xì)介紹了java語言實現(xiàn)猜數(shù)字游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05

最新評論

昂仁县| 博爱县| 滕州市| 房产| 南川市| 兰考县| 体育| 浦东新区| 高雄市| 洛川县| 辉南县| 德保县| 岢岚县| 响水县| 蓬溪县| 德庆县| 凭祥市| 美姑县| 白山市| 霍城县| 永新县| 巴林左旗| 邢台县| 察隅县| 吉首市| 临沭县| 集贤县| 张家口市| 邵东县| 如皋市| 馆陶县| 揭阳市| 景洪市| 鲁甸县| 罗甸县| 建湖县| 桂阳县| 宽甸| 和林格尔县| 合作市| 平乡县|