web基础4-servlet入门3(web的MVC架构)
web基础4-servlet入门3(web的MVC架构)
一、传统MVC的三层介绍
1.1 传统架构
M:Model
- Pojo类(Bean)
V:View,视图层
- 展示数据
- 提供可以供我们操作的请求,如发起一个登陆和一个注册
C:Controler,控制器
- 接收用户的请求
- 响应客户端内容
- 重定向或者转发
用户直接访问控制层,控制层就可以直接操作数据库;
Servlet--CRUD--》数据库
弊端:JDBC的代码也写在Servlet中,程序十分臃肿,不利于维护
Servlet的代码中:
处理请求
响应客户端内容
视图跳转
因为要负责业务逻辑和数据库还新增实现以下:
处理JDBC
处理业务代码
处理逻辑代码
注意:
在架构上 ,没有什么是加一层解决不了的!
如JDBC、驱动等
早期MVC架构(没有service和dao层,控制层直接通过bean和jdbc操作数据库)
1.2 传统架构实现
1.2.1 控制层
web.xml
<?xml version="1.0" encoding="UTF-8"?>
404
/error/404.jsp
500
/error/500.jsp
registrationServlet
com.happy.servlet.registrationServlet
registrationServlet
/registration
SuccessServlet
com.happy.servlet.SuccessServlet
SuccessServlet
/successtest
registrationServlet类
package com.happy.servlet;
import com.happy.pojo.People;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
import java.util.ArrayList;
public class registrationServlet extends HttpServlet {
// 用一个list来模拟装数据库装数据,并只在类加载的时候初始化一次
ArrayList peoples = new ArrayList<>();
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 接收用户请求,并拿到
String name = request.getParameter("name");
int age = Integer.parseInt(request.getParameter("age"));
String address = request.getParameter("address");
//模拟执行业务逻辑并进行数据库持久化操作
// 插入数据
// 先查询是否有同名
// 1.有则返回错误
Boolean existFlag=false;
for (People people : peoples) {
if(people.getName().equals(name)){
existFlag=true;
break;
}
}
if(existFlag==true){
request.setAttribute("status","注册失败");
request.setAttribute("description","已经有这个用户了");
request.getRequestDispatcher("/registration.jsp").forward(request,response);
System.out.println("返回到最初调用的registrationServlet");
System.out.println("是否会执行到此");
}else{
// 2.无则插入新数据
People people = new People(1, name, age, address);
peoples.add(people);
request.setAttribute("name",name);
request.setAttribute("status","注册成功");
request.getRequestDispatcher("/success.jsp").forward(request,response);
// request.getRequestDispatcher("/successtest").forward(request,response);
System.out.println("返回到最初调用的registrationServlet");
System.out.println("是否会执行到此");
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
1.2.2 视图层
registration.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
${status}
${description}
success.jsp
<%--
Created by IntelliJ IDEA.
User: pcuser
Date: 2022/4/23
Time: 22:43
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
${name}您好
${status}
1.2.3 Model层
Pojo类:People类
package com.happy.pojo;
public class People {
private int id;
private String name;
private int age;
private String address;
public People() {
}
public People(int id, String name, int age, String address) {
this.id = id;
this.name = name;
this.age = age;
this.address = address;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
1.3 效果
第二次注册:
二、经典MVC的三层介绍
2.1 经典MVC架构
Model:
- 业务处理层:业务逻辑(Service)
- 数据持久层:CRUD(Dao)
- Pojo类
View:
- 展示数据
- 提供可以供我们操作的界面,如发起一个登陆和一个注册。技术层面即发起servlet请求(通过a连接,form action)。
Controller:
-
接收用户的请求:(用request对象封装用户的请求参数以及session信息等)
-
交给业务层处理对应的代码
-
控制视图的跳转:转发或者重定向
经典MVC架构 vs 传统MVC架构:
经典的MVC架构在传统之上,增加了service和dao层,控制层更加专注于控制流程,不再负责具体逻辑和与数据库打交道。