欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JavaWeb之MVC设计模式

程序员文章站 2022-04-02 08:24:41
...

JavaWeb之MVC设计模式

写Java Web项目时会发现,一个中型或者大型项目 随着代码的增多,会发现:代码既可以写在src目录下,也可以

写在WebContent目录下。src下可以建很多包 ,WebContent下可以建很多文件夹。

所以问题就来了:一个新的类 到底往哪个目录下的哪个文件夹里写?

此时解决办法就是:需要一个模式去规范,到底哪个类该往哪里写。

1.mvc

JavaWeb之MVC设计模式

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

型)。

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

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

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

(servlet/service)

2.三层架构

三层架构 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层

(DAL)。区分层次的目的即为了“高内聚,低耦合”的思想。

1、表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。 jsp/html

2、业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。

servlet,service

3、数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等。dao

表现层实现的代表作品是Struts,springmvc框架,

业务层实现的代表作品是Spring,

持久层实现的代表作品是Hibernate,mybatis。

层就相当于一个黑盒子,我们不用知道它内部怎么实现,只需要知道如何去调用它就行了。每层只与上下相邻的两

层打交道。当一层内部由于技术变迁发生变化时,只要接口不变,其他层不用做任何改变。分层之后灵活性提高,

也便于团队分工开发。

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

JavaWeb之MVC设计模式

设计demo

1.包结构

SRC目录下

创建com.java.web包,下面存放对应的servlet的代码。

创建com.java.service包,下面存放业务逻辑的代码。servlet和dao的衔接层,servlet调取service,service调取dao。

创建com.java.dao包,下面放数据库的操作信息。

创建com.java.bean包,下面放实体类。

创建com.java.util包,下面放工具类。

2.DemoM-model,模型层,bean包和dao包

查询数据库学生表中学生的所有信息

1.创建上述包

2.部署

2.1.页面上加入请求指令

<h1><a href="/getallstudent">student</a></h1>

2.2.在web包新建一个类,存放servlet

1.创建xxServlet类

2.继承与 HttpServlet

3.重写service方法

package com.java.web;

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;

@WebServlet(value = "/getallstudent")//通过注解去接收页面的指令
class StudentServlet extends HttpServlet {//继承HttpServlet。这里如果找不到,需要导入jar包,在tomcat的lib目录下
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//重写service方法
        
        //1.接受参数
        //2.调取service方法
        //3.跳转页面
    }
}

3.bean包中创建实体类

实体类,又称为javabean

1.类名尽量等于表名,列名等于属性名

2.构造方法

package com.java.bean;
//类名要等于表明,列明要等于属性名
public class Student {
    private String sname;
    private String sid;
        //.
        //.
        //.
        //.
        //.
        //生成get,set,全参,无参方法
}

4.dao包

4.1.创建接口,StudentDao。定义操作数据库的方法

ackage com.java.dao;

import com.java.bean.Student;

import java.util.List;

public interface StudentDao {
    public List<Student> getall();

}

4.2.在dao包下创建impl.StudentDaoImpl

实现dao接口,连接数据库

1.首先在WEB-INF文件夹下创建lib包,把德鲁伊的jar包放进去

2.然后在src下放德鲁伊的属性文件

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

3.德鲁伊的工具类放到util目录下,里面有获取连接和关闭资源的方法

4.StudentDaoImpl实现类,实现dao中的方法,进行数据库的连接

package com.java.dao.impl;

import com.java.bean.Student;
import com.java.dao.StudentDao;
import com.java.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;

public class StudentDaoImpl extends DruidUtil implements StudentDao {

    @Override
    public List<Login> getall() {
        List list = new ArrayList();
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        try {
            connection = getConnection();
            String sql = "select * from Student";
            preparedStatement = connection.prepareStatement(sql);
            resultSet = preparedStatement.executeQuery();
            while (resultSet.next()){
                Student student = new Student();
                login.setsname(resultSet.getString("sname"));
                login.setsid(resultSet.getString("sid"));
                list.add(studetn);

            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            close(connection,preparedStatement,resultSet);
        }

        return null;
    }
}

5.Service

1.复制Dao到Service,并改名为StudentService

2.创建实现类,impl.StudentServiceImpl,接口是StudentService

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

6.Servlet

@WebServlet(value = "/Student")
class StudentServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.接受参数
        //2.调取service方法
        StudentService studentService = new StudentServiceImpl();
        List<Studnet> students = studentService.getall();
        //3.跳转页面
		req.setAttribute("lgoins",logins);
        req.getRequestDispatcher("show.jsp").forward(req,resp);
    }
}

servlet里面调取service,service里面调取dao,dao里面调取数据库。数据放到实体类里面保存

);
List students = studentService.getall();
//3.跳转页面
req.setAttribute(“lgoins”,logins);
req.getRequestDispatcher(“show.jsp”).forward(req,resp);
}
}


servlet里面调取service,service里面调取dao,dao里面调取数据库。数据放到实体类里面保存

### 7.导入jstl标签库,编写show页面,展示信息