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-8username=rootpassword=123456driverClassName=com.mysql.jdbc.DriverinitialSize=5maxActive=10minIdle=5maxWait=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 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 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 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 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 getAll=studentService.getAll();        //返结果(跳转页面)        //后台传递数据给前台        req.setAttribute("stulist",getAll);        req.getRequestDispatcher("/show.jsp").forward(req,resp);    }}

三:MVC之View开发

index.jsp页面

  $Title$查询学生列表

show.jsp页面

    Title

show.jsp

id name age sex
${stu.stuid} ${stu.stuname} ${stu.age} ${stu.sex==1?"男":"女"}

测试结果

前后端分离技术(了解)