MVC模式的代码案例

MVC设计模式就是一种规范。
Web MVC中的M(模型)-V(视图)-C(控制器)概念和标准MVC概念⼀样,我们再看⼀下Web MVC标准架构,

 

在Web MVC模式下,模型⽆法主动推数据给视图,如果⽤户想要视图更新,需要再发送⼀次请求(即请求-响应模型)。

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

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

C(Controller)控制器: 对⽤户的输⼊做出反应,管理⽤户和视图的交互,是连接模型和视图的枢纽。(servlet/service)

案例:

通过MVC设计模式,把数据库的数据展示到网页上。

1WEB-INF创建目录lib,将所需的依赖包导入

 2 依次建立bean包,dao包,service包,servlet包,servlet包,(写代码顺序也一样)

 3 建立util工具包,druid.properties文件

druid.properties文件

 

util工具包

package yhp.util;

import com.alibaba.druid.pool.DruidDataSource;


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.ResourceBundle;

public class DBUtils {
    //1.定义变量
    private Connection connection;
    private PreparedStatement pps;
    private ResultSet resultSet;
    private int count;//存储受影响的行数

    private static String userName;
    private static String userPass;
    private static String url;
    private static String driverName;

    //德鲁伊
    private static DruidDataSource dataSource = new DruidDataSource();
    //2.加载驱动
    static {

        //德鲁伊

        ResourceBundle bundle = ResourceBundle.getBundle("druid");
        driverName = bundle.getString("driverClassName");
        url = bundle.getString("url");
        userName = bundle.getString("username");
        userPass = bundle.getString("password");

        dataSource.setUsername(userName);
        dataSource.setPassword(userPass);
        dataSource.setUrl(url);
        dataSource.setDriverClassName(driverName);



    }

    //2.获得链接
    protected Connection getConnection(){
        try {
            connection=dataSource.getConnection();
            //connection = comboPooledDataSource.getConnection();
            //connection = basicDataSource.getConnection();
            //connection = DriverManager.getConnection(url, userName, userPass);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return connection;
    }
    //得到预状态通道
    protected PreparedStatement getPps(String sql){
        try {
            pps = getConnection().prepareStatement(sql);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return pps;
    }
    //5.绑定参数    List保存的是给占位符所赋的值
    protected void param(List list){
        if(list!=null && list.size()>0){
            for (int i=0;i<list.size();i++) {
                try {
                    pps.setObject(i+1,list.get(i));
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    //6.执行操作(增删改+查询)
    protected int update(String sql,List list){
        getPps(sql);
        param(list);
        try {
            count = pps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return count;
    }
    //7.查询
    protected ResultSet quary(String sql,List list){
        getPps(sql);
        param(list);
        try {
            resultSet = pps.executeQuery();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return resultSet;
    }
    //8.关闭资源
    protected void closeAll(){
        try {
            if (connection != null) {
                connection.close();
            }
            if (pps != null) {
                pps.close();
            }
            if (resultSet != null) {
                resultSet.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

}

 

4  bean包创建Student实体类

类名=表名
列名=属性名
package yhp.bean;

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

    public Student() {
    }

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

    public Student(Integer stuid, String stuname, Integer age, Integer sex) {
        this.stuid = stuid;
        this.stuname = stuname;
        this.age = age;
        this.sex = sex;
    }
}

5 dao包中创建StudentDao接口()(实体类名+Dao=当前类名

package yhp.dao;

//实体类名+Dao=当前类名

import yhp.bean.Student;

import java.util.List;

public interface StudentDao {

    //定义操作数据库方法
    public List<Student> getall() ;
}

6 dao包中建立impl包,实现接口类

package yhp.dao.impl;

import yhp.bean.Student;
import yhp.dao.StudentDao;
import yhp.util.DBUtils;

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 DBUtils implements StudentDao {
    @Override
    public List<Student> getall() {

        ArrayList list = new ArrayList();
        try {

            String sql = "select * from student";
            ResultSet resultSet = quary(sql, null);//util包中的查询方法
            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 e) {
            e.printStackTrace();
        } finally {
            closeAll();//util包中的关闭方法
        }


        return list;
    }
}

7 service包中创捷StudentService接口(service层主要定义业务逻辑,现阶段主要实现调取dao层

package yhp.service;

import yhp.bean.Student;

import java.util.List;

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

8 service包中创建impl包实现接口

package yhp.service.impl;

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

import java.util.List;

public class StudentServiceImpl implements StudentService {

    private StudentDao studentDao = new StudentDaoImpl();

    @Override
    public List<Student> getall() {

        return studentDao.getall();
    }
}

9 View层

(1).index.jsp初始页面

<%--
  Created by IntelliJ IDEA.
  User: 86182
  Date: 2021/9/30
  Time: 9:32
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <a href="getstus">查询学生列表</a>
  </body>
</html>

(2)show.jsp(跳转后查询到的数据展示页面)

<%--
  Created by IntelliJ IDEA.
  User: 86182
  Date: 2021/9/30
  Time: 11:08
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>show.jsp</h1>
<table border="1" 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>

 

 

 10 Control层 servlet包中创建Student类(控制层,实现页面跳转,将从数据库查询到的数据存入request中)

package yhp.servlet;

import yhp.bean.Student;
import yhp.service.StudentService;
import yhp.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 -control 控制层
@WebServlet(urlPatterns = "/getstus")
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 {
        //1.接受请求参数

        //2.调取servlet层参数
        StudentServiceImpl studentService = new StudentServiceImpl();
        List<Student> getall = studentService.getall();
        //3.跳转页面
        //后台传递数据给前台
        req.setAttribute("stulist",getall);//request存值
        req.getRequestDispatcher("/show.jsp").forward(req,resp);//跳转页面

    }
}

11 结果

 

最后: 

感谢各位大佬对我的帮助和支持

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值