java轻量级后端应用服务器从零开始一步步搭建到上线运行(一) java 轻量级http服务器框架源码
简介
这是一个轻量级服务器搭建的系列文章,各个功能模块都被分解,一章一章的整合进去,从简单到复杂,从简陋到完善,最终就是一个完整的java后台应用服务器项目.
一, 开发 准备和工具
- 熟悉 java 语法.
- jdk1.8
- IntelliJ IDEA 2018.1 (这里我使用的是idea 如果用eclipse也行,不过下面部分步骤图 会有些地方不同)
二, idea 创建空白项目
- 新建一个空项目,File -> New -> Project , 直接 点击 next , next , 项目名 输入server-demo1 , 点击finish 完成,如下:
三, http框架核心源码
- http框架代码,如下图:
- 简单介绍一下这些文件(熟悉运行流程后可以自行看下http框架源码,并不复杂,希望大家能在其中学到些东西.模仿该框架可以搭建别的框架,后面文章中就会出现比如socker,mqtt框架的实现 都和这个http框架类似。如果有看不明白的,可以在评论里面提出来,或者有更好的建议也可以提出来,谢谢 !)
- 介绍http服务器启动入口 main.Http代码如下:
package main;
import frame.Server;
import frame.http.HttpServer;
public class Http {
public static void main(String[] args) {
try {
//获取项目工作目录
String user_dir = System.getProperty("user.dir");
//加载jar
frame.JarLoader.load(user_dir + "/libs");
frame.JarLoader.addusr_paths(user_dir + "/libs");
//加载类
frame.ClassLoader.loadClassesFromPath();
//启动http服务器,下面的81是监听的端口
final HttpServer httpserver = new HttpServer(81);
httpserver.bootstrap();
//程序退出的清理工作
Server.cleanShutdownHooks();
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
try {
httpserver.shutdown();
} catch (Throwable e) {
e.printStackTrace();
}
}
});
} catch (Throwable e) {
e.printStackTrace();
System.exit(0);
}
}
}
-
http框架代码源文件(包含libs)连接:https://pan.baidu.com/s/1Nye9_VqXoRggNUO_VV0Liw
提取码:zn2t -
将源码、依赖包按上图所示结构添加到项目里面
-
添加依赖包
-
启动http服务(如果报错确认是不是端口(这里监听的是81端口)被占用了,任务管理器结束占用了该端口的应用,或改本代码中启动监听的端口号如18081)
四, http接口开发
-
上面成功启动了http服务,但是并没实现任何外部访问的接口,下面介绍如何创建一个简单的接口
-
新建一个处理业务逻辑的包 service , 然后在service 包下新建一个 测试接口所在包 test
-
test 包下 ,新增一个简单的测试接口类 HttpCmdTestQuery (我的http接口命名规范: HttpCmd XXXX ),代码如下:
import frame.http.HttpCmd;
public class HttpCmdTestQuery extends HttpCmd {//http接口需要继承 HttpCmd
static {
//注册接口 "/test/query"
HttpCmd.register("/test/query",HttpCmdTestQuery.class);
}
@Override
public void execute() { //接口业务逻辑处理方法
result.put("ret","0");
result.put("msg","this is a test");
response(result); //响应请求
}
}
五, http服务器本地运行,调试
-
测试接口写完后,重新启动http服务并测试接口,如下:
-
浏览器输入 127.0.0.1:81/test/query , 结果如下
获取post请求携带json格式参数
-
本后端服务器代码主要针对的是应用端而非web端, 没提供获取get请求的参数(如要实现,熟悉框架源码后,可自行改造HttpCmd , HttpHandler 实现), 只实现了获取 http post请求body中json格式的参数
-
在上面HttpCmdTestQuery 接口类中 增加代码接收post请求的json格式的参数,如下:
import frame.http.HttpCmd;
import org.json.JSONObject;
public class HttpCmdTestQuery extends HttpCmd {//http接口需要继承 HttpCmd
static {
//注册接口 "/test/query"
HttpCmd.register("/test/query",HttpCmdTestQuery.class);
}
@Override
public void execute() { //接口业务逻辑处理方法
JSONObject params = getJSONObject();//读取post请求json参数并创建JSONObject
String test = params.optString("test","");//
System.out.println("test="+test);
result.put("ret","0");
result.put("msg","this is a test,param test=:"+test);
response(result); //响应请求
}
}
- 重启http服务后, 在http 调试工具 postman 中 发送post请求 测试/test/query 接口 接收json格式的参数,如下:
(如果没装http调试工具postman,可以看下:https://blog.csdn.net/a704397849/article/details/88197808)
附录 项目代码
链接:https://pan.baidu.com/s/1kCeArj77WtAdrnaudvJhkA
提取码:bea2
后面会在此代码的基础上一个个添加各种项目中会用到的功能模块
才开的博客,之前工作中笔记都只是在自己的私人空间随意记录没法分享。
趁着最近不太忙,打算将自己的积累的一些知识分享出来,希望能帮助到在学习工作中遇到类似问题或有类似需求的朋友们。
最后,
如果哪里写的有问题或不清楚 请大家在评论中指出来,我有时间会来处理。
当然如果我的文章对你有所帮助,也希望你能够收藏。这是对我的最直接的肯定和支持,会给我更多的动力分享出更多高质量的文章 (〃‘▽’〃)。