Solon轻量级Web框架:从Web请求开始(二)

共勉

疫情是一波未平一波又起,制裁是不断升级。但那又如何,疫情限制了身体,制裁限制了代码,程序员的思想无极限。正如:

虽然我们人类的身体受到许多限制,但是我们的精神却能自由的探索整个宇宙。 ——史蒂芬·霍金《果壳中的宇宙》

Web的一个请求流程

从浏览器开始的一个请求流程,如图:

1. 请求拦截Filter
  • Why:一人在浏览器页面进行了一个操作,对后台进行访问,这时后台需要判断这个人能不能访问:如登录判断,这时就需要前置拦截Filter处理。
  • What:拦截什么,由业务决定,可以是权限、登录、IP等等
  • Where:请求进入,想用处理前,前置拦截
  • How:怎么拦截,Solon框架处理的事情,你只需要按照规范实现拦截什么。

Solon拦截器:参考文档

2. URL处理Controller

Controller也就是控制层,负责URL匹配,业务逻辑调用。

Solon的MVC注解:参考文档

3. 业务逻辑处理Service

Service也就是业务逻辑层,负责业务处理逻辑,数据处理结果处理。

Solon注入或手动获取配置:参考文档
Solon注入或手动获取Bean:参考文档

4. 数据库访问(Dao/Mapper)

Dao/Mapper也就是数据访问层,负责数据库的访问,执行数据增删改查。

Solon数据访问:参考文档

Solon框架下的pom依赖

根据Web请求的层次,以及Solon框架的了解。我们需要

  1. 基本的http请求,部分静态页面解析
  2. 基本的日志处理打印
  3. 数据处理包括连接池、驱动、ORM
  4. 其他安全校验,如:JWT
    基于以上四点,我的选择如下:
    Solon框架引入:
<parent>
  <groupId>org.noear</groupId>
  <artifactId>solon-parent</artifactId>
  <version>1.7.0</version>
</parent>

Solon基础Web处理:

<dependency>
  <groupId>org.noear</groupId>
  <artifactId>solon-api</artifactId>
</dependency>

solon-api包含了Solon依赖库、Http启动器、静态文件支持、跨域处理等。如果你要精简或者特殊要求,那么请自行选择:参考文档

Solon日志处理:

<dependency>
  <groupId>org.noear</groupId>
  <artifactId>solon.logging.impl</artifactId>
</dependency>

Solon的日志也支持log4j2、logbak等热门日志组件。
log4j2:进入
logbak:进入

数据库处理:

<!-- 链接池 -->
<dependency>
  <groupId>com.zaxxer</groupId>
  <artifactId>HikariCP</artifactId>
<version>4.0.3</version>
</dependency>
<!-- Mariadb驱动 -->
<dependency>
  <groupId>org.mariadb.jdbc</groupId>
  <artifactId>mariadb-java-client</artifactId>
<version>3.0.4</version>
</dependency>
<!-- ORM -->
<dependency>
  <groupId>org.noear</groupId>
  <artifactId>weed3-solon-plugin</artifactId>
</dependency>

把轻量与开源免费进行到底,数据库选择的Mariadb,Solon自己的ORM组件weed3。其他热门选择:(系列文档

安全验证JWT2:

<jwt.version>0.11.2</jwt.version>

<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-api</artifactId>
    <version>${jwt.version}</version>
</dependency>
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-impl</artifactId>
    <version>${jwt.version}</version>
</dependency>
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-orgjson</artifactId>
    <version>${jwt.version}</version>
</dependency>

这里只选择了单机的,最简单的鉴权,如需更多:系列文档

Java项目目录规划

包选择后,就是目录规划,主要是Java包设计,其他都是通用的Maven项目规范。以下统一在项目包下面,如cn.minimelon.api。

|-config # 配置
|---filter # 前置过滤
|---handle # 后置处理器
|--- ## 其他配置
|-controller # 控制层
|---moduleX # 模块x
|-----XxxxController.java # 具体Controller
|-domain
|---moduleX # 模块x
|----- ## 数据库表映射类PO、VO
|-mapper
|---moduleX # 模块x
|-----XxxxMapper.java # 具体Mapper
|-service
|---moduleX # 模块x
|-----IXxxxService.java # 具体Service接口
|-----impl # 实现包
|- ## 其他工具包、常量包等
|-AppStarter.java # 启动类

下一篇:Solon轻量级Web框架:Solon配置与第一个请求(三)

posted @ 2022-04-08 14:09  Hiro(阿宽)  阅读(334)  评论(0)    收藏  举报