NanoHttpd只在Android上面运行即可,在其他平台还是Springboot吧
现有的安卓上面的web服务端软件还是比较少的,SpringBoot又移植不过去(有人移植成功的话,希望分享下哦),所以暂时可用的就是NanoHttpd和AndServer,两个都试了下,AndServer配置太麻烦了,虽然有类SpringBoot语法,但搞来搞去的,发现这玩意版本好几个,示例和代码还有差别,最终没搞成功,就放弃了,最终选择NanoHttpd。
NanoHttpd是一个对ServerSocket做的一个简易封装的web服务端,里面的每个子Socket都是new的线程来跑,结构比较简单,性能的话,还行,测试的时候几个人狂刷界面也没问题,所以也就够了,一般安卓上运行的也不会特别大的并发,真有那么大就换SpringBoot,换主机,个人建议是换总监。
不要引入库,直接下载代码;没事可以看看里面怎么写的,有问题可以直接改了,反正也就那回事了
从Github下载即可https://gitcode.net/mirrors/nanohttpd/nanohttpd.git,下载下来大概是下面这结构:
core: 里面就是NanoHttpd的关键代码了,把里面的代码复制到工程即可(里面的org那个文件夹哦)
fileupload: 里面有个上传示例,可以看看,直接可以用
其他的文件夹都是例子,重定向,路由之类的,没啥用,没事可以看看
这里涉及加载本身的资源和加载上传的资源。所以需要提前做好规划,比如上传的资源统一在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内容会不起作用!!
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还是可以用用的