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框架的了解。我们需要
- 基本的http请求,部分静态页面解析
- 基本的日志处理打印
- 数据处理包括连接池、驱动、ORM
- 其他安全校验,如: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 # 启动类

浙公网安备 33010602011771号