meethigher-基于Servlet与注解的轻量MVC框架

本人设计的一套轻量MVC框架,支持嵌入任何支持 Java Servlet 规范的框架,不局限于 Spring ,甚至国产的Web框架也支持嵌入。

一开始是为适用公司某些需求的产品做的轻量框架,经过多次整理后,决定小开源一下。个人能力和眼界有限,自然比不上如 jooby 那样优秀的轻量框架,不过够用。

严格来说,这不算是个框架,顶多是便于开发和解耦的路由转发api,这也是为啥我开源的项目叫 route-forward

已实现的功能如下

  1. 支持通过@Rest@GET@POST注解进行解耦开发,避免大量if…else…。目前请求方式也仅支持GETPOST

  2. 传参支持直接使用Map<String,Object>,也支持注解解析

    • GET请求传参支持@Param解析,并支持参数校验

    • POST请求传参支持@Body解析,并支持参数校验

  3. 全局异常抓取

  4. 请求日志打印

明显的缺陷

  1. POST请求主要支持任何Content-Type的字符串请求体。POST暂不支持类似GET的直接拼参、不支持文件流,不过也可以实现。
  2. 目前不支持接入接口文档,不过可以实现,且注解都进行了适用生成文档的参数。不过可以直接使用代码零侵入的Apifox框架

一、介绍

1.1 项目结构说明

项目结构

  • servlet-web-framework:核心。基于Servlet与注解的轻量MVC框架
  • servlet-web-framework-example:示例。使用框架进行实际业务开发示例
  • springboot-example:示例。嵌入到Spring框架示例
├─servlet-web-framework 基于Servlet与注解的轻量MVC框架
│  └─src
│      └─main
│          └─java
│              └─top
│                  └─meethigher
│                      └─webframework
│                          ├─annotation 类似SpringMVC的注解
│                          ├─exception 通用异常
│                          ├─servlet 接口请求入口
│                          ├─utils 工具类
│                          └─worker 注解的增强实现
├─servlet-web-framework-example 使用框架进行实际业务开发示例
│  └─src
│      └─main
│          ├─java
│          │  └─rest
│          │      └─api
│          │          ├─controlelr
│          │          ├─model
│          │          └─service
│          └─resources
│              └─test
│                  └─img
└─springboot-example 嵌入到Spring框架示例
    └─src
        └─main
            ├─java
            │  └─top
            │      └─meethigher
            │          └─springboot
            │              └─config
            └─resources

1.2 整体请求流程

以Servlet作为请求入口,这点类似于SpringMVC的DispatcherServlet

二、使用示例

2.1 maven依赖

已上传Maven中央仓库

<dependency>
    <groupId>top.meethigher</groupId>
    <artifactId>servlet-web-framework</artifactId>
    <version>1.0</version>
</dependency>

2.2 Spring使用示例

创建Controller

@Rest("/test")
public class TestController {

    private final TestService testService;

    public TestController(TestService testService) {
        this.testService = testService;
    }


    @Get("/api1")
    public Resp api1(Map<String, Object> args) {
        return testService.api1(args);
    }

    @Get("/api2")
    public Resp api2(@Param("name") String name, @Param("age") Integer age, @Param(value = "money", required = false) Double desc) {
        return testService.api2(name,age,desc);
    }

    @Post("/api3")
    public Resp api3(Map<String, Object> args) {
        return testService.api3(args);
    }

    @Post("/api4")
    public Resp api4(@Body Person person) {
        return testService.api4(person);
    }

    @Post("/api5")
    public Resp api5() throws ServletWebException {
        testService.api5();
        return Resp.getSuccessResp();
    }

    @Post("/api6")
    public Resp api6() throws ServletWebException {
        testService.api6();
        return Resp.getSuccessResp();
    }
}

注册Servlet到Spring容器

class TestServlet extends ResourceHttpServlet {

    public TestServlet(ControllerManager controllerManager) {
        super("test", "api", controllerManager);
    }

}

@Configuration
public class TestServletConfig {

    @Resource
    private TestController testController;


    @Bean
    public ServletRegistrationBean workflowServlet() {
        ServletRegistrationBean<Servlet> bean = new ServletRegistrationBean<>();
        TestServlet servlet = new TestServlet(new ControllerManager());
        bean.setServlet(servlet);
        bean.addUrlMappings("/" + servlet.getServletPath() + "/*");
        servlet.registerController(testController);
        return bean;
    }

}

请求示例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值