AndServer
是一个Android
的Web
服务器, 支持部署动态网站和静态网站, 支持写Http
接口,和Java
的Servlet
一样。
QQ技术交流群:46523908,加群请阅读群行为规范。
- 部署动态网站。
- 部署静态网站。
- 动态Http API,就是我们通常说的服务器接口。
- 接受客户端文件上传。
- 接受客户端下载文件。
- Gradle
compile 'com.yanzhenjie:andserver:1.0.2'
- Maven
<dependency>
<groupId>com.yanzhenjie</groupId>
<artifactId>andserver</artifactId>
<version>1.0.2</version>
<type>pom</type>
</dependency>
- Eclipse Download Jar File
最好的教程是sample
,请下载查看,然后结合README就更清晰了。
AndServer andServer = new AndServer.Build()
...
.build();
// 创建服务器。
Server mServer = andServer.createServer();
...
// 启动服务器。
mServer.start();
...
// 停止服务器。
mServer.stop();
...
// 服务器正在运行吗?
boolean running = mServer.isRunning();
AndServer andServer = new AndServer.Build()
.port(8080) // 默认是8080,Android平台允许的端口号都可以。
.timeout(10 * 1000) // 默认10 * 1000毫秒。
...
.build();
...
部署网站是通过Website
接口,你也可以自己实现这个接口,当然AndServer
已经提供了两个默认实现:
如果用上面两个实现注册你的网站,那么你的默认首页(index.html
)是:
http://ip:port/
http://ip:port/youPath
http://ip:port/youPath/index.html
Wesite wesite = new AssetsWebsite(AssetManager, youPath);
// 或者
Wesite wesite = new StorageWebsite(youPath);
AndServer andServer = new AndServer.Build()
...
.website(wesite);
.build();
如果你的网站在assets
下,那么你就用AssetsWebsite
来部署你的网站。
使用方法是:
AssetManager mAssetManager = getAssets(); //AssetManager can not be closed.
Wesite wesite = new AssetsWebsite(mAssetManager, youPath);
- 如果你的网站在
assets
根目录下, 你的path
就填""
,比如:
Wesite wesite = new AssetsWebsite(mAssetManager, "");
那么你的默认首页访问地址就是:
http://ip:port
http://ip:port/index.html
那么你的其它页面访问地址是:
http://ip:port/login.html
http://ip:port/error.html
比如:
http://192.168.1.12:8080/index.html
http://192.168.1.12:8080/login.html
- 如果你的网站根目录在
assets
的子目录下,那么你传入assets
的相对目录地址就好了比如你的网站在assets
下web
目录,例如:
Wesite wesite = new AssetsWebsite(mAssetManager, "web");
那么你的默认首页访问地址就是:
http://ip:port
http://ip:port/web
http://ip:port/web/index.html
那么你的其它页面访问地址是:
http://ip:port/web/login.html
http://ip:port/web/error.html
例如:
http://192.168.1.12:8080/
http://192.168.1.12:8080/index.html
http://192.168.1.12:8080/web/index.html
http://192.168.1.12:8080/web/index.html
http://192.168.1.12:8080/web/login.html
如果你的网站在assets
下,那么你就用StorageWebsite
来部署你的网站,比如你的网站在SD卡下时。
使用方法是:
Wesite wesite = new StorageWebsite(youPath);
它很简单,只要传入你的网站的存储目录地址即可,例如你的网站在SD卡下的www
目录:
File file = new File(Environment.getExternalStorageDirectory(), "www");
String websiteDirectory = file.getAbsolutePath();
Wesite wesite = new StorageWebsite(websiteDirectory);
访问地址和AssetsWebsite
的道理相同。
Http API是通过RequestHandler
接口来注册的,它是一个java interface
,它和Java
的Servlet
一样。
你需要实现这个接口,然后在AndServer
注册即可,例如:
public class RequestLoginHandler implements RequestHandler {
@Override
public void handle(HttpRequest req, HttpResponse res, HttpContext con) {
Map<String, String> params = HttpRequestParser.parse(request);
// Request params.
String userName = params.get("username");
String password = params.get("password");
if ("123".equals(userName) && "123".equals(password)) {
StringEntity stringEntity = new StringEntity("Login Succeed", "utf-8");
response.setEntity(stringEntity);
} else {
StringEntity stringEntity = new StringEntity("Login Failed", "utf-8");
response.setEntity(stringEntity);
}
}
}
然后在AndServer
中注册:
AndServer andServer = new AndServer.Build()
...
.registerHandler("login", new RequestLoginHandler())
.build();
现在你就得到了一个唯一的访问地址:http://ip:port/login
, 例如:
http://192.168.1.12:8080/login?username=123&password=123
文件下载和文件上传的例子请下载sample
查看。
在Html
的form
的action
中填入你注册RequestHandler
时的key
就,然后在RequestHandler
的handle(HttpRequest, HttpResponse, HttpContext)
方法就可以获取form
提交的参数了。
比如我们上面注册Login RequestHandler
在form
中这样使用:
<form id="form1" method="post" action="login">
...
</form>
private Server.Listener mListener = new Server.Listener() {
@Override
public void onStarted() {
// 服务器启动成功.
}
@Override
public void onStopped() {
// 服务器停止了,一般是开发者调用server.stop()才会停止。
}
@Override
public void onError(Exception e) {
// 服务器启动发生错误,一般是端口被占用。
}
};
AndServer andServer = new AndServer.Build()
...
.listener(mListener)
.build();
#License
Copyright 2017 Yan Zhenjie
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.