Skip to content

Commit

Permalink
Parse post body according to ContentType.
Browse files Browse the repository at this point in the history
  • Loading branch information
YanZhenjie committed May 31, 2017
1 parent 37330f2 commit d7abd27
Show file tree
Hide file tree
Showing 26 changed files with 258 additions and 173 deletions.
15 changes: 6 additions & 9 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
/build
/.idea/
/.gradle/
/gradle/
/andserver/build/
/andserver/andserver.iml
/sample/build/
/sample/sample.iml
/AndServer.iml
/local.properties
.gradle
build
/captures/

*.iml
/local.properties
Binary file renamed Jar/andserver.jar → Jar/andserver-1.0.3.jar
Binary file not shown.
141 changes: 76 additions & 65 deletions README-CN.md
Original file line number Diff line number Diff line change
@@ -1,86 +1,90 @@
# AndServer-CN
`AndServer`是一个`Android``Web`服务器, 支持部署动态网站和静态网站, 支持写`Http`接口,和`Java``Servlet`一样。
`AndServer`是一个`Android``Web`服务器, 支持部署动态网站和静态网站, 支持写`Http`接口,和`Java``Servlet`一样。

QQ技术交流群:46523908,加群请阅读[群行为规范](https://github.com/yanzhenjie/SkillGroupRule)
QQ技术交流群:547839514
我的微博:[weibo.com/yanzhenjieit](http://weibo.com/yanzhenjieit)
我的主页:[www.yanzhenjie.com](http://www.yanzhenjie.com)
我的博客:[blog.yanzhenjie.com](http://blog.yanzhenjie.com)

----

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

# 依赖
# 依赖
* Gradle
```groovy
compile 'com.yanzhenjie:andserver:1.0.2'
compile 'com.yanzhenjie:andserver:1.0.3'
```

* Maven
```xml
<dependency>
<groupId>com.yanzhenjie</groupId>
<artifactId>andserver</artifactId>
<version>1.0.2</version>
<version>1.0.3</version>
<type>pom</type>
</dependency>
```

* Eclipse
[Download Jar File](./Jar/andserver.jar?raw=true)

# 使用方法
最好的教程是`sample`,请下载查看,然后结合**README**就更清晰了。
# 使用方法
最好的教程是`sample`,请下载查看,然后结合**README**就更清晰了。

## 创建服务器
## 创建服务器
```java
AndServer andServer = new AndServer.Build()
...
.build();

// 创建服务器。
// 创建服务器。
Server mServer = andServer.createServer();
...

// 启动服务器。
// 启动服务器。
mServer.start();
...

// 停止服务器。
// 停止服务器。
mServer.stop();
...

// 服务器正在运行吗?
// 服务器正在运行吗?
boolean running = mServer.isRunning();
```

## 端口号和响应超时设置
## 端口号和响应超时设置
```java
AndServer andServer = new AndServer.Build()
.port(8080) // 默认是8080,Android平台允许的端口号都可以。
.timeout(10 * 1000) // 默认10 * 1000毫秒。
.port(8080) // 默认是8080,Android平台允许的端口号都可以。
.timeout(10 * 1000) // 默认10 * 1000毫秒。
...
.build();
...
```

## 部署网站
部署网站是通过`Website`接口,你也可以自己实现这个接口,当然`AndServer`已经提供了两个默认实现:
## 部署网站
部署网站是通过`Website`接口,你也可以自己实现这个接口,当然`AndServer`已经提供了两个默认实现:

* [AssetsWebsite](./andserver/src/main/java/com/yanzhenjie/andserver/website/AssetsWebsite.java)
* [StorageWebsite](./andserver/src/main/java/com/yanzhenjie/andserver/website/StorageWebsite.java)

如果用上面两个实现注册你的网站,那么你的默认首页(`index.html`)是:
如果用上面两个实现注册你的网站,那么你的默认首页(`index.html`)是:
`http://ip:port/`
`http://ip:port/youPath`
`http://ip:port/youPath/index.html`

### 注册网站到AndServer
### 注册网站到AndServer
```java
Wesite wesite = new AssetsWebsite(AssetManager, youPath);
// 或者
// 或者
Wesite wesite = new StorageWebsite(youPath);

AndServer andServer = new AndServer.Build()
Expand All @@ -89,82 +93,84 @@ AndServer andServer = new AndServer.Build()
.build();
```

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

使用方法是:
使用方法是:
```java
AssetManager mAssetManager = getAssets(); //AssetManager can not be closed.

Wesite wesite = new AssetsWebsite(mAssetManager, youPath);
```

* 如果你的网站在`assets`根目录下, 你的`path`就填`""`,比如:
* 如果你的网站在`assets`根目录下, 你的`path`就填`""`,比如:

![web_assets.png](./image/web_assets.png)
```java
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/website`目录,例如:
* 如果你的网站根目录在`assets`的子目录下,那么你传入`assets`的相对目录地址就好了比如你的网站在`assets``web`目录,例如:

![web_assets.png](./image/web_assets_son.png)
```java
Wesite wesite = new AssetsWebsite(mAssetManager, "web/www");
Wesite wesite = new AssetsWebsite(mAssetManager, "web");
```

那么你的默认首页访问地址就是:
那么你的默认首页访问地址就是:
`http://ip:port`
`http://ip:port/web/www`
`http://ip:port/web/www/index.html`
`http://ip:port/web`
`http://ip:port/web/index.html`

那么你的其它页面访问地址是:
`http://ip:port/web/www/login.html`
`http://ip:port/web/www/error.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/www/index.html
http://192.168.1.12:8080/web/www/index.html
http://192.168.1.12:8080/web/www/login.html
http://192.168.1.12:8080
http://192.168.1.12:8080/web
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卡下时。
### StorageWebsite的使用
如果你的网站在`assets`下,那么你就用`StorageWebsite`来部署你的网站,比如你的网站在SD卡下时。

使用方法是:
使用方法是:
```java
Wesite wesite = new StorageWebsite(youPath);
```

它很简单,只要传入你的网站的存储目录地址即可,例如你的网站在SD卡下的`www`目录:
它很简单,只要传入你的网站的存储目录地址即可,例如你的网站在SD卡下的`www`目录:
```java
File file = new File(Environment.getExternalStorageDirectory(), "www");
String websiteDirectory = file.getAbsolutePath();

Wesite wesite = new StorageWebsite(websiteDirectory);
```

访问地址和`AssetsWebsite`的道理相同。
访问地址和`AssetsWebsite`的道理相同。

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

你需要实现这个接口,然后在`AndServer`注册即可,例如:
你需要实现这个接口,然后在`AndServer`注册即可,例如:
```java
public class RequestLoginHandler implements RequestHandler {

Expand All @@ -187,47 +193,47 @@ public class RequestLoginHandler implements RequestHandler {
}
```

然后在`AndServer`中注册:
然后在`AndServer`中注册:
```java
AndServer andServer = new AndServer.Build()
...
.registerHandler("login", new RequestLoginHandler())
.build();
```

现在你就得到了一个唯一的访问地址:`http://ip:port/login`, 例如:
现在你就得到了一个唯一的访问地址:`http://ip:port/login`, 例如:
```
http://192.168.1.12:8080/login?username=123&password=123
```

文件下载和文件上传的例子请下载`sample`查看。
文件下载和文件上传的例子请下载`sample`查看。

## Html表单提交
`Html``form``action`中填入你注册`RequestHandler`时的`key`就,然后在`RequestHandler``handle(HttpRequest, HttpResponse, HttpContext)`方法就可以获取`form`提交的参数了。
## Html表单提交
`Html``form``action`中填入你注册`RequestHandler`时的`key`就,然后在`RequestHandler``handle(HttpRequest, HttpResponse, HttpContext)`方法就可以获取`form`提交的参数了。

比如我们上面注册`Login RequestHandler``form`中这样使用:
比如我们上面注册`Login RequestHandler``form`中这样使用:
```html
<form id="form1" method="post" action="login">
...
</form>
```

## 监听服务器的状态
## 监听服务器的状态
```java
private Server.Listener mListener = new Server.Listener() {
@Override
public void onStarted() {
// 服务器启动成功.
// 服务器启动成功.
}

@Override
public void onStopped() {
// 服务器停止了,一般是开发者调用server.stop()才会停止。
// 服务器停止了,一般是开发者调用server.stop()才会停止。
}

@Override
public void onError(Exception e) {
// 服务器启动发生错误,一般是端口被占用。
// 服务器启动发生错误,一般是端口被占用。
}
};

Expand All @@ -237,7 +243,12 @@ AndServer andServer = new AndServer.Build()
.build();
```

#License
# 我的公众号
我时常会推送一些技术文章和生活趣事,微信搜索**严振杰**或者扫码下方二维码关注我的公众号。

![微信公众号](./image/wechat.jpg)

# License
```text
Copyright 2017 Yan Zhenjie
Expand Down
Loading

0 comments on commit d7abd27

Please sign in to comment.