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的框架? 可以根据这个图操作

什么是mvc?

? ? index.jsp界面

? ? <a href="${pageContext.request.contextPath}/book/add">新增</a>
?? ?<a href="${pageContext.request.contextPath}/book/delete">删除</a>
?? ?<a href="${pageContext.request.contextPath}/book/edit">修改</a>
?? ?<a href="${pageContext.request.contextPath}/book/list">查询</a>

package com.hmf.web;

import java.io.IOException;

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:模型层(model)?
?* 视图层:(view)?
?* 控制图(controller)

?*
?*
?*自定义mvc:
?*?? ?1.数据库处理Dao ?
?*?? ?2.servlet?
?* ? ? doget/dopost ?基本上用不上doget
?* ? ? 实体类参数接受代码(req.getparammeter(“”))
?* ? ? req.getdispather("/index.jsp").forward(req,resp);
?* ? ? resp.sendredirect("/index.jsp");
?*? ?3.jsp

?* ?
?* ?框架:反射+设计模式(极大的减少了代码量)
?* ? ? 1.通用分页指点+通用的增删改
?* ? ? 2.各层(mc)数据Dao层 控制层代码缩减
?* ? ? 3.前台代码的代码缩减

?*/
@WebServlet("/book.action")
public class BookServlet extends HttpServlet{
?? ?protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
?? ??? ?doPost(req, resp);
?? ?}

}

?运行结果

?自定义mvc原理

少数人采用这种增删改查(servlet层)
?? ?<a href="${pageContext.request.contextPath}/book.action?methodName=add">新增</a>
?? ?<a href="${pageContext.request.contextPath}/book.action?methodName=delete">删除</a>
?? ?<a href="${pageContext.request.contextPath}/book.action?methodName=edit">修改</a>
?? ?<a href="${pageContext.request.contextPath}/book.action?methodName=list">查询</a>

package com.hmf.web;

import java.io.IOException;

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:模型层(model)?
?* 视图层:(view)?
?* 控制图(controller)
?*
?*
?*自定义mvc:
?*?? ?1.数据库处理Dao ?
?*?? ?2.servlet?
?* ? ? doget/dopost ?基本上用不上doget
?* ? ? 实体类参数接受代码(req.getparammeter(“”))
?* ? ? req.getdispather("/index.jsp").forward(req,resp);
?* ? ? resp.sendredirect("/index.jsp");
?* ?3.jsp
?* ?
?* ?框架:反射+设计模式(极大的减少了代码量)
?* ? ? 1.通用分页指点+通用的增删改
?* ? ? 2.各层(mc)数据Dao层 控制层代码缩减
?* ? ? 3.前台代码的代码缩减
?*/
@WebServlet("/book.action")
public class BookServlet extends HttpServlet{
?? ?protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
?? ??? ?doPost(req, resp);
?? ?}
?? ?
?? ?
?? ?protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

?? ??? ? * 优点:代码减少 ?有之前的四个类变成一个类
?? ??? ? * 缺点:每一次新增一个方法,都要改变原有的逻辑

? ? ? ? ? ? ? ? 一般修改时都需要数据回显load

<a href="${pageContext.request.contextPath}/book.action?methodName=load">回显</a>


?? ??? ?String methodName = req.getParameter("methodName");
?? ??? ?if("add".equals(methodName)) {
?? ??? ??? ?add(req,resp);
?? ??? ?}else if("edit".equals(methodName)) {
?? ??? ??? ?edit(req,resp);
?? ??? ?}else if("delete".equals(methodName)) {
?? ??? ??? ?delete(req,resp);
?? ??? ?}else if("list".equals(methodName)) {
?? ??? ??? ?list(req,resp);

?? ??? ?}
?? ?}


?? ?private void delete(HttpServletRequest req, HttpServletResponse resp) {
?? ??? ?System.out.println("bookDao.delete()...");
?? ?}


?? ?private void list(HttpServletRequest req, HttpServletResponse resp) {
?? ??? ?System.out.println("bookDao.list()...");
?? ?}


?? ?private void edit(HttpServletRequest req, HttpServletResponse resp) {
?? ??? ?System.out.println("bookDao.edit()...");
?? ?}


