MineServer

549 阅读1分钟
原文链接: github.com

一个基于原生的nio实现的玩具级别的httpserver。仅实现get/post方法和部分http请求/响应头。之后将实现一个完整的webserver。

目前实现的功能

  • get/post方法
  • 静态文件传输
  • http 参数传递,支持url和请求体两种方式
  • 支持长链接,暂不支持http pipeline
  • 支持部分请求/响应头
  • 支持cookie
  • 支持session
  • 支持用户实现HttpHandle接口,通过Controller注解产生动态web内容

如何使用

  • 下载MineServer-core-jar-with-dependencies.jar到本地目录,比如/home/mineserver/test
  • 使用命令mvn install:install-file -Dfile=/home/mineserver/test/MineServer-core-jar-with-dependencies.jar -DgroupId=me.stevenkin.http -DartifactId=mineserver-core -Dversion=1.0-SNAPSHOT -Dpackaging=jar将jar包安装到本地仓库
  • 新建一个工程,用我提供的pom.xml构建,里面有必要的依赖和插件配置,如下:
  
    me.stevenkin.http
    mineserver-core
    1.0-SNAPSHOT
  
  • 在新建工程的resources目录添加server.properties,在里面写入您的配置,比如:
#server的名字,在http响应头中使用
server = MineServer
#端口号
port = 8080
#server映射的本地目录
basePath = /home/wjg/server/
#主机名(这个暂时没什么用)
host = localhost
#server线程池中的线程数
coreThreadCount = 10
  • src目录新建java文件,写入您的动态http实现类。要实现HttpHandle接口,用Controller进行注解(这点类似与servlet 3.0中的写法)
@Controller(method = HttpParser.METHOD.GET,urlPatten = "/get",initParameters = {
        @InitParameter(key="key1",value="value1"),
        @InitParameter(key="key2",value="value2")
})
public class TestHandle extends AbstractHandle {
    @Override
    public void service(HttpRequest httpRequest, HttpResponse httpResponse) throws Exception {
        Map params = httpRequest.getParams();
        for(Map.Entry entry : params.entrySet()){
            System.out.println(entry.getKey()+":"+entry.getValue());
        }
        System.out.println();
        Iterator iterator = getInitParameterNames();
        while(iterator.hasNext()){
            String key = iterator.next();
            System.out.println(key+":"+getInitParameter(key));
        }
        char[] chars = {'h','e','l','l','o',',','w','o','r','l','d'};
        Writer writer = httpResponse.getWrite();
        writer.write(chars);
        writer.flush();
    }
}
  • 使用mvn clean package打出jar包,比如MineServer-test-jar-with-dependencies.jar,然后使用java -jar MineServer-test-jar-with-dependencies.jar即可运行。