JavaWeb之MVC设计模式
JavaWeb之MVC设计模式
写Java Web项目时会发现,一个中型或者大型项目 随着代码的增多,会发现:代码既可以写在src目录下,也可以
写在WebContent目录下。src下可以建很多包 ,WebContent下可以建很多文件夹。
所以问题就来了:一个新的类 到底往哪个目录下的哪个文件夹里写?
此时解决办法就是:需要一个模式去规范,到底哪个类该往哪里写。
1.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的区别和联系
设计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页面,展示信息
上一篇: 如何关闭微信小程序的声音