IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> 自定义MVC框架 -> 正文阅读

[开发测试]自定义MVC框架

思维导图

一、自定义MVC

1.什么是MVC?

MVC全名:Model View Controller,其中Model(模型层)、View(视图层)、Controller(控

层)它是一种软件设计典范,用于业务逻辑处理、数据、界面显示分离,

2、三层架构和MVC的区别?

三层架构是一个经典的分层思想,将开发模式分为三层,每个人专注自己擅长模块即可

MVC是一种设计模式,其目的是让视图和业务逻辑分开

3、MVC结构?

? ?①、?V(视图层) -->JSP/HTML/freemarker

? ?②、 C(控制层) -->Servlet/Action/Controller

? ?③、M(模型层) -->entity、dao

注:(1)不能跨层调用;
? ? ? ?(2)只能由上往下进行调用;View -> Controller -> Model

4、自定义MVC工作原理图

? ? ? ? ? ? ? *.action ? ? ? ? ? 调度 ? ? ? ? ? 截取*(请求路径名) 处理具体业务逻辑
? ?JSP ---------> Servlet(中央控制器)--------------------->Action(子控制器)--->Model(Dao、DB)

5 之前的开发模式

①、 绝大多数人采用这种方法做增删改查,需要多少个servlet就建多少

package com.mwy.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/book/add")
public class AddBookServlet 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 {
		
		System.out.println("--Add增加--");
		
	}

}

//jsp界面
绝大多数人采用这种方法做增删改查(select层)
<a href="${pageContext.request.contextPath }/book/add">新增</a>
<a href="${pageContext.request.contextPath }/book/del">删除</a>
<a href="${pageContext.request.contextPath }/book/upd">修改</a>
<a href="${pageContext.request.contextPath }/book/list">查询</a>

②、少数人采用这种方法做增删改查(select层)

package com.mwy.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;
@WebServlet("/book.action")
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 {

		String methodName = req.getParameter("methodName");
		if("add".equals(methodName)) {
			add(req,resp);
		}else if("del".equals(methodName)){
			del(req,resp);
		}else if("upd".equals(methodName)){
			upd(req,resp);
		}else if("list".equals(methodName)){
			list(req,resp);
		}else if("load".equals(methodName)){
			load(req,resp);
		}
	}

	private void list(HttpServletRequest req, HttpServletResponse resp) {
		System.out.println("--查询--");
		
	}

	private void upd(HttpServletRequest req, HttpServletResponse resp) {
		System.out.println("--修改--");
		
	}

	private void del(HttpServletRequest req, HttpServletResponse resp) {
		System.out.println("--删除--");
		
	}

	private void add(HttpServletRequest req, HttpServletResponse resp) {
		System.out.println("--增加--");
		
}

jsp界面
少数人采用这种方法做增删改查(select层)
<a href="${pageContext.request.contextPath }/book.action?methodName=add">新增</a>
<a href="${pageContext.request.contextPath }/book.action?methodName=del">删除</a>
<a href="${pageContext.request.contextPath }/book.action?methodName=upd">修改</a>
<a href="${pageContext.request.contextPath }/book.action?methodName=list">查询</a>

③、反射优化

package com.mwy.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;
/**
 * 为什么要学习自定义MVC框架?关键词:自定义MVC  框架
 * 之前的开发模式:
 * MVC:模型层(Model)视图层(View)控制层(controller)
 * mvc怎么出现的:各司其职
 *编码:实体类。数据处理Dao、servlet、jsp   代码量多了
 *
 *自定义MVC
 *分析:
 *1、数据处理Dao   代码思路基本重复(前几次讲到)
 *2、servlet       代码思路基本重复
 *2.1、doget/dopost,实际上doGet基本用不上
 *2.2、实体类参数接受代码冗余(req.getParammeter(""),尤其当实体类属性多的情况)
 *2.3、关于结果页面的跳转(转发、重定向)
 *     req.getdispather(/index.jsp).forward(req,resp);
 *     resp.sendredirect(/index.jsp);
 *3、jsp   代码思路基本重复(HTML、JS前几次讲到)
 *解决方案
 *1、通用分页(讲过的)、单表的增删改(优化)
 *2、servlet不需要写冗余的代码->自定义mvc框架
 *3、自定义jsp标签
 *框架:反射+设计模式(极大地减少了代码量,把重复性的代码给框架完成,让程序员关注点放在项目业务)
 *1、通用分页指点+通用的增删改
 *2、各层(MC)数据Dao层、控制层代码缩减
 *3、前台代码的缩减优化
 */
@WebServlet("/book.action")
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 {
		/**
		 * 优点:相交于前一种,代码量时间少的,由原来4个类变成了1个类
		 * 缺点:
		 * 每一次新增一个方法,都要改动原有逻辑,使代码过于冗余
		 * 举例:一般当修改的时候,需要做数据回显load
		 * 思考:
		 * 不改动原有逻辑,也能实现需求
		 * 解决方案:
		 * 调用哪个方法,实际上是取决于methodName,加if不是必要条件
		 * 直白一点:动态调用methodName方法,并且是当前类实例的methodName方法
		 * 总结:
		 * 反射可以修复上面改动代码才能解决需求问题缺陷
		 * 反射这段代码,相当于中央控制器,并不直接处理浏览器请求
		 *    处理浏览器请求的是子控制器
		 */
		
		String methodName = req.getParameter("methodName");
		try {
			Method m = this.getClass().getDeclaredMethod(methodName, HttpServletRequest.class,HttpServletResponse.class);
			m.setAccessible(true);
			m.invoke(this,req, resp);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private void load(HttpServletRequest req, HttpServletResponse resp) {
		System.out.println("--回显--");
		
	}

	private void ref(HttpServletRequest req, HttpServletResponse resp) {
		System.out.println("--ref--");
		
	}

}

jsp界面
反射优化
<a href="${pageContext.request.contextPath }/book.action?methodName=load">回显</a>
<a href="${pageContext.request.contextPath }/book.action?methodName=ref">关联查询</a>

①、②、③最终出现结果

还没有写完哦~~在等等

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-08-27 12:10:10  更:2021-08-27 12:10:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/17 22:14:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码