jboot 可以算是扩展了jfinal,整合了一些流行技术的微服务开发框架。具体介绍参见:https://gitee.com/fuhai/jboot
微服务概念
服务启动
public static void main(String [] args){ Jboot.run(args); }
看一下做了哪些事情
- 解析启动参数(通过main方法传入)
- 打印banner信息
- 打印配置信息
- 通过JbootServerFactory 构建内置的服务器(分别支持undertow,tomcat,jetty)
- 启动服务器,完成主要的初始化。(重点关注)
- 打印服务部署的信息
重点关注 UnderTowServer类 initUndertowServer方法
public void initUndertowServer() {
//设置类加载器
JbootServerClassloader classloader = new JbootServerClassloader(UnderTowServer.class.getClassLoader());
classloader.setDefaultAssertionStatus(false);
//构建部署信息,包括过滤器,监听器,servlet。 包括jfinal核心的JFinalFilter
deploymentInfo = buildDeploymentInfo(classloader);
if (webConfig.isWebsocketEnable()) {
Set<Class> endPointClasses = JbootWebsocketManager.me().getWebsocketEndPoints();
WebSocketDeploymentInfo webSocketDeploymentInfo = new WebSocketDeploymentInfo();
webSocketDeploymentInfo.setBuffers(new DefaultByteBufferPool(true, webConfig.getWebsocketBufferPoolSize()));
for (Class endPointClass : endPointClasses) {
webSocketDeploymentInfo.addEndpoint(endPointClass);
}
deploymentInfo.addServletContextAttribute(WebSocketDeploymentInfo.ATTRIBUTE_NAME, webSocketDeploymentInfo);
}
servletContainer = Servlets.newContainer();
deploymentManager = servletContainer.addDeployment(deploymentInfo);
//部署到容器
deploymentManager.deploy();
HttpHandler httpHandler = null;
try {
/**
* 启动并初始化servlet和filter
*/
httpHandler = deploymentManager.start();
} catch (Throwable ex) {
ex.printStackTrace();
}
pathHandler = Handlers.path(
Handlers.resource(new ClassPathResourceManager(classloader, "webRoot")));
pathHandler.addPrefixPath(config.getContextPath(), httpHandler);
undertow = Undertow.builder()
.addHttpListener(config.getPort(), config.getHost())
.setHandler(pathHandler)
.build();
}
Undertow是一个轻量级的web容器,可以通过api来快速构建一个内置的web容器,来提供服务能力。
这里不关注web容器api的使用,我们只用关注buildDeploymentInfo方法。JFinalFilter拦截所有的请求,进入了jfinal的mvc处理流程。