這次應(yīng)老板要求實(shí)現(xiàn)在設(shè)備端搭建一個(gè)webserver,供內(nèi)網(wǎng)直接使用實(shí)現(xiàn)需要的業(yè)務(wù)邏輯跑筝。絕了曲梗!身為android應(yīng)用開(kāi)發(fā)竟然需要了解web服務(wù)器妓忍。在這之前先嘗試了i-jetty愧旦,但還是不太利于android端的開(kāi)發(fā),所以于是有了這篇給大家介紹使用一個(gè)強(qiáng)大的Android端的Web服務(wù)器旁瘫。
先說(shuō)下應(yīng)用場(chǎng)景
按照國(guó)際慣例琼蚯,肯定要舉個(gè)栗子!如同前言所說(shuō)宁仔,其實(shí)這個(gè)web服務(wù)器的應(yīng)用場(chǎng)景非常廣而且方便峦睡。
1.如果企業(yè)內(nèi)多臺(tái)android設(shè)備需要一些系統(tǒng)配置,那么就需要管理員一一跑到設(shè)備前打開(kāi)設(shè)置>填寫(xiě)參數(shù)>吧嗒吧嗒吧嗒....(繁瑣)煎谍。那么如果每臺(tái)設(shè)備提供這樣一個(gè)可以遠(yuǎn)程操作直接配置的web界面呢W璐!
2.如果希望做一個(gè)單機(jī)版業(yè)務(wù)(場(chǎng)景較小事哭,又不想要購(gòu)置服務(wù)器)瓜富,供內(nèi)網(wǎng)直接使用操作与柑。想象android設(shè)備就是個(gè)服務(wù)器,還可以直接辦公pc登錄web進(jìn)行各種業(yè)務(wù)操作价捧,體驗(yàn)就很好=狍!
是不是簡(jiǎn)單的兩個(gè)例子,就能感受到好處了恍涂,其他什么局域網(wǎng)內(nèi)下載上傳的就先不說(shuō)了植榕!
快速入門使用
這里先給上AndServer開(kāi)源項(xiàng)目,以及作者的詳細(xì)介紹AndServer炒瘸,一個(gè)Android端的web服務(wù)器,感謝作者的無(wú)私分享~~這里參考AndServer開(kāi)發(fā)文檔更有幫助
1.Sample
開(kāi)源項(xiàng)目?jī)?nèi)自帶了一實(shí)現(xiàn)用戶登錄的例子夜郁,通過(guò)表單請(qǐng)求服務(wù)器驗(yàn)證用戶和密碼返回結(jié)果竞端。
結(jié)合開(kāi)發(fā)手冊(cè)可直接清晰明地了解其中的使用方法庙睡。
這里設(shè)備端也就是服務(wù)器的ip地址是192.168.1.48,應(yīng)用端口默認(rèn)8080统台。
2.基于Sample修改的房間展板案例
需求場(chǎng)景:在Android房間展板屏上搭建一個(gè)AndServer
1.自定義web端界面(當(dāng)然是要拜托前端同事)
2.web端支持獲取展板狀態(tài)啡邑,和展板名稱等屬性
3.web端支持修改展板名稱等屬性
簡(jiǎn)單這實(shí)現(xiàn)三點(diǎn)谤逼,不過(guò)這三點(diǎn)也差不多能符合大部分情況了。
數(shù)據(jù)庫(kù)
數(shù)據(jù)庫(kù)當(dāng)然是必須的戚绕,這里使用的是GreenDao枝冀,關(guān)于android的GreenDao可自行查閱。
build后的實(shí)體類如下:
import org.greenrobot.greendao.annotation.Entity;
import org.greenrobot.greendao.annotation.Generated;
import org.greenrobot.greendao.annotation.Id;
@Entity
public class DaoRoom {
@Id(autoincrement = true)
private Long id;
//房間名稱
private String roomName;
//容納人數(shù)
private Integer number;
//房間設(shè)備
private String equipment;
@Generated(hash = 800482737)
public DaoRoom(Long id, String roomName, Integer number, String equipment) {
this.id = id;
this.roomName = roomName;
this.number = number;
this.equipment = equipment;
}
@Generated(hash = 332995214)
public DaoRoom() {
}
public String getRoomName() {
return this.roomName;
}
public void setRoomName(String roomName) {
this.roomName = roomName;
}
public Integer getNumber() {
return this.number;
}
public void setNumber(Integer number) {
this.number = number;
}
public String getEquipment() {
return this.equipment;
}
public void setEquipment(String equipment) {
this.equipment = equipment;
}
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
}
提供web端http api接口
這里就要介紹到AndServer的好用之處了球切,RequestMapping吨凑。
它可以規(guī)定一個(gè)Http Api請(qǐng)求路徑端盆、請(qǐng)求方法费封、參數(shù)校驗(yàn)蒋伦、請(qǐng)求頭校驗(yàn)、Accept韧献、ContentType等重要規(guī)則研叫。
代碼如下:
import com.yanzhenjie.andserver.annotation.GetMapping;
import com.yanzhenjie.andserver.annotation.PathVariable;
import com.yanzhenjie.andserver.annotation.PostMapping;
import com.yanzhenjie.andserver.annotation.RequestBody;
import com.yanzhenjie.andserver.annotation.RequestMapping;
import com.yanzhenjie.andserver.annotation.RestController;
import com.yanzhenjie.andserver.http.HttpRequest;
import com.yanzhenjie.andserver.http.HttpResponse;
import com.yanzhenjie.andserver.sample.greendao.DaoUtil;
import com.yanzhenjie.andserver.sample.model.ResponseBean;
import com.yanzhenjie.andserver.sample.util.JsonUtils;
import com.yanzhenjie.andserver.sample.util.Logger;
import com.yanzhenjie.andserver.util.MediaType;
@RestController
@RequestMapping(path = "/room")
public class RoomController {
/**
* 查詢房間信息
* @return
*/
@GetMapping(path = "/info")
ResponseBean info() {
return DaoUtil.getRoomInfo();
}
/**
* 更新房間信息
* @param request
* @param response
* @param jsonStr
* @return
*/
@PostMapping(path = "/update",produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
ResponseBean booking(HttpRequest request, HttpResponse response, @RequestBody String jsonStr){
Logger.i("Body:"+JsonUtils.toJsonString(request.getBody()));
return DaoUtil.updateRoomInfo(jsonStr);
}
}
類上可直接添加@RequestMapping(path = "/room")簡(jiǎn)化嚷炉。路徑依次為/room/info和/room/update申屹,json通信,主要提供了GET房間屬性和POST更新房間屬性兩條。路徑
這里的ResponseBean類和DaoUtil數(shù)據(jù)庫(kù)操作工具可自行封裝修改哗讥。
當(dāng)然要驗(yàn)證接口了杆煞。這里因?yàn)橹粚?shí)現(xiàn)個(gè)單頁(yè)面demo,所以沒(méi)有對(duì)PageController做修改决乎。
替換我們的Website
AndServer提供了AssetsWebsite瑞驱、StorageWebsite、FileBrowser唤反,從名稱也能看出來(lái)彤侍,StorageWebsite需要指定web原文件在設(shè)備中的存儲(chǔ)路徑,好處是可以方便更換盏阶。這里應(yīng)場(chǎng)景使用的AssetsWebsite,可直接原文件替換sample內(nèi)的assets文件脑慧。
如圖所示:
結(jié)果
流程很簡(jiǎn)單闷袒,但是這個(gè)思路已經(jīng)可以做很多事情了!