Skip to content

Latest commit

 

History

History
257 lines (203 loc) · 6.29 KB

README-CN.md

File metadata and controls

257 lines (203 loc) · 6.29 KB

AndServer-CN

AndServer是一个AndroidWeb服务器, 支持部署动态网站和静态网站, 支持写Http接口,和JavaServlet一样。

QQ技术交流群:46523908,加群请阅读群行为规范


特点

  1. 部署动态网站。
  2. 部署静态网站。
  3. 动态Http API,就是我们通常说的服务器接口。
  4. 接受客户端文件上传。
  5. 接受客户端下载文件。

依赖

  • 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>

使用方法

最好的教程是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

注册网站到AndServer

Wesite wesite = new AssetsWebsite(AssetManager, youPath);
// 或者
Wesite wesite = new StorageWebsite(youPath);

AndServer andServer = new AndServer.Build()
    ...
    .website(wesite);
    .build();

AssetsWebsite的使用

如果你的网站在assets下,那么你就用AssetsWebsite来部署你的网站。

使用方法是:

AssetManager mAssetManager = getAssets(); //AssetManager can not be closed.

Wesite wesite = new AssetsWebsite(mAssetManager, youPath);
  • 如果你的网站在assets根目录下, 你的path就填"",比如:

web_assets.png

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的相对目录地址就好了比如你的网站在assetsweb目录,例如:

web_assets.png

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

StorageWebsite的使用

如果你的网站在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

Http API是通过RequestHandler接口来注册的,它是一个java interface,它和JavaServlet一样。

你需要实现这个接口,然后在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表单提交

Htmlformaction中填入你注册RequestHandler时的key就,然后在RequestHandlerhandle(HttpRequest, HttpResponse, HttpContext)方法就可以获取form提交的参数了。

比如我们上面注册Login RequestHandlerform中这样使用:

<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.