Android搭建HTTP服务器--AndServer
Android 搭建HTTP服务器--AndServer
概述
AndServer是Android平台的Web Server和Web Framework。它基于编译时注解提供了类似SpringMVC的注解和功能,如果您熟悉SpringMVC,则可以⾮常快速地掌握它。
特性
部署静态⽹站
使⽤注解开发Http Api
全局请求,使⽤注解,全局多个
全局异常处理器,使⽤注解,全局唯⼀
全局消息转换器,使⽤注解,全局唯⼀
依赖
添加依赖时请替换下述 {version} 字段为上公开的最新版本号。
dependencies {
implementation 'com.yanzhenjie.andserver:api:{version}'
annotationProcessor 'com.yanzhenjie.andserver:processor:{version}'
}
服务器(Server)
⼀个WebServer必须要涉及到的点是启动、停⽌、⽹络地址与端⼝监听、连接超时配置、SSL、状态监听、Socket的⼀些优化配置
等,AndServer也提供了这些能⼒。
在AndServer中,只需要启动服务器即可,其它组件AndServer会⾃动加载。AndServer的服务器的启动是在⼦线程中进⾏的,因此服务器的启动成功与否,必须使⽤
下⾯是针对AndServer的服务器管理⽰例代码:
public class ServerManager {
private static final String TAG = "ServerManager";
private Server mServer;
/**
* Create server.
*/
public ServerManager(Context context) {
InetAddress inetAddress = null;
try {
inetAddress = IpAddress(context)); //获取IP地址
Log.d(TAG, "ServerManager: getIpAddress ="+IpAddress(context));
} catch (UnknownHostException e) {
e.printStackTrace();
}
mServer = AndServer.serverBuilder(context)
.inetAddress(inetAddress) //地址
.port(8080) //端⼝
.timeout(10, TimeUnit.SECONDS) //延迟10s
.listener(new Server.ServerListener() { //监听Server
@Override
public void onStarted() {
// TODO The server started successfully.
Log.d(TAG, "onStarted: ");
}
@Override
public void onStopped() {
// TODO The server has stopped.
Log.d(TAG, "onStarted: ");
}
@Override
public void onException(Exception e) {
Log.e(TAG, "onException: ",e );
// TODO An exception occurred while the server was starting.
}
})
.build();
}
/**
* Start server.
*/
public void startServer() {
if (mServer.isRunning()) {
// TODO The server is already up.
} else {
mServer.startup();
}
}
/**
* Stop server.
*/
public void stopServer() {
if (mServer.isRunning()) {
mServer.shutdown();
} else {
Log.w("AndServer", "The server has not started yet.");
}
}
}
上⽂中有⼀段伪代码,作⽤是⽣成⼀个⽹络地址,⼀般我们都绑定本机在局域⽹中的IP地址。当然,如果你的设备有⼀个外⽹IP,你可以⽤外⽹IP来⽣成⼀个⽹络地址。
InetAddress inetAddress = ...;
例如,使⽤某个IP⽣成⽹络地址:
InetAddress inetAddress = ByName("192.168.1.11");
例如,使⽤某个域名⽣成⽹络地址:
InetAddress inetAddress = ByName("");
服务(Services)
在应⽤后台启动⼀个Services,⽤于开启和关闭服务器
android最新版Services⽰例代码:
public class MyServer extends Service {
private static final String TAG = "MyServer";
private ServerManager mServerManager;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
Log.d(TAG, "onCreate: mServerManager ="+mServerManager);
if (mServerManager==null){
mServerManager =new ServerManager(this);
}
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG, "onStartCommand: mServerManager ="+mServerManager);
mServerManager.startServer(); //开启服务器
StartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
if (mServerManager!=null){
mServerManager.stopServer(); //停⽌服务器
}
}
}
HTTP API
模拟⽤户登录的Http Api:
@RestController
public class UserController {
@GetMapping("/user/login")
String login(@RequestParam("account") String account,
@RequestParam("password") String password) {
if("123".equals(account) && "123".equals(password)) {
return "Login successful.";
} else {
return "Login failed.";
}
}
}
上述Http Api的请求地址是xxx:8080/user/login,请求⽅法是GET,客户端需带上帐号account参数和密码password参数,在帐号和密码都是123时,
我们返回给客户端的数据是Login successful,否则是Login failed,默认情况下的响应码是200。
@RestController
public class UserController {
@PostMapping("/user/get")
User login(@RequestParam("id") String id) {
User user = new User();
user.setId(id);
user.setName("AndServer");
return user;
}
}
在RestController中,返回值可以是String、可以是Model对象或者⽂件等。
你不需要任何注册或者配置,只需要启动服务器就可以通过浏览器或者测试⼯具访问上⾯的⼏个Http Api了。
注:需要在同⼀个局域⽹!
源码地址:
⽂档地址:
旧版⽂档:
最后:请留下您的赞!阿⾥嘎多.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论