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

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


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

猜你喜欢

转载自blog.csdn.net/a704397849/article/details/88079945
今日推荐