mvc设计模式与三层架构

三层架构及设计模式(抽象工厂实现) 三层架构及设计模式(抽象工厂实现)<br><br> 1. 三层架构实现,把表现层(WebUI)与数据访问层(DAL)分开,使用业务逻辑进行处理(BLL), 避免了把数据信息暴露在表现层, 从而提供了程序的性能,使用业务逻辑处理与表现层进行交互,<br> 把表现层的需求,通过业务逻辑处理,把信息传递给数据访问层进行加工,把加工好的信息,从过业务逻辑又传回表现层, 在整个过程中,业务逻辑层起了中间桥梁作用。在业务逻辑层中, 不能<br> 出现AD0.net 和sql语句的实现。<br> 2. 抽象工厂设计模式,增加了程序之间的开发一致性,保证数据库变化, 不影响程序之间的变化,任何一个层之间变动,都不会影响到正个程序的变化,只需改变其中的一层。 立即下载

mvc与三层架构 

1.什么是mvc设计模式

写Java Web项⽬时会发现,一个中型或者大型项目随着代码的增多,会发现:代码既可以写在src目录下,也可以写在WebContent目录下。
src下可以建很多包,WebContent下可以建很多文件夹。
所以问题就来了:一个新的类到底往哪个目录下的哪个文件夹里写?
此时解决办法就是:需要一个模式去规范,到底哪个类该往哪里写

M:(Model) 模型 : 应用程序的核心功能,管理这个模块中用的数据和值(bean,dao); 

V(View )视图: 视图提供模型的展示,管理模型如何显示给用户,它是应用程序的外观(jsp/html)

C(Controller)控制器: 对用户的输入做出的反应,管理用户和视图的交互,也是连接模型和视图的枢纽(servlet/service)
MVC用于将web(UI)层进行职责解耦
说明:mvc设计模式(不属于23种设计模式)

2.三层架构 

 3.三层架构和MVC的区别与联系

准备工作

1.包结构

2.导入jar包

配置Tomcat 

 简化地址栏信息

工具类util:DruidUtil

package util;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import javax.xml.transform.Result;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class DruidUtil {

    private static DataSource ds;
    static{
        try {
            Properties ppt = new Properties();
            ppt.load(DruidUtil.class.getClassLoader().getResourceAsStream("druid.properties"));
            ds = DruidDataSourceFactory.createDataSource(ppt);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    /**
     * 从连接池中取出一个连接给用户
     * @return
     */
    public static Connection getConnection(){
        try {
            return ds.getConnection();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return null;
    }


    public static void close(Connection conn, Statement state, ResultSet rs){
        try {
            rs.close();
        } catch (Exception throwables) {
            throwables.printStackTrace();
        }
        try {
            state.close();
        } catch (Exception throwables) {
            throwables.printStackTrace();
        }
        try {
            conn.close();
        } catch (Exception throwables) {
            throwables.printStackTrace();
        }
    }
}

属性配置文件 druid.properties

url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8
username=root
password=123456
driverClassName=com.mysql.jdbc.Driver
initialSize=5
maxActive=10
minIdle=5
maxWait=3000

 一个请求的流程

一:MVC之Model开发

 beam包:实体类Student

package bean;
//实体类包=主要存放数据库对应的实体类
//类名=表名
//列名=属性名
//实体类包括:属性,构造方法(无参,全参),setter/getter
//属于Model(M)
public class Student {
    private Integer stuid;
    private String stuname;
    private Integer age;
    private String sex;
    //无参构造方法
    public Student() {
    }
    //全参构造方法
    public Student(Integer stuid, String stuname, Integer age, String sex) {
        this.stuid = stuid;
        this.stuname = stuname;
        this.age = age;
        this.sex = sex;
    }

    public Integer getStuid() {
        return stuid;
    }

    public void setStuid(Integer stuid) {
        this.stuid = stuid;
    }

    public String getStuname() {
        return stuname;
    }

    public void setStuname(String stuname) {
        this.stuname = stuname;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "Student{" +
                "stuid=" + stuid +
                ", stuname='" + stuname + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                '}';
    }
}

dao包:StudentDao接口

package dao;

import bean.Student;

import java.util.List;

//实体类名+Dao=当前类名
public interface StudentDao {
    //定义操作数据库的方法
    //查询全部方法
    public List<Student> getAll();
}

dao包:impl子包: StudentDaoImpl接口实现类

package dao.impl;

import bean.Student;
import dao.StudentDao;
import util.DruidUtil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
//接口名+impl=当前类名
public class StudentDaoImpl extends DruidUtil implements StudentDao {
    @Override
    public List<Student> getAll() {
        Connection connection =null;
        PreparedStatement preparedStatement =null;
        ResultSet resultSet=null;
        List list=new ArrayList();
        try {
            connection = getConnection();
            preparedStatement = connection.prepareStatement("select * from  student");
            resultSet=preparedStatement.executeQuery();
            while (resultSet.next()){
                Student student = new Student();
                student.setStuid(resultSet.getInt("stuid"));
                student.setStuname(resultSet.getString("stuname"));
                student.setAge(resultSet.getInt("age"));
                student.setSex(resultSet.getString("sex"));
                list.add(student);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            close(connection,preparedStatement,resultSet);
        }
        return list;
    }
}

二:MVC之Controlle开发

service包 :StudentService接口

package service;

import bean.Student;

import java.util.List;

//bean类名+Service=当前类名
//Service层主要定义业务逻辑,现阶段主要实现调取dao层
public interface StudentService {
    //查询全部方法
    public List<Student> getAll();
}

service包 :impl子包:StudentServiceImpl接口实现类

package service.impl;

import bean.Student;
import dao.StudentDao;
import dao.impl.StudentDaoImpl;
import service.StudentService;

import java.util.List;

public class StudentServiceImpl implements StudentService {
    private StudentDao studentDao=new StudentDaoImpl();
    @Override
    public List<Student> getAll() {
        return studentDao.getAll();
    }
}

servlet包 :StudentServlet处理类处理请求

package servlet;

import bean.Student;
import service.impl.StudentServiceImpl;

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 java.io.IOException;
import java.util.List;

//C -controller 控制层
@WebServlet(urlPatterns = "/getstus")
public class StudentServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //接参数(接收请求参数)

        //写逻辑(调取service层方法)
        StudentServiceImpl studentService=new StudentServiceImpl();
        List<Student> getAll=studentService.getAll();
        //返结果(跳转页面)
        //后台传递数据给前台
        req.setAttribute("stulist",getAll);
        req.getRequestDispatcher("/show.jsp").forward(req,resp);
    }
}

 三:MVC之View开发

index.jsp页面  

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <title>$Title$</title>
</head>
<body>
<a href="getstus">查询学生列表</a>
</body>
</html>

 show.jsp页面

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>show.jsp</h1>
<table border="" width="500px" bgcolor="aqua">
    <tr>
        <td>id</td>
        <td>name</td>
        <td>age</td>
        <td>sex</td>
    </tr>
    <c:forEach items="${stulist}" var="stu">
        <tr>
            <td>${stu.stuid}</td>
            <td>${stu.stuname}</td>
            <td>${stu.age}</td>
            <td>${stu.sex==1?"男":"女"}</td>
        </tr>
    </c:forEach>
</table>
</body>
</html>

测试结果 

 

前后端分离技术(了解)

 

 

Navicat从入门到精通:数据库管理全攻略 本文系统梳理Navicat数据库管理工具的核心应用体系。从基础的安装与多类型数据库连接入手,详解数据库与数据表的创建、修改、删除等操作逻辑;深入数据增删改查的可视化与 SQL 语句双重操作模式,结合Excel/SQL文件的导入导出场景提供实操指南。同时覆盖数据备份恢复、跨库同步等进阶功能,以及视图、存储过程等高级应用。通过对比同类工具突出Navicat的易用性与功能性优势,并针对连接失败、字符乱码等常见问题提供解决方案,帮助读者从零基础掌握数据库全生命周期管理,提升数据操作效率与安全性。 阅读详情

相关推荐

VSCode玩转STM32:手把手教你配置EIDE插件与OpenOCD调试(附野火DAP配置文件详解)

本文详细介绍了如何在VSCode中配置EIDE插件与OpenOCD进行STM32开发,特别针对野火DAP调试器提供了配置文件详解。从基础环境搭建到深度调试技巧,帮助开发者高效完成STM32项目开发,实现现代化嵌入式开发工作流。

weixin_26905487的博客 553

MVC

什么是 MVC 模式 MVC,即 Model 模型、View 视图,及 Controller 控制器。 View:视图,为用户提供使用界面,与用户直接进行交互。 Model:模型,承载数据,并对用户提交请求进行计算的模块。其分为两类,一类称为数据承载 Bean,一类称为业务处理 Bean。所谓数据承载 Bean 是指实体类,专门用于承载业务数据的,如 Student、User 等...

weixin_43739465的博客 1250

MCU启动流程详解

在MCU启动后,系统从flash主存储区开始执行,先将0x08000000地址存放的堆栈栈顶指针赋给SP寄存器,将0x08000004地址存放的Reset_Handler复位向量地址赋给PC寄存器跳转执行系统复位,期间执行System_Initializes函数配置系统时钟,重定位向量表,执行MDK自带库函数__main将RW、ZI数据段从Flash加载到RAM,并跳转至_rt_entry进行Stack和Heap的初始化,最后跳转到熟悉的main函数。

weixin_50827397的博客 1505

设计模式---结构型UML 和 行为型UML

一、UML图的基本知识 这里介绍比较常用的几种UML图: 结构型UML: 1. 类图 类图共三层,分别是: 类的名称,如果是抽象类,则为斜体显示 类的特性,通常是字段或属性 类的操作,通常是方法或行为 其中“+”表示public,“-”表示private,“#”表示protected 如果是接口的话,在类名上方有<>字样 七种类之间的关系 1. 关联:实线箭头,表示 成员变量 是一种拥有的关系,它使一个类知道另一个类的属性和方法 【代码体现】:成员变量.

mike_jun的博客 2056

Amos实战:如何用Bootstrap法检验中介效应?附完整操作步骤

本文详细介绍了如何使用Amos软件通过Bootstrap法检验中介效应,包括模型设定、参数配置和结果解读。Bootstrap方法因其不依赖正态分布假设、统计功效高等优势,成为中介效应分析的首选方法。文章提供了完整的操作步骤和实用建议,帮助研究者准确评估变量间的中介作用机制。

zz67890的博客 1441

GNSS接收机性能测试全攻略:从实验室到真实场景

本文系统介绍了GNSS接收机从实验室到真实场景的完整性能测试流程。首先通过GNSS模拟器进行射频传导测试,评估接收机的基础性能;其次进行天线OTA测试,考察整机系统表现;最后通过精心设计的外场路测,在复杂环境中验证其实际定位精度与可靠性。文章强调,只有结合可控的实验室验证与多变的外场挑战,才能对接收机性能做出全面、真实的评价。

weixin_28365523的博客 518

MVC三层架构

MVC(Model-View-Controller)是一种常见的软件设计模式,用于组织和管理应用程序的代码和逻辑。- 模型通常包括数据模型(用于表示数据结构)、业务逻辑(用于处理数据操作和业务规则)以及数据访问层(用于与数据库或其他数据源进行交互)。需要注意的是,MVC是一种设计模式,可以在不同的编程语言和框架中实现。- 控制器接收用户的请求,根据请求调用适当的模型操作,并更新相应的视图来显示结果。- 控制器是模型和视图之间的中介,负责处理用户的输入、协调模型和视图之间的交互。

jmqxnxg的博客 2215

PTA 编程题(C语言)-- 然后是几点

PTA 编程题(C语言)-- 然后是几点

LCCprogrammer 5079

跟着项目学设计模式(六):三层架构

前面用5个章节介绍了单例模式和工厂系列模式,这个过程中,如果算上网站开发人员的表示层,那么项目经历了二层到多层的演变: 数据访问层+表示层 =》 数据访问层+业务逻辑层+Client层+表示层 至此,这个系列中对创建型设计模式的介绍也到此为止了。后面的文章,我们会把关注点放到具体的代码实现上,比如层与层之间如何调用,工厂模式与抽象工厂在代码实现上的异同等等,这里面会涉及到很多结构型设计模式相...

开心程序员的博客 2979

[pytorch]FixMatch代码详解(超详细)

FixMatch代码详解-训练过程参数数据产生构建模型训练参数设置weight decay(权值衰减)学习率衰减(learning rate decay)指数移动平均(EMA)model训练过程运行结果 上一篇大概讲了数据加载的过程,这一篇更进一步,分析一下训练是怎样进行的 上一篇链接: [pytorch]FixMatch代码详解-数据加载 参数 所有的参数我都默认使用作者给出的例子: python train.py --dataset cifar10 --num-labeled 4000 --arch w

qq_38736504的博客 1万+

触摸芯片RM1015B基本使用方法

RM1015B触摸芯片使用指南:该芯片采用4通道设计(实际使用3通道),通过I2C接口通信(设备地址0x2B)。硬件设计需注意中断/复位引脚复用,需上拉处理。软件配置包括初始化、中断处理和定时器扫描,通过设置各通道阈值(0-300W)调节灵敏度,值越小越灵敏。调试时可调用rm1015B_debug_func()输出波形数据。典型应用场景包括接近检测和手势识别,中断触发后需在8ms内响应。特别注意不同通道的寄存器映射关系及校准流程,确保检测准确性。

云淡风轻 178

SSM,三层结构,MVC三者的说明及关系(很全面)

三层架构 三层架构是指:视图层view(表现层),服务层service(业务逻辑层),持久层Dao(数据访问层), 它们的功能是: 1.view层: 用于显示数据和接收用户输入的数据,为用户提供一种交互式操作的界面。主要作用是界面展示,接收请求,分发请求。 2.service层:实现业务的主要逻辑,是系统架构中体现核心价值的部分。将一个业务中所有的操作封装成一个方法,同时保证方法中所有的数据库更新操作,即保证同时成功或同时失败。避免部分成功部分失败引起的数据混乱操作。 3.Dao层:也称为是持久层,其功

Tranne的博客 8万+

轻量化部署实战:C#上位机集成AI模型的3种方案深度对比(ML.NET/ONNX/TensorFlow.NET)

C#上位机部署AI模型,核心不是“选最强大的方案”,而是“选最适配的方案”——工控机的低配置、高稳定性需求,决定了“轻量化”和“部署简单”是选型的首要原则。回顾3种方案:ML.NET:原生、轻量化、零依赖,适合传统ML场景,低配置工控机首选;ONNX Runtime:通用、平衡、易落地,适合深度学习场景,工业落地首选;TensorFlow.NET:强大、灵活、纯C#,适合复杂模型,高配置工控机首选。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 364

聊一聊耳熟能详的MVC设计模式与三层架构

简述MVC设计模式和三层架构的组成,建议一种项目分层的解决方案。

丹丹的后花园 6762

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

MVC设计模式与JavaWeb的三层架构

MVC设计模式将软件程序分为3个核心模块:模型(Model)、视图(View)和控制器(Controller),这3个模块的作用如下所示。M:模型V:视图C:控制器View(表现层):Service(业务逻辑)层:DAO(Data Access Object,数据访问对象)层:view层所在包一般命名如下Service层所在包一般命名如下Dao层所在包一般 JavaWeb包的命名controller、service、dao、entity.........

baiqi123456的博客 1813

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Javaweb mvc设计模式与三层架构

MVC设计模式与三层架构 什么是Web MVC设计模式? mvc指的是m(model 模型) v(view 视图) c(controller 控制器)三个模块组成的代码项目。它规定了一种Javaweb的编程规范。 在Web MVC模式下,模型无法主动推数据给视图,如果用户想要视图更新,需要再发送一次请求(即请求-响应模 型)。 M(Model) 模型 : 应用程序的核心功能,管理这个模块中用的数据和值(bean,dao); V(View )视图: 视图提供模型的展示,管理模型如何显示给用户,它是应用程序

小唐同学的博客 2273

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

三层架构以及MVC设计模式

总体来说,表现层就相当于餐厅里服务员,用于展示给顾客用户菜品信息以及提供将消息传达给厨师的入口而业务逻辑层相当于厨师,用于将采购员买来的原材做为顾客需要的菜品然后通过服务员返还给顾客用户最后采购员负责管理购买各类食材供厨师使用。

Pillow_Monkey的博客 1064

三层架构与mvc设计模式

三层架构与mvc设计模式,并不是一个概念    三层架构是一个分层式的软件体系架构设计,它可适用于任何一个项目。    MVC是一个设计模式,它是根据项目的具体需求来决定是否适用于该项目。    那么架构跟设计模式有什么区别呢?我们从接手一个项目开始,首先,我们需要进行架构设计,一般我们采用的就是分层式的架构设计,即我们的三层架构。然后,在确定了架构以后,我们再根据项目的具体需求去考虑是否需要应用...

yjz_sdau的博客 1990

区分MVC设计模式与JavaWeb三层架构

区分MVC设计模式与JavaWeb三层架构 MVC的理解   所谓的mvc设计模式就是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计思想, 强制性的把应用程序的输入、处理和输出分开。 MVC中的模型、视图、控制器它们分别担负着不同的任务。   1.视图(view): 视图是用户看到并与之交互的界面。视图向用户显示相关的数据,并接受用户的输入。例如大家熟悉的...

Web小笨猪的博客 1613

MVC设计模式&三层架构的介绍及关联

1. 什么是MVC设计模式? 核心思想:将业务逻辑,数据和显示相分离的一种思想,让每一部分都专注于做自己的事情。 M:model 模型 封装数据 封装对数据的操作 javaBean V:view 视图 展示数据(主要使用jsp) jsp C:controller 控制 接受请求并响应 servlet 作用:MVC对程序的后期维护和扩展提供了方便,并且对程序某些部分的重用提供了方便。而且MVC也使程序简化,更加直观。 2. MVC框架的工作流程? 用户通过Vi

ggh0314的博客 1247

MVC设计模式和三层架构

JavaEE设计模式 1.传统设计模式(现在几乎不再使用): Jsp + javaBean, JavaBean用来对应数据库中的表,jsp负责显示界面、接受请求、处理业务、访问数据库。 弊端: 业务多时,导致jsp页面容易混乱,开发效率低 2.MVC设计模式 Jsp + servlet + javaBean Model à javaBean à 封装数据(对应数据库中的表...

weixin_30530939的博客 257

JSP中MVC设计模式+三层架构设计思想

MVC设计模式 + 三层架构应用1. MVC 设计模式2. 案例:用户管理实现2.1 注册2.2 登陆2.3 注销2.4 修改2.5 删除2.6 批量删除 1. MVC 设计模式 MVC 设计模式核心概念: ● Model 模型层,数据封装 ● View 视图层,数据可视 ● Controller 控制层,请求处理 + 业务处理 + 数据库操作 缺点:控制层代码太多,违背单一职责原则,因此...

Hello, New World! 2011

三层架构,MVC设计模式

Java中的编程模式 模式一:jsp+javaBean 以jsp为中心的模式,jsp主要负责: 1:界面输出 2:参数获取 3:调用处理业务方法 4:跳转页面 JavaBean主要负责: 1:数据的封装 优点:超小型的项目开发速度很快 缺点:在jsp中存在大量Java代码,分工不明确 模式二:jsp+javaBean+servlet jsp负责: ...

weixin_45690533的博客 264

MVC设计模式和与三层架构的关系

MVC设计模式和与三层架构的关系

相关项目可以查看https://gitee.com/fan-pl或https://github.com/fpl1116 693

架构(三层架构)、框架(MVC)、设计模式三者异同点

前言: 本博客主要针对架构、框架和设计模式三者的区别、还有三层和MVC的区别进行讨论、对于这三者一点都不了解的、请点在维基和百度百科上补补课、这里就不发链接了 软件架构(software architecture) 软件的架构是系统的一个草图、阐述了各个组件之间的通讯、划分层次、一旦系统开始详细设计、架构蓝图就很难甚至无法更改、是...

335

三层架构和mvc设计模式的区别

网上很多文章都一大段一大段解释三层架构和mvc设计模式的区别,总是理论理论,还有一些人甚至自己都无法理解两者区别就照搬别人的帖子....... 这里我用通俗的语言解释一下: j2ee三层架构和mvc设计模式的区别:在做企业应用开发项目时候,采用三层架构:表示层,业务逻辑层,数据持久层。表示层负责接收用户请求、转发请求、显示数据等;业务层负责组织业务逻辑;持久层负责持久化业务对象。 补充...

qq_42085534的博客 915
上一篇: 过滤器与监听器
下一篇: 多表操作实例
continueLR
博客等级 码龄6年 9粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值