移动端搭建Http Server(五)—— 实现URL路由模块

在前面几篇文章中已经实现了移动端Server的关键前两步:监听远程连接解析HTTP Headers中的数据,本文将要设计一下路由规则

1.URL路由规则

简单来讲就是客户端请求一个URL,服务器分发给哪个服务来处理

移动端Server要实现两个功能:

  • 让其他设备打开APP中内置好的页面
  • 接收其他设备传输给APP的图片

我们对这两种行为定义路由规则:
/static/ :定义为下载文件的访问路径
/imageupload/ :定义为上传文件的访问路径

2.实现思路

  • 获取URL相对路径
  • 定义IUriResourceHandler并注册相应的方法
  • 遍历Handler

3.获取URL相对路径

在onAcceptRemotePeer中获取URL,只需要获取头信息的第一行,很简单

String resourceUri = StreamToolKit.readLine(in).split(" ")[1];
System.out.print("resourceUri is :" + resourceUri);

4.定义IUriResourceHandler并注册相应的方法

public interface IUriResourceHandler {

    boolean accept(String uri);

    void  handle(String uri, HttpContext httpContext);

}

实现类ResourceInAssetsHandler处理下载请求

public class ResourceInAssetsHandler implements IUriResourceHandler {

    private  String mAcceptPrefix = "/static/";

    @Override
    public boolean accept(String uri) {
        return uri.startsWith(mAcceptPrefix);//以prefix结尾时返回true
    }

    @Override
    public void handle(String uri, HttpContext httpContext) throws IOException {
        OutputStream os = httpContext.getUnderlySocket().getOutputStream();
        PrintWriter writer = new PrintWriter(os);
        writer.println("HTTP/1.1 200 OK");
        writer.println();
        writer.println("from resource in assets handler");
        writer.flush();
    }
}

实现类UploadImageHandler处理上传请求

public class UploadImageHandler implements IUriResourceHandler {


    private  String mAcceptPrefix = "/upload_image/";

    @Override
    public boolean accept(String uri) {
        return uri.startsWith(mAcceptPrefix);//以prefix结尾时返回true
    }

    @Override
    public void handle(String uri, HttpContext httpContext) throws IOException {
        OutputStream os = httpContext.getUnderlySocket().getOutputStream();
        PrintWriter writer = new PrintWriter(os);
        writer.println("HTTP/1.1 200 OK");
        writer.println();//输出\r\n
        writer.println("from upload image handler");
        writer.flush();
    }
}

在SimpleHttpServer中增加注册Handler方法

public  void  registerResourceHandler(IUriResourceHandler handler){
        mResourceHandlers.add(handler);
    }

在MainActivity中注册两个Handler

mSimpleServer = new SimpleHttpServer(webConfig);
mSimpleServer.registerResourceHandler(new ResourceInAssetsHandler());
mSimpleServer.registerResourceHandler(new UploadImageHandler());
mSimpleServer.startAsync();

5.遍历Handler

在onAcceptRemotePeer中while循环后增加对Handlers的遍历

for (IUriResourceHandler handler : mResourceHandlers) {
    if (!handler.accept(resourceUri))
        continue;
    handler.handle(resourceUri, httpContext);
}

6.运行验证

在浏览器中输入http://192.168.1.104:8088/static/1
http://192.168.1.104:8088/upload_image/1

这里写图片描述

这里写图片描述

这篇就到这里结束了,最后还是附上github源码地址:
https://github.com/jianiuqi/AndroidServer

下篇将会实现 移动端搭建Http Server(六)—— 实现APP中内置静态网页

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值