web基础4-servlet入门3(web的MVC架构)

web基础4-servlet入门3(web的MVC架构)

一、传统MVC的三层介绍

1.1 传统架构

M:Model

  1. Pojo类(Bean)

V:View,视图层

  1. 展示数据
  2. 提供可以供我们操作的请求,如发起一个登陆和一个注册

C:Controler,控制器

  1. 接收用户的请求
  2. 响应客户端内容
  3. 重定向或者转发

用户直接访问控制层,控制层就可以直接操作数据库;

Servlet--CRUD--》数据库
弊端:JDBC的代码也写在Servlet中,程序十分臃肿,不利于维护
Servlet的代码中:

  1. 处理请求

  2. 响应客户端内容

  3. 视图跳转

    因为要负责业务逻辑和数据库还新增实现以下:

  4. 处理JDBC

  5. 处理业务代码

  6. 处理逻辑代码

注意:

在架构上 ,没有什么是加一层解决不了的!

如JDBC、驱动等

早期MVC架构(没有service和dao层,控制层直接通过bean和jdbc操作数据库)

1.2 传统架构实现

1.2.1 控制层

web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

  <error-page>
    <error-code>404</error-code>
    <!--        第一个/代表当前项目-->
    <location>/error/404.jsp</location>
  </error-page>
  <error-page>
    <error-code>500</error-code>
    <!--        第一个/代表当前项目-->
    <location>/error/500.jsp</location>
  </error-page>

  <servlet>
    <servlet-name>registrationServlet</servlet-name>
    <servlet-class>com.happy.servlet.registrationServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>registrationServlet</servlet-name>
    <url-pattern>/registration</url-pattern>
  </servlet-mapping>

  <servlet>
    <servlet-name>SuccessServlet</servlet-name>
    <servlet-class>com.happy.servlet.SuccessServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>SuccessServlet</servlet-name>
    <url-pattern>/successtest</url-pattern>
  </servlet-mapping>

</web-app>
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<People> 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" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form method="get" action="${pageContext.request.contextPath}/registration">
    name:<input type="text" name="name"/>
    age:<input type="text" name="age"/>
    address:<input type="text" name="address"/>
    <input type="submit" value="提交">
</form>
<H1 style="color: red">${status}</H1>
<H1 style="color: red">${description}</H1>

</body>
</html>
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" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${name}您好
<h1 style="color: blue">${status}</h1>
</body>
</html>

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层,控制层更加专注于控制流程,不再负责具体逻辑和与数据库打交道。

posted @ 2022-04-24 13:47  高兴518  阅读(84)  评论(0编辑  收藏  举报