# solon **Repository Path**: quickthinking/solon ## Basic Information - **Project Name**: solon - **Description**: noear::一件插件式WEB微框架(可能无关WEB) - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 718 - **Created**: 2020-01-14 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README [![Maven Central](https://img.shields.io/maven-central/v/org.noear/solon.svg)](https://mvnrepository.com/search?q=solon) ` QQ交流群:22200020 (同时招募项目参与人员:开发者,测试者,网官设计师等...)` # solon for java 一个插件式微型Web框架。 支持jdk8,主框架80kb。组合不同的插件应对不同需求。 * 采用Handler + Context 架构 * 集成IOC & AOP容器,支持MVC * 支持Http(Serverlet 或 非Serverlet),WebSocket,Socket信号接入 * 插件可扩展可切换:启动插件,扩展插件,序列化插件,会话状态插件,视图插件(可共存) 等... ### Hello world: ```java //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 适配 | ### 附1:入门示例 * 微框架示例 ```xml org.noear solon.boot.jlhttp 1.0.4.2 ``` ```java 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) ```xml org.noear solon-mvc 1.0.4.2 ``` ``` //资源路径说明(不用配置) resources/application.properties(或 application.yml) 为应用配置文件 resources/static/ 为静态文件根目标 resources/WEB-INF/view/ 为视图文件根目标(支持多视图共存) //模板调试模式(或加热加载模式): 启动参数添加:-deubg=1 ``` ```java 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,''); ``` * 获取应用配置 ```java XApp.cfg().get("app_key"); //=>String XApp.cfg().getInt("app_id",0); //=>int XApp.cfg().getProp("xxx.datasource"); //=>Properties ``` ### 附2:更多示例可参考 _test 和 _demo ### 附3:插件开发说明 * 新建一个 meven 项目 * 新建一个 java/{包名}/XPluginImp.java (implements XPlugin) * 新建一个 resources/`solonplugin`/{包名.properties} * 添加配置:solon.plugin={包名}.XPluginImp