您的位置:首页 > 编程语言 > Java开发

java轻量级后端应用服务器从零开始一步步搭建到上线运行(一) java 轻量级http服务器框架源码

2019-03-05 14:38 197 查看
版权声明:本文为CSDN博主 无、涯 原创文章,可以转载但请注明出处。联系方式:zx704397849@163.com 博客地址 https://blog.csdn.net/a704397849 https://blog.csdn.net/a704397849/article/details/88079945

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);  //响应请求
}
}

附录 项目代码

链接:https://pan.baidu.com/s/1kCeArj77WtAdrnaudvJhkA
提取码:bea2

后面会在此代码的基础上一个个添加各种项目中会用到的功能模块

才开的博客,之前工作中笔记都只是在自己的私人空间随意记录没法分享。
趁着最近不太忙,打算将自己的积累的一些知识分享出来,希望能帮助到在学习工作中遇到类似问题或有类似需求的朋友们。
最后,
如果哪里写的有问题或不清楚 请大家在评论中指出来,我有时间会来处理。
当然如果我的文章对你有所帮助,也希望你能够收藏。这是对我的最直接的肯定和支持,会给我更多的动力分享出更多高质量的文章 (〃‘▽’〃)。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