简单,清晰的web开发 第一天、交互篇之java实现

代码未动,思想先行,站在高处看,站在远处望
web开发的本质就是完成人和计算机之间的数据交互: 比如查询数据,增加一条数据

站在设计模式的角度来分析一下:
交互的数据,称之为model(数据模型),简称为M
人在看到的页面上操作,称之为View(显示区),简称V
操作会触发事件(比如点击,下拉等),然后交给一个对象处理,称之为Controller(控制器),简称为C

交互前后端都采用了经典的mvc设计模式,具体的过程后面的文章再详细阐述.

简单说就是一个人在看得见的地方(V)触发了(事件),封装数据M,交给控制器C,操作数据返回给V,完成交互.

交互具体是如何完成的呢?如下图.发请求(request),得响应(response)完成的

思考几个问题:谁发请求?发到那里?请求是什么,响应又是什么?

1.客户端(client)发的请求.最常见的就是浏览器,后续还会学其他的

2.发到服务端,最先接到请求的是控制层controller,再调用服务层(service),再调用数据操作层(dao)

3.请求(request),是向服务器端发送的对象,常见包括3个要素(url,method,data)

   a.url是请求要发送的地址,组成由 协议+ip+port+控制器名称+控制器方法名

        协议:web是http

        ip:服务器ip地址

        port:web服务器端口,常见的web服务器比如tomcat

        控制器名称:一般写在@RequestMapping,注解中

        控制器方法名:一般写在@RequestMapping,@GetMapping,@PostMapping注解中

   b.method是请求方式,常见的get,post等

   c.data是请求数据,现在都是用json对象格式,曾经也用过xml

4.响应(response),是服务器端向客户端返回的对象,包括返回的数据,状态   

代码实现:纯原生Java实现mvc三个对象,这里最原生实现,客户端和服务器端都在后台。模拟发请求,得响应得交互完成业务,核心类用的是Scanner来完成查询所有用户,增加用户的业务

架构图:

client客户端区初始化显示的由MainApplication类启动显,View类负责针对用户输入数据切换显示内容和封装数据.代码如下:

package com.rengl.javamvc.dao;

import com.rengl.javamvc.model.User;

import java.util.ArrayList;
import java.util.List;

public class UserMapper {
    List<User> userList = new ArrayList<>();//内存

    public void add(User user){
        userList.add(user);
    }

    public List<User> list() {
        return userList;
    }
}
package com.rengl.javamvc.view;

import com.rengl.javamvc.controller.UserController;
import com.rengl.javamvc.model.User;
import java.util.List;
import java.util.Scanner;
/**
 * V-显示层
 * 纯java下用最简单的交互可以用控制台来实现模拟web请求
 * 当然如果就是单机应用也可以用java自带的显示组件库awt,swing
 *
 * 显示层作用:
 * 1.内容显示
 * 2.数据收集
 * 3.对象封装
 */
public class View {

    private UserController userController = new UserController();

    /**
     * 前端mvc从下面方法中已经进行标记
     * 代码就是一般的代码,但是要从中看出mvc模式来,应为后面代码就会变成别的展现,但是mvc思想是不变的
     * 注册页
     */
    public void registerPage(Scanner scanner){
        //V
        System.out.println("请输入账号:");
        String username = scanner.next();
        System.out.println("请输入密码:");
        String password = scanner.next();
        //M
        User user = new User(username,password);
        System.out.println(user);
        //C
        userController.register(user);
        //查询所有用户
        showUser();
    }

    /**
     * 列表页
     */
    public void showUser(){
        //查询所有用户
        List<User> list = userController.list();
        System.out.println("===================================用户列表=========================================");
        System.out.println("--------账号----------密码-----------");
        for (User user : list) {
            System.out.println("        "+user.getUsername()+"        "+user.getPassword()+"       ");
        }
    }

}

交互数据类为User,代码如下:

package com.rengl.javamvc.model;

public class User {
    private String username;
    private String password;

    public User() {
    }

    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

 服务器端代码为三层设计,控制层,业务层,数据库操作层,其中数据操作因为因为用java原生还没有数据库的接入,会将数据存储在List,List是存在内存中的对象代码如下:

package com.rengl.javamvc.controller;

import com.rengl.javamvc.model.User;
import com.rengl.javamvc.service.UserService;
import com.rengl.javamvc.service.impl.UserServiceImpl;

import java.util.List;

/**
 * 控制器
 */
public class UserController {

    private UserService userService = new UserServiceImpl();


    /**
     * 用户注册
     * 接
     * 调
     * 返
     */
    public String  register(User user){//接[

        //调
        userService.add(user);

        //返
        return "success";
    }

    public List<User> list() {//接

        List<User> list = userService.list();//调
        return list;
    }
}
package com.rengl.javamvc.service;

import com.rengl.javamvc.model.User;

import java.util.List;

public interface UserService {
    public void add(User user);

    List<User> list();
}
package com.rengl.javamvc.service.impl;

import com.rengl.javamvc.dao.UserMapper;
import com.rengl.javamvc.model.User;
import com.rengl.javamvc.service.UserService;

import java.util.List;

public class UserServiceImpl implements UserService {
    private UserMapper userMapper = new UserMapper();
    @Override
    public void add(User user) {
        userMapper.add(user);
    }

    @Override
    public List<User> list() {
        return userMapper.list();
    }
}
package com.rengl.javamvc.dao;

import com.rengl.javamvc.model.User;

import java.util.ArrayList;
import java.util.List;

public class UserMapper {
    List<User> userList = new ArrayList<>();//内存

    public void add(User user){
        userList.add(user);
    }

    public List<User> list() {
        return userList;
    }
}

 这里提到类和对象解释一下.这不是java语言中特有的。其实就是这个世界真实的表达方式.所有的物种都归了类,如果现实存在,就是类具体的实例化表现.所有的类都只包含2种东西,一是属性(特征),二是方法(功能)
举个例子 人类  就是抽象出的概念   人的属性就是性别,年龄,身高,体重等等.方法就比如吃喝拉撒等等
恐龙类也是抽象出的概念  恐龙属性和方法都和人差不多。因为同属动物类。
但是区别在于.人是目前在世界存在,在java中实例化有意义.恐龙这个类虽然存在,但是没有活体对象了,即便在java能通过new的方式创建出来是仅仅在计算机中象征性的存活,就像在电影中一样。实际上没有实际的意义了
ArrayList   可以理解就是个能装东西的,再准确一些就是装对象的,这里用来装用户对象
在java中的交互用的是Scanner 来扫描控制台的单行输入,相当于在模拟发请求这一步骤

代码测试,如图:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值