聊一聊JavaWeb开发分层那些事

「这是我参与2022首次更文挑战的第13天,活动详情查看:2022首次更文挑战」。

前言

大家好,我是程序猿小白 gw_Gw,很高兴能和大家一起学习进步。复制代码
复制代码

以下内容部分来自于网络,如有侵权,请联系我删除,本文仅用于学习交流,不用作任何商业用途。

摘要

本文主要介绍开发web程序时的基本架构以及各层的作用和联系,希望初学者少走弯路。
复制代码

JavaWebApplication架构

1. 基本概念

在做web开发时,我们首先要确定就是技术选型以及架构设计,使用分层可以让我们更容易进行协同开发,提高工作效率。很多初学者虽然在搜索之后了解了各层的作用以及关系,但是真正到了使用的时候却不知道如何设计(俺也一样)。今天咱们就来聊一聊开发web应用分为哪些层,每一层又有什么作用,各层之间又有哪些联系。

首先来看下图:

image-20220207201157414

上图就代表了基本分层,下面我们来解释一下各层的作用以及各层之间的联系。

  1. dto层:实体类层,其中存放的的是数据库中的一个个表(表的名称就是类名,表的字段就是属性,并且每个属性都有对应的set,get方法),也是我们应该最先创建的一层。
  2. dao层:数据持久层,用来操作dto,实际上封装了对dto的各种基本操作(增删查改等)。
  3. web层:web层下又分为servlet层(实际业务逻辑处理),filter层(过滤页面),listener层(监听)。
  4. service层:服务层,通过调用dao层的基本操作,组合为可以执行更为复杂的操作,供servlet层使用。
  5. utils层:存放需要使用的工具类。

2. 实际应用

知道了各层的作用和联系,下面我们就来通过实例加深印象。

【dto层】

public class User {
​
  private long id;
  private String name;
  private String gender;
 
  public long getId() {
    return id;
  }
​
  public void setId(long id) {
    this.id = id;
  }
​
​
  public String getName() {
    return name;
  }
​
  public void setName(String name) {
    this.name = name;
  }
​
​
  public String getGender() {
    return gender;
  }
​
  public void setGender(String gender) {
    this.gender = gender;
  }
​
复制代码

【dao层】

封装对dto中类的基本操作(CRUD等)。

我们一般会先定义接口,然后再定义实现类。

public interface UserDao {
    /**
     * 查询所有的用户信息
     *
     * @return 用户集合
     */
    List<User> findAll();
    /**
     * 添加用户
     *
     * @param user
     */
    void add(User user);
​
    /**
     * 删除用户
     *
     * @param id
     */
    void delete(int id);
​
    /**
     * 根据id查找用户
     *
     * @param parseInt
     */
    User findUserById(int parseInt);
​
    /**
     * 修改用户信息
     *
     * @param user
     */
    void update(User user);
复制代码

接着我们根据具体的需求来写实现类即可。

一般我们会把实现类放到Impl包下。

image-20220207203246491

【service层】

service层也是一样,我们一般会先定义接口再定义实现类。

public interface UserService {
​
    /**
     * 查询所有的用户信息
     * @return 用户集合
     */
    List<User> findAll();
​
    /**
     * 新增用户
     * @param user
     */
    void addUser(User user);
​
    /**
     * 删除用户
     * @param id
     */
    void deleteUser(String id);
​
    /**
     * 根据id查找用户
     * @param id
     * @return
     */
    User findUserById(String id);
​
    /**
     * 修改用户信息
     * @param user
     */
    void updateUser(User user);
}
​
复制代码

然后根据需求编写实现类即可,同样我们会把实现类放到Impl包下。

image-20220207203542701

是不是发现和dao层有点像,实际上就是对dao层的又一次封装,通过组合dao层的操作,提供更复杂的功能。

【web层】

image-20220207203746603

web层下最重要的就是servlet,也就是我们的业务逻辑,根据需要设计filter和listener即可。

小结

以上就是关于web程序开发时各层的作用以及联系,希望能对读者有所帮助,如有不正之处,欢迎留言指正,只看不练还是容易忘记,如果还是不能理解,强烈建议自己跟着一个完成的程序敲一遍。觉好留赞哈。

Guess you like

Origin juejin.im/post/7061947530694623263