ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-04-24 14:04:02  阅读:140  来源: 互联网

标签:web name age request MVC address servlet public String


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

标签:web,name,age,request,MVC,address,servlet,public,String
来源: https://www.cnblogs.com/happycarpediem/p/16185434.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有