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

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

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

1、思維導(dǎo)圖

2、什么是MVC?

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

3、運(yùn)行原理

用戶發(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ā)送改變,或者新增需求的時(shí)候,需要改動(dòng)下面代碼
		 * 
		 * 解決方案:
		 * 		前臺(tái)傳遞name到后臺(tái),實(shí)際就是想要調(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、運(yùn)行結(jié)果

以上就是MVC框架自定義實(shí)現(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)常會(huì)遇到需要從配置文件中讀取屬性的情況,@Value注解是Spring提供的一種便捷方式,能夠讓我們輕松地將配置文件中的屬性注入到Spring Bean中,
    2024-10-10
  • Springmvc數(shù)據(jù)格式化原理及代碼案例

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

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

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

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

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

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

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

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

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

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

    使用itextpdf解決PDF合并的問題

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

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

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

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

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

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

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

最新評論

班戈县| 武隆县| 通城县| 莱芜市| 舟曲县| 柏乡县| 同江市| 宁夏| 石狮市| 唐河县| 开平市| 北辰区| 固阳县| 巴楚县| 花垣县| 萝北县| 刚察县| 巴林右旗| 神农架林区| 那坡县| 台北县| 新竹市| 厦门市| 高清| 肥城市| 界首市| 涟源市| 资中县| 耒阳市| 商河县| 许昌市| 静安区| 海口市| 文安县| 瑞丽市| 阜城县| 辽源市| 玉环县| 垣曲县| 汾西县| 化隆|