【Android】NanoHttpd学习(一)

文章目录

  • 前言
  • 一、NanoHttpd是什么?
  • 二、使用步骤
    • 1.引入库
    • 2.资源重定向
    • 3.路由
  • 总结


前言

NanoHttpd只在Android上面运行即可,在其他平台还是Springboot吧

现有的安卓上面的web服务端软件还是比较少的,SpringBoot又移植不过去(有人移植成功的话,希望分享下哦),所以暂时可用的就是NanoHttpd和AndServer,两个都试了下,AndServer配置太麻烦了,虽然有类SpringBoot语法,但搞来搞去的,发现这玩意版本好几个,示例和代码还有差别,最终没搞成功,就放弃了,最终选择NanoHttpd。


一、NanoHttpd是什么?

NanoHttpd是一个对ServerSocket做的一个简易封装的web服务端,里面的每个子Socket都是new的线程来跑,结构比较简单,性能的话,还行,测试的时候几个人狂刷界面也没问题,所以也就够了,一般安卓上运行的也不会特别大的并发,真有那么大就换SpringBoot,换主机,个人建议是换总监。

二、使用步骤

1.引入库

不要引入库,直接下载代码;没事可以看看里面怎么写的,有问题可以直接改了,反正也就那回事了
从Github下载即可https://gitcode.net/mirrors/nanohttpd/nanohttpd.git,下载下来大概是下面这结构:【Android】NanoHttpd学习(一)_第1张图片
core: 里面就是NanoHttpd的关键代码了,把里面的代码复制到工程即可(里面的org那个文件夹哦)
fileupload: 里面有个上传示例,可以看看,直接可以用
其他的文件夹都是例子,重定向,路由之类的,没啥用,没事可以看看

2.资源重定向

这里涉及加载本身的资源和加载上传的资源。所以需要提前做好规划,比如上传的资源统一在upload文件夹,然后传来的路径一定是upload开头,否则就是默认资源(assets下面的)
具体示例:

public static InputStream read(String file) throws IOException
{
    if( file.startsWith("upload/") )
    {
        return new FileInputStream(PathConfig.uploadDir + file.substring(7));
    }
    _am.open(file);
}

里面的_am就是this.getApplicationContext().getAssets()
PathConfig.uploadDir这个就自己定义了一个upload文件夹路径

返回前端

Response.newFixedLengthResponse(Status.OK,getMime(ext),fis,fis.available());

ext是文件扩展名,fis就是read的返回值;
记得一定要带mimeType返回资源,不然一些vue生成的会不认,比如js,直接返回js内容会不起作用!!

3.路由

NanoHttpd没有@RequestMapping标签,所以要自己做一个转发的配置,其实这样也挺好,可以在转发上面做一些自己想要的操作
这里可先做一些友好的限制:数据接口必须是post

public static void init(HashMap<String, ClassHandleVO> _dictHandle)
{
	_dictHandle.put("/login", new ClassHandleVO(LoginHandle.class, false, false) );
	_dictHandle.put("/logout", new ClassHandleVO(LoginHandle.class, false) );
}

构造一个字典,key是url,value是处理类ClassHandleVO,ClassHandleVO构造函数如下

public ClassHandleVO( Class<?> clasz, boolean edit, boolean login)
{
    this.clasz = clasz;
    this.checkEdit = edit;
    this.checkLogin = login;
}

第一参数就是要实际处理的对象class
第二个和第三个就是权限了,可以自行添加删除

最后就是最终的处理接口了

if(_dictHandle.containsKey(url))
{
	ClassHandleVO co = _dictHandle.get(url);
	if( co != null )
	{
		if( co.checkLogin )
		{
			//检查是否登录
		}
		if( co.checkEdit )
		{
			//检查是否有权限
		}
		BaseHandle bh = (BaseHandle)co.clasz.newInstance();
		if( bh != null )
		{
			return bh.handle(session); //处理接口数据,并返回
		}
	}
}

总结

NanoHttpd用下来还是不难的,就是可能有点点轮子要造,稍微有点上手度吧,不过对新手来说,springboot的配置也会是门槛,所以NanoHttpd还是可以用用的

你可能感兴趣的:(Android,android,java,学习)