MVC 三层架构「建议收藏」

MVC 三层架构「建议收藏」本文介绍了MVC三层架构的相关内容。。。

大家好,又见面了,我是你们的朋友全栈君。


MVC 三层架构

  • 三层架构即改造了 MVC 以后的架构,也就是 MVC 架构的升级版,MVC 基本结构详见:MVC 模式简介
    在这里插入图片描述

1. 分层简介

  • 通常意义上的三层架构就是将整个业务应用划分为:表示(现)层、业务逻辑层、数据访问层。区分层次是为了贯彻 高内聚低耦合 的思想。
    • 表示(现)层:又称为 Web 层,与浏览器进行数据交互(控制器和视图)。
    • 业务逻辑层:又称为 Service 层,处理业务数据(如 if 判断,for 循环等)。
    • 数据访问(持久)层:又称为 DAO 层(Data Access Object),与数据库进行交互的(每一条(行)记录与 JavaBean 实体对应)。

2. 包目录结构

  • com.company:基本包(公司域名要倒写);
  • com.company.dao:持久层;
  • com.company.service:业务层;
  • com.company.web:表示层;
  • com.company.domain:实体类(JavaBean);
  • com.company.util:工具类。

3. 数据访问层

  • 数据访问(持久)层(DAO 层):操作 domain 中的 JavaBean 和数据库;
  • 常用 JavaBean(都存于 domain 中):
    • PO:Persistent Object 持久对象;
    • POJO:Plain Ordinary Java Object,无规则简单 Java 对象;
    • BO:Business Object 业务对象;
    • VO:Value Object,值对象 / View Object,表现层对象;
    • DTO(TO):Data Transfer Object,数据传输对象;
    • DAO:Data Access Object,数据访问对象。
      在这里插入图片描述

4. 流程图

在这里插入图片描述

5. 综合案例:用户信息列表展示

a. 主要需求

  • 使用 MVC 模式升级版(三层架构)开发代码,完成用户显示列表功能。

b. 需求分析

  • 见上文流程图中的案例。

c. 环境搭建

i. 创建 web 项目

在这里插入图片描述

ii. 导入第三方依赖 Jar 包(JSTL)

MVC 三层架构「建议收藏」0

iii. 创建三层包目录结构

在这里插入图片描述

d. 代码实现

i. index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>${NAME}</title>
</head>
<body>
<h3><a href="${pageContext.request.contextPath}/FindAllServlet">用户列表查询</a></h3>
</body>
</html>

ii. User 实体类(domain)

package com.company.up.domain;

public class User { 
   

    private String id;
    private String name;
    private String sex;
    private Integer age;
    private String address;
    private String qq;
    private String email;

    public User() { 
   
    }

    public User(String id, String name, String sex, Integer age, String address, String qq, String email) { 
   
        this.id = id;
        this.name = name;
        this.sex = sex;
        this.age = age;
        this.address = address;
        this.qq = qq;
        this.email = email;
    }

    public String getId() { 
   
        return id;
    }

    public void setId(String id) { 
   
        this.id = id;
    }

    public String getName() { 
   
        return name;
    }

    public void setName(String name) { 
   
        this.name = name;
    }

    public String getSex() { 
   
        return sex;
    }

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

    public Integer getAge() { 
   
        return age;
    }

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

    public String getAddress() { 
   
        return address;
    }

    public void setAddress(String address) { 
   
        this.address = address;
    }

    public String getQq() { 
   
        return qq;
    }

    public void setQq(String qq) { 
   
        this.qq = qq;
    }

    public String getEmail() { 
   
        return email;
    }

    public void setEmail(String email) { 
   
        this.email = email;
    }
}

iii. FindAllServlet(web)

package com.company.up.web;

import com.company.up.domain.User;
import com.company.up.service.UserService;

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;

@WebServlet("/FindAllServlet")
public class FindAllServlet extends HttpServlet { 
   

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
   
        this.doPost(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
   
        // 1.调用service查询
        UserService userService = new UserService();
        List<User> list = userService.findAll();
        // 2.将list存储request域
        request.setAttribute("list", list);
        // 3.转发list.jsp
        request.getRequestDispatcher("/list.jsp").forward(request, response);
    }

}

iv. UserService(service)

package com.company.up.service;

import com.company.up.dao.UserDao;
import com.company.up.domain.User;

import java.util.List;

public class UserService { 
   

    public List<User> findAll() { 
   
        // 调用dao,查询
        UserDao userDao = new UserDao();
        List<User> list = userDao.findAll();
        return list;
    }
}

v. UserDao(dao)

  • 不包含处理数据库,所以只存测试数据。