?? ?private void add(HttpServletRequest req, HttpServletResponse resp) {
?? ??? ?System.out.println("bookDao.add()...");
?? ?}
}
?

?

package com.hmf.web;

import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
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:模型层(model)?
?* 视图层:(view)?
?* 控制图(controller)
?*
?*
?*自定义mvc:
?*?? ?1.数据库处理Dao ?
?*?? ?2.servlet?
?* ? ? doget/dopost ?基本上用不上doget
?* ? ? 实体类参数接受代码(req.getparammeter(“”))
?* ? ? req.getdispather("/index.jsp").forward(req,resp);
?* ? ? resp.sendredirect("/index.jsp");
?* ?3.jsp
?* ?
?* ?框架:反射+设计模式(极大的减少了代码量)
?* ? ? 1.通用分页指点+通用的增删改
?* ? ? 2.各层(mc)数据Dao层 控制层代码缩减
?* ? ? 3.前台代码的代码缩减
?*/
@WebServlet("/book.action")
public class BookServlet extends HttpServlet{
?? ?protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
?? ??? ?doPost(req, resp);
?? ?}
?? ?
?? ?
?? ?protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
?? ??? ?/**
?? ??? ? * 优点:代码减少 ?有之前的四个类变成一个类
?? ??? ? *?
?? ??? ? * 缺点:每一次新增一个方法,都要改变原有的逻辑

?? ??? ? * 结论:
?? ??? ? * ?? ?反射可以修复上面改动代码才能解决需求问题的缺陷
?? ??? ? * ?? ?反射代码 ?相当于中央控制器 ?并不是直接处理浏览请求
?? ??? ? * ?? ??? ??? ?处理浏览请求的是子控制器
?? ??? ? */
?? ??? ?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();
?? ??? ?}

?? ??? ?
?? ?
//?? ??? ?if("add".equals(methodName)) {
//?? ??? ??? ?add(req,resp);
//?? ??? ?}else if("edit".equals(methodName)) {
//?? ??? ??? ?edit(req,resp);
//?? ??? ?}else if("delete".equals(methodName)) {
//?? ??? ??? ?delete(req,resp);
//?? ??? ?}else if("list".equals(methodName)) {
//?? ??? ??? ?list(req,resp);
//?? ??? ?}else if("load".equals(methodName)) {
//?? ??? ??? ?load(req,resp);
//?? ??? ?}
?? ?}


?? ?private void load(HttpServletRequest req, HttpServletResponse resp) {
?? ??? ?System.out.println("bookDao.load()...");
?? ?}


?? ?private void delete(HttpServletRequest req, HttpServletResponse resp) {
?? ??? ?System.out.println("bookDao.delete()...");
?? ?}


?? ?private void list(HttpServletRequest req, HttpServletResponse resp) {
?? ??? ?System.out.println("bookDao.list()...");
?? ?}


?? ?private void edit(HttpServletRequest req, HttpServletResponse resp) {
?? ??? ?System.out.println("bookDao.edit()...");
?? ?}


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

?? ?}
}
?

?<%@ 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>
大多人数开发增删改查 (servlet层)
?? ?<a href="${pageContext.request.contextPath}/book/add">新增</a>
?? ?<a href="${pageContext.request.contextPath}/book/delete">删除</a>
?? ?<a href="${pageContext.request.contextPath}/book/edit">修改</a>
?? ?<a href="${pageContext.request.contextPath}/book/list">查询</a>

<hr>
少数人采用这种增删改查(servlet层)
?? ?<a href="${pageContext.request.contextPath}/book.action?methodName=add">新增</a>
?? ?<a href="${pageContext.request.contextPath}/book.action?methodName=delete">删除</a>
?? ?<a href="${pageContext.request.contextPath}/book.action?methodName=edit">修改</a>
?? ?<a href="${pageContext.request.contextPath}/book.action?methodName=list">查询</a>

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

</body>
</html>

结束啦 好累? 拜拜 下期再见

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-09-02 11:40:46  更:2021-09-02 11:41:39 
 
开发: 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年5日历 -2024/5/14 15:13:10-

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