这是根据NanoHttpd二次开发的一个轻量级,使用简单,功能比较强大的一个http服务框架.
可以实现:
-
支持get请求
-
支持post请求
-
支持文件上传
-
支持文件下载
-
支持自定义端口号
-
支持自定义静态资源目录(默认assets的根目录,也可以指定sd卡的自定义目录)
-
支持静态资源文件过滤(由于指定的是assets根目录,会有很多系统自带的xml文件,就做了这个)
-
支持注解的使用(这框架不用注解还真没法用)
-
支持以对象来响应
-
支持请求以对象接收
-
...
基本满足http服务的正常使用需求(硬是瞎编了那么多功能...)
注解 | 含义 |
---|---|
@RequestBody | 方法里的属性注解,使用该注解可指定以对象返回 主要用于处理json请求 |
@RequestParam("") | 方法里的属性注解,使用该注解可指定param值返回 主要用于处理get,post的请求 |
@RequestMapping("") | 方法注解, 使用该注解是映射url ,把url 指定到对应的方法中处理数据 |
@ResponseBody | 方法注解,使用该方法可以对象返回经过处理吐出json数据返回给客户端 |
以上注解的使用可看前面的图片
- gradle添加
compile 'cn.hotapk:fhttpserver:0.4.0'
- manifest添加权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
- 初始化
fHttpManager = FHttpManager.init(this, UserController.class);
fHttpManager.setPort(9999);
...
UserController.class 是进行url映射的类, 可添加多个这样的类
public class UserController {
@RequestMapping("userls")
public NanoHTTPD.Response getUserLs() {
return setResponse("user列表");
}
@ResponseBody
@RequestMapping("getuser")
public UserBean getUser() {
return new UserBean("admin", "admin");
}
...
- 开启http服务
fHttpManager.startServer();
- 文件下载
NanoHTTPD.Response response = NanoHTTPD.newChunkedResponse(NanoHTTPD.Response.Status.OK, "application/octet-stream", inputStream);//这代表任意的二进制数据传输。
response.addHeader("Accept-Ranges", "bytes");
response.addHeader("Content-Disposition", "attachment; filename="+"test.java")//可以这里返回文件名称
- 文件上传
/**
* 文件上传
*
* @param session
* @param fileDir 保存文件的目录
* @param parm 上传文件的参数
* @return
*/
public static boolean uploadFile(NanoHTTPD.IHTTPSession session, String fileDir, String parm) {
Map<String, String> files = new HashMap<>();
try {
session.parseBody(files);
Map<String, String> parms = session.getParms();
return FFileUtils.copyFileTo(files.get(parm), fileDir + "/" + parms.get(parm));
} catch (IOException e) {
e.printStackTrace();
} catch (NanoHTTPD.ResponseException e) {
e.printStackTrace();
}
return false;
}
- index.html 文件冲突
该框架默认打开index.html文件,如果不希望用这文件名可如下修改
fHttpManager.setIndexName(" ")
这块就不出详细demo了
可以到我另外一个项目查看
这方面就不讲了,主要使用注解反射实现,其它也没什么的了
FHttpServer
以上是FHttpServer框架的全部内容,谢谢观看,欢迎使用.
同时希望各位在使用中遇到什么问题或建议可以用以下联系方式进行反馈
简书地址 (感兴趣的话,不妨点赞支持下)