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架构编写

作者:language-java
Java Web 项?时会发现,?个中型或者?型项? 随着代码的增多,会发现:代码既可以写在 src ?录
下,也可以写在 WebContent ?录下。 src 下可以建很多包 , WebContent 下可以建很多?件夹。
所以问题就来了:?个新的类 到底往哪个?录下的哪个?件夹?写?
此时解决办法就是:需要?个模式去规范,到底哪个类该往哪?写。
MVC提供了这样的标准
MVC分为三层:
M (Model) 模 型 : 应?程序的核?功能,管理这个模块中?的数据和值( bean,dao );
V(View ) 视图 : 视图提供模型的展示,管理模型如何显示给?户,它是应?程序的外观( jsp/html
C(Controller) 控制器 : 对?户的输?做出反应,管理?户和视图的交互,是连接模型和视图的枢纽。 (servlet/service
MVC ?于将 web UI )层进?职责解耦
注??:? ?mvc 设计模式 不属于 23 种设计模式
为了对MVC有一个简单的理解,以查询学生信息的方式进行一个简单的MVC模式的编写。

一、创建web项目?

这里用Tomcat进行服务器的配置。

web项目创建完成后就可以开始我们的程序了。

二、前期准备

引入jar包以及连接数据库的工具类和配置文件

jar包:

?工具类:

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();
        }
    }
}

工具类所需连接数据库的配置文件:

提醒一下:这里的配置信息是Mysql8.0版本,若是其他版本,配置信息可能不同。

数据库中提前创建好数据表

三、编写后台程序

先定义好各个包,包括Bean包、Dao包、Service包、Servlet包以及工具包。

1.首先编写Bean包的实体类——Student类,包含四个属性(与数据库中数据及列相同)

类名与表名相同,属性名与列名相同。

public class student {

    private Integer stuid;
    private String stuname;
    private Integer age;
    private Integer sex;

    public student() {
    }

    public student(Integer stuid, String stuname, Integer age, Integer 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 Integer getSex() {
        return sex;
    }

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

2.编写操作数据库的Dao包

先定义一个接口,规定一个获取所有学生信息的方法,返回一个含有多个学生对象的List集合

public interface studentDao {

    public List<student> getAll();
}

再创建一个类去实现本接口,将该类放在Dao包下的Impl包中,类中去数据库中查询所有学生信息并返回,利用循环将信息存入实体类Student的对象中,并将每个对象存入List集合,最后返回List集合。注:这个实现类因为是直接操作数据库,所以为了方便,继承数据库操作工具类DruidUtil类

package wly.Dao.Impl;

import wly.Bean.student;
import wly.Dao.studentDao;
import wly.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;

/**
 * @author: 王龙源
 * @Description:
 * @date Created in: 2021-06-28 11:28
 * @Modified By:
 */
public class studentDaoImpl extends DruidUtil implements studentDao {
    @Override
    public List<student> getAll() {
        List<student> list = null;
        Connection connection = null;
        PreparedStatement pps = null;
        ResultSet resultSet = null;
        try {
            connection = getConnection();
            pps = connection.prepareStatement("select * from student");
            resultSet = pps.executeQuery();
            list = new ArrayList<>();
            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.getInt("sex"));
                list.add(student);
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            close(connection,pps,resultSet);
        }
        return list;
    }
}

Dao包编写完毕。

3.编写Service包

与Dao包类似,先定义接口,在定义实现类,Service中没有实际操作,只是简单呈现MVC模式,在该实现类中去引用Dao实现类的方法即可。

接口:

public interface studentService {

    public List<student> getAll();
}

实现类:

public class studentServiceImpl implements studentService {

    private studentDaoImpl studentDao = new studentDaoImpl();

    @Override
    public List<student> getAll() {
        return studentDao.getAll();
    }
}

4.编写Servlet包

Servlet需要做的是引用Service去获得含有所有学生信息的List集合,并将其存入req请求中,然后跳转到show.jsp页面去展示该数据。(show.jsp页面的编写稍后再说)

代码如下:注:query为自定义的请求名,在前台的首页中定义一个超链接表示查询所有学生信息,请求名为:query。

<a href="query">查询学生信息</a>

@WebServlet(urlPatterns = "/query")
public class studentServlet 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 {
        studentServiceImpl studentService = new studentServiceImpl();
        List<student> all = studentService.getAll();
        //存储数据到req中
        req.setAttribute("List",all);
        //携带着数据跳转页面
        req.getRequestDispatcher("show.jsp").forward(req,resp);
    }
}

5.工具包Util包

该包下放连接数据库的工具类DruidUtil。

至此,所有的类已编写完毕,后台数据的处理以及各个类之间的关系也明了。

接下来进行展示页面show.jsp页面的编写。

四、展示页面show.jsp

原页面中的请求,在后台添加进了含有所有学生信息的数据并跳转到当先show.jsp页面,当先要做的是循环取出各个学生的信息,因为要使用到ava代码,所以这里需要使用JSTL和EL表达式。相关的工具jar包我们之前已经引入,这里直接进行编写即可。

定义表格,创建第一行名称行后,之后利用JSTL的c:forEach循环取值,item表示被循环的对象,var表示循环中单个对象,最后利用EL表达式在行中一个一个展现出学生信息即可。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>学生信息</title>
</head>
<body>
<table border="1" width="500px" bgcolor="red">
    <tr>
        <td>stuid</td>
        <td>stuname</td>
        <td>age</td>
        <td>sex</td>
    </tr>
    <jsp:useBean id="List" scope="request" type="java.util.List"/>
    <c:forEach items="${List}" var="stuent">
        <tr>
            <td>${stuent.stuid}</td>
            <td>${stuent.stuname}</td>
            <td>${stuent.age}</td>
            <td>${stuent.sex == 1?"男":"女"}</td>
        </tr>
    </c:forEach>
</table>
</body>
</html>

完成

最后的实现效果:

且可以实现动态更新,只要数据库中的数据出现变化,该页面所呈现的信息也会发生变化。

至此,所有的步骤已完成,利用MVC的模式来编写程序,展现“高内聚,低耦合”的特点,MVC也达到了解耦的功能,对后续的维护和修改提供了很大便利,这就是MVC模式的好处之一。

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

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