package com.company.up.dao;

import com.company.up.domain.User;

import java.util.ArrayList;
import java.util.List;

public class UserDao { 
   

    private static List<User> list = new ArrayList<>();

    static { 
   
        list.add(new User("1", "Regino", "男", 18, "香港", "123456", "123456@qq.com"));
        list.add(new User("2", "Reggie", "男", 19, "扬州", "123436", "123436@qq.com"));
        list.add(new User("3", "Regina", "女", 20, "北京", "223456", "223456@qq.com"));
        list.add(new User("4", "Reginald", "男", 21, "日本", "423456", "423456@qq.com"));
    }

    public List<User> findAll() { 
   
        return list;
    }
}

vi. list.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>list.jsp</title>
</head>
<body>
<%--<c:forEach items="${list}" var="user">
    ${user} <br>
</c:forEach>--%>

<table border="1" cellpadding="0" cellspacing="0" width="500px" align="center">
    <tr>
        <th>编号</th>
        <th>姓名</th>
        <th>性别</th>
        <th>年龄</th>
        <th>地址</th>
        <th>QQ</th>
        <th>邮箱</th>
    </tr>
    <c:forEach items="${list}" var="user">
        <tr align="center">
            <td>${user.id}</td>
            <td>${user.name}</td>
            <td>${user.sex}</td>
            <td>${user.age}</td>
            <td>${user.address}</td>
            <td>${user.qq}</td>
            <td>${user.email}</td>
        </tr>
    </c:forEach>
</table>
</body>
</html>

e. 测试

  • 启动 Tomcat,页面显示:
    在这里插入图片描述
  • 点击链接:
    在这里插入图片描述

原文链接:https://qwert.blog.csdn.net/article/details/105698011

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/153068.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 日本の行政区画–都道府県

    日本の行政区画–都道府県中国の行政区画–省市自治区に類似して、日本の行政区画は都道府県(とどうふけん)である。全部で一都、一道、二府と43県がある。一都(いっと)とは東京都で、日本の政治、経済、文化などの中心である。一道(いちどう)は北海道で、開発が他の土地より遅い。二府(にふ)は、京都府と大阪府で、関西の主な部分で、歴史と経済の面で非常に重要な地区である。日本の県は中国の省に当たり(面積はずっと狭いが)、全部で43県

    2022年7月11日
    28
  • 微信小程序个人心得「建议收藏」

    微信小程序个人心得「建议收藏」昨天看了一下微信小程序官方文档,总结一下自己学习的个人心得.首先从官方文档给的框架说起,微信小程序官方文档给出了app.js,app.json,app.wxss.先从这三个文件说起.app.js这个文件是整个小程序的入口文件,开发者的逻辑代码在这里面实现,同时在这个文件夹里面可以定义全局变量.app.json这个文件可以对小程序进行全局配置,决定页面文件的路径,窗口表现,设置网络超时时间

    2022年9月17日
    0
  • css3颜色渐变_灰色渐变图片

    css3颜色渐变_灰色渐变图片Document*{margin:0;padding:0}.words{font-size:25px;font-weight:700;text-align:center;margin:20px0}div{width:300px;height:150px;margin:0auto10px;border:1pxsolid#ddd;}.box1{background:-webkit-linea…

    2022年10月26日
    0
  • 使用cJSON解析JSON字符串

    使用cJSON解析JSON字符串使用cJSON解析JSON字符串一、为何选择cJSON;二、cJSON的核心结构体;三、解析JSON格式;1,下载源码;2,包含cJSON的源码;3,解析一个键值对;4,解析一个结构体; 5,解析结构体数组的JSON串;附带例程;

    2022年6月29日
    76
  • Pytest(6)重复运行用例pytest-repeat「建议收藏」

    Pytest(6)重复运行用例pytest-repeat「建议收藏」前言平常在做功能测试的时候,经常会遇到某个模块不稳定,偶然会出现一些bug,对于这种问题我们会针对此用例反复执行多次,最终复现出问题来。自动化运行用例时候,也会出现偶然的bug,可以针对单个用例,

    2022年7月28日
    1
  • wireshark解析tcp报文的内容_wireshark解析vxlan

    wireshark解析tcp报文的内容_wireshark解析vxlan在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN,FIN,ACK,PSH,RST,URG.其中,对于我们日常的分析有用的就是前面的五个字段。它们的含义是:SYN表示建立连接,FIN表示关闭连接,ACK表示响应,PSH表示有DATA数据传输,RST表示连接重置。其中,ACK是可能与SYN,FIN等同时使用的,比如SYN和ACK可能同时为1,它表示的就是建立连…

    2022年9月30日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号