1 Star 0 Fork 555

compass / solon

forked from noear / solon 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
README.md 7.17 KB
一键复制 编辑 原始数据 按行查看 历史
西东 提交于 2020-05-28 19:17 . 1.0.5.11

Maven Central

QQ交流群:22200020 (同时招募项目参与人员:开发者,测试者,网官设计师等...)

solon for java

一个插件式微型Web框架。

支持jdk8+,主框架90kb。组合不同的插件应对不同需求。

  • 采用Handler + Context 架构
  • 实现IOC & AOP容器,支持MVC
  • 支持Http(Serverlet 或 非Serverlet),WebSocket,Socket信号接入
  • 插件可扩展可切换:启动插件,扩展插件,序列化插件,会话状态插件,视图插件(可共存) 等...

Hello world:

//Handler 模式:
public class App{
    public static void main(String[] args){
        XApp app = XApp.start(App.class,args);
        
        app.get("/",(c)->c.output("Hello world!"));
    }
}

//Controller 模式:
@XController
public class App{
    public static void main(String[] args){
        XApp.start(App.class,args);
    }
  
    @XMapping("/")
    public Object home(XContext c){
        return "Hello world!";  
    }
}

主框架与插件:

主框架
组件 说明
org.noear:solon-parent 框架版本管理
org.noear:solon 主框架
快速集成包
组件 说明
org.noear:solon-mvc 可进行mvc开发的快速集成包
org.noear:solon-api 可进行api 或 rpc 开发的快速集成包
插件
boot插件 说明
org.noear:solon.boot.jdkhttp boot插件,对JKD自带的HttpServer适配,提供http服务(不自带session state)
org.noear:solon.boot.jlhttp boot插件,对jlhttp适配,提供http服务(不自带session state)
org.noear:solon.boot.nteeyhttp boot插件,对Netty适配,提供http服务
org.noear:solon.boot.jetty boot插件,对jetty适配,提供http服务(网友@khb提供)
org.noear:solon.boot.undertow boot插件,对undertow适配,提供http服务(网友@tyk提供)
org.noear:solon.boot.smarthttp boot插件,对smart-http适配,提供http服务(基于AIO实现)
org.noear:solon.boot.websocket boot插件,对java-websocket适配,提供websocket服务
org.noear:solon.extend.jetty.jsp 扩展插件,为jetty添加jsp支持(不建议使用jsp)(网友@khb提供)
org.noear:solon.extend.undertow.jsp 扩展插件,为undertow添加jsp支持(不建议使用jsp)(网友@tyk提供)
静态文件支持插件 说明
org.noear:solon.extend.staticfiles 扩展插件,添加静态文件支持(监视 resources/static 文件夹)
Yaml配置支持插件 说明
org.noear:solon.extend.properties.yaml 扩展插件,添加yml配置文件支持
Session插件 说明(可将boot插件的session state服务,自动换掉)
org.noear:solon.extend.sessionstate.local 扩展插件,本地session
org.noear:solon.extend.sessionstate.redis 扩展插件,分布式session(其于redis构建)
序列化插件 说明
org.noear:solon.serialization.fastjson 视图插件,对 fastjson 适配,输出json视图 或 序列化输出
org.noear:solon.serialization.snack3 视图插件,对 snack3 适配,输出json视图 或 序列化输出
org.noear:solon.serialization.jackson 视图插件,对 jackson 适配,输出json视图 或 序列化输出
视图插件 说明(可置多个视图插件)
org.noear:solon.view.freemarker 视图插件,对 freemarker 适配,输出html
org.noear:solon.view.jsp 视图插件,对 jsp 适配,输出html
org.noear:solon.view.velocity 视图插件,对 velocity 适配,输出html
org.noear:solon.view.thymeleaf 视图插件,对 thymeleaf 适配,输出html
org.noear:solon.view.beetl 视图插件,对 beetl 适配,输出html
org.noear:solon.view.enjoy 视图插件,对 enjoy 适配,输出html
rpc client 说明
org.noear:solonclient solon rpc client 与solon 的 rpc service 配对
外部框架适配 说明
org.noear:cron4j-solon-plugin cron4j 适配插件
org.noear:dubbo-solon-plugin dubbo 适配插件
org.noear:mybatis-solon-plugin mybatis 适配插件

附1:入门示例

  • 微框架示例
<!-- http boot 插件;可以换成:.smarthttp 或 .jetty 或 .undertow 或自己定义个 -->
<dependency>
  <groupId>org.noear</groupId>
  <artifactId>solon.boot.jlhttp</artifactId>
  <version>1.0.5.11</version>
</dependency>
public class App{
    public static void main(String[] args){
        XApp app = XApp.start(App.class,args);
        
        //http get 监听
        app.get("/",(c)->c.output("hallo world!"));
    }
}
  • Web 示例(aop,mvc,rpc)
<parent>
    <groupId>org.noear</groupId>
    <artifactId>solon-mvc</artifactId>
    <version>1.0.5.11</version>
</parent>
//资源路径说明(不用配置)
resources/application.properties(或 application.yml) 为应用配置文件
resources/static/ 为静态文件根目标
resources/WEB-INF/view/ 为视图文件根目标(支持多视图共存)

//模板调试模式(或加热加载模式):
启动参数添加:-deubg=1
public class App{
    public static void main(String[] args){
        XApp.start(App.class, args);
    }
}

/*
 * mvc控制器
 */
@XController
public class DemoController{
    //for http
    @XMapping("/hallo/{u_u}")
    public ModelAndView hallo(String u_u){
        return new ModelAndView("hallo");
    }
    
    /*
    //for web socket (需添加:solon.boot.websocket 插件)
    @XMapping(value="/hallo/{u_u}", method = XMethod.SEND)
    public ModelAndView hallo_ws(String u_u){
        return new ModelAndView("hallo");
    }
    */
}

/*
 * rpc服务
 */ 
// - interface
@XClient("rpc:/demo/") // 或 demorpc (使用water提供的注册服务;当然也可以改成别的...)
public interface DemoRpc{
    void setName(Integer user_id,String name);
}

// - server
@XMapping("/demo/*")
@XB(remoting = true)
public class DemoService implements DemoRpc{
    public void setName(Integer user_id,String name){
        
    }
}

// - client - 简单示例
DemoRpc client = new XProxy().upstream(n->"http://127.0.0.1").create(DemoRpc.class); 
client.setName(1,'');
  • 获取应用配置
//非注入模式
XApp.cfg().get("app_key"); //=>String
XApp.cfg().getInt("app_id",0); //=>int
XApp.cfg().getProp("xxx.datasource"); //=>Properties

//注入模式
@XConfiguration //or @XController, or @XBean
class xxx{
    @XInject("app_key")
    String app_key;
}

附2:更多示例可参考 _test 和 _demo

附3:插件开发说明

  • 新建一个 meven 项目
  • 新建一个 java/{包名}/XPluginImp.java (implements XPlugin)
  • 新建一个 resources/solonplugin/{包名.properties}
  • 添加配置:solon.plugin={包名}.XPluginImp

附4:启动顺序参考

  • 1.实例化 XApp.global() 并加载配置
  • 2.加载扩展文件夹
  • 3.扫描插件
  • 4.运行builder函数
  • 5.运行插件
  • 6.扫描并加载java bean
  • 7.加载渲染关系
  • 8.完成
Java
1
https://gitee.com/cos9527/solon.git
git@gitee.com:cos9527/solon.git
cos9527
solon
solon
master

搜索帮助