【Android】- 搭建伺服器進行前後端的互動
Web服務端和客戶端的互動,Okhttp請求的方式,包括get 和 post ,請求圖片,伺服器的搭建。
1.下載tomcat和Eclipse
找到相應的版本進行下載,並進行環境的搭配
2.下載struts框架,進行管理
找到最新版本進行下載:
3.Eclipse新建web專案,引入struts
3.1 把我們剛才下載好的struts解壓找到apps目錄下的struts2-blank.war包並進行解壓
解壓完成後進入到WEB-INF的lib資料夾下的jar檔案全部拷貝到MyEclipse專案中的WEB-INF中的lib資料夾下
3.2 進入到struts下的WEB-INF中找到classes資料夾下的struts.xml拷貝到專案中的src下
3.3 進入到struts下的WEB-INF中找到web.xml檔案開啟把其中的兩個filter標籤內容拷貝到專案中的web.xml中
3.4 拷貝完成後進入到剛才我們拷貝的struts.xml
修改第一個constant標籤的值value 為true
刪除package標籤下的所以標籤,儲存完成。
3.5 開啟服務
右鍵Tomcat v8.5 Server 點選Add And Remove選擇新建的專案Add到Configured中,點選Finish
圖中的OkHttp即為我新建的專案的名稱,完成之後開啟服務。
觀察控制檯,若控制檯出現以下所示,即為開啟成功。
4.編寫服務端程式碼
新建一個UserAction繼承ActionSupport,模擬使用者的登陸
public class UserAction extends ActionSupport{
/**
* 模擬使用者登陸
*/
private String name;
private String pwd;
public String login(){
System.out.println("name:"+name +"/pwd:"+pwd);
return null;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
如何在瀏覽器中去輸入地址,訪問的login方法呢?
開啟struts.xml,在package標籤下新增
<action name="login" class="com.okhttp.action.UserAction" method="login">
</action>
class中為相應的類名
在瀏覽器中寫入name為login的路徑,就會找到這個類class下的這個方法method
重啟服務,在瀏覽器下輸入:http://192.168.0.101:8080/OkHttp/login?name=hxl&pwd=123456
http://192.168.0.101:8080為協議和埠號,埠號預設為8080,協議可以輸入ifconfig檢視,
OkHttp為專案的名稱,login為name路徑。
5.在Android客戶端進行Get操作
private String url = "http://192.168.0.101:8080/OkHttp/"; private OkHttpClient okHttpClient;
//1.建立OkhttpClient物件 okHttpClient = new OkHttpClient();
//2.構建request物件 Request request = new Request.Builder() .get() .url(url+"login?name=zp&pwd=12345678") .build(); //3.獲得call物件 Call call = okHttpClient.newCall(request); //4.非同步執行 call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { Log.e("onFailure", "onFailure: "+"fail"); } @Override public void onResponse(Call call, Response response) throws IOException { if (response.isSuccessful()){ String string = response.body().string(); Log.e("onResponse", "onResponse: "+string ); } } });
在服務端UserAction類中新增以下內容,客戶端請求時,服務端可以返回內容
public String login() throws IOException{ System.out.println("name:"+name +"/pwd:"+pwd); //和客戶端進行互動,使用者請求時返回的欄位 HttpServletResponse response = ServletActionContext.getResponse(); PrintWriter writer = response.getWriter(); writer.write("login success"); writer.flush(); return null; }
6.在Android客戶端進行POST操作
//1.建立OkhttpClient物件 okHttpClient = new OkHttpClient();//2.構造FormBody物件,並新增相應欄位FormBody formBody = new FormBody.Builder() .add("name","hxl") .add("pwd","123456") .build();Request request = new Request.Builder() .post(formBody) .url(url+"login") .build();Call call = okHttpClient.newCall(request);call.enqueue(new Callback() { @Overridepublic void onFailure(Call call, IOException e) { Log.e("onFailure", "onFailure: "+"fail"); } @Overridepublic void onResponse(Call call, Response response) throws IOException { if (response.isSuccessful()){ } }});
7.在Android客戶端進行Post String操作
客戶端程式碼:
okHttpClient = new OkHttpClient();
RequestBody requestBody = RequestBody.create(MediaType.parse("text/plain;chaset=utf-8"), "{name:hxl,pwd:123456}"); Request request = new Request.Builder() .url(url+"postString") .post(requestBody) .build(); Call call = okHttpClient.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { Log.e("onFailure", "onFailure: "+"fail"); } @Override public void onResponse(Call call, Response response) throws IOException { if (response.isSuccessful()){ } } }); 服務端:在UserAction類中新建方法
postString(),並在struts.xml進行配置: <action name="postString" class="com.okhttp.action.UserAction" method="postString"> </action>
程式碼:public String postString() throws IOException{
HttpServletRequest request = ServletActionContext.getRequest();
ServletInputStream is = request.getInputStream();
StringBuffer buffer = new StringBuffer();
int len = 0;
byte[] buf = new byte[1024];
//將內容迴圈讀取到byte中
while((len = is.read(buf))!=-1){
buffer.append(new String(buf,0,len));
}
System.out.println(buffer.toString().trim());
return null;
}
8.在Android客戶端進行檔案上傳操作
Android客戶端:
okHttpClient = new OkHttpClient();String dir = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "Pictures"+File.separator+"Screenshots";File file = new File(dir,"S70416-11283044.jpg");if (!file.exists()){ return;}RequestBody requestBody = RequestBody.create(MediaType.parse("application/octet-stream"),file);Request request = new Request.Builder() .url(url+"postFile") .post(requestBody) .build();Call call = okHttpClient.newCall(request);call.enqueue(new Callback() { @Overridepublic void onFailure(Call call, IOException e) { } @Overridepublic void onResponse(Call call, Response response) throws IOException { if (response.isSuccessful()){ } }});服務端:
public String postFile() throws IOException{
HttpServletRequest request = ServletActionContext.getRequest();
ServletInputStream is = request.getInputStream();
//dir為tomcat部署下的wtpwebapps資料夾,files為新建的資料夾,圖片會儲存到files資料夾下
String dir = ServletActionContext.getServletContext().getRealPath("files");
File file = new File(dir,"photo.jpg");
FileOutputStream fos = new FileOutputStream(file);
int len = 0;
byte[] buf = new byte[1024];
//將內容迴圈讀取到byte中
while((len = is.read(buf))!=-1){
fos.write(buf, 0, len);
}
System.out.println(fos.toString());
fos.flush();
fos.close();
return null;
}
若以上上傳圖片出現錯誤:
com.opensymphony.xwork2.config.ConfigurationException:No result defined for action com.okhttp.action.UserAction
and result input at com.opensymphony.xwork2.DefaultActionInvocation.executeResult...
解決辦法:
在struts.xml中新增:
<constant name="struts.multipart.maxSize" value="**"></constant>
當檔案上傳大於2M時會出現以上異常,*號表示檔案的大小的限制
相關推薦
【Android】- 搭建伺服器進行前後端的互動
Web服務端和客戶端的互動,Okhttp請求的方式,包括get 和 post ,請求圖片,伺服器的搭建。 1.下載tomcat和Eclipse 找到相應的版本進行下載,並進行環境的搭配 2.下載struts框架,進行管理 找到最新版本進行下載: 3.Eclipse新
【原創】概述總結基於前後端的Web微博應用
進一步 info get、post、 下載 復雜 ring 請求協議 更新 前後端分離 一、需求調研 二、DB設計 三、My——負責個人信息管理的開發,包括信息查看與修改; 1.前端 SPA:我來說(相比於傳統網頁應用,每一次跳轉都
【MySQL】MySQL伺服器與客戶端的區別
關於MySQL伺服器和客戶端的區別一直沒有深究,今天突然想弄明白怎麼回事,其實也挺簡單的...現在記錄下 簡單地說,資料庫功能有兩種:“資料維護”、“資料訪問”。細一點地說,“維護”包括資料庫許可權、
【Android】App與App之間的互動
今天剛好公司有一個Android無介面外掛化的列印App需求,隨便在這裡寫下一點心得 知識點分析: 無介面 可比本公司的其他App任意呼叫 隱藏App的啟動圖示 一. 外掛App: (一)修改ac
Flask使用ajax進行前後端互動
ajax前後端互動的使用已經非常普及了, 這種資料互動方式比表單提交資料帶給使用者的使用體驗更好一些。同時,利用ajax互動時資料傳輸一般使用json,我們可以很方便的管理我們所需要的資料。只需要定義好
【Android】Ubuntu 16.04搭建Android開發編譯環境
jdk8 per 參考 prot google官網 markdown ins 由於 log 一. 通用Android環境和工具配置 1. 系統更新升級 sudo apt-get update sudo apt-get upgrade 2. 配置ntlmaps代理上網環境
【轉載】SSH伺服器端/etc/ssh/sshd_conf配置檔案詳解
[[email protected] ~]$cat /etc/ssh/sshd_config #Port 22
【Centos】搭建 SVN 伺服器
1、如果僅僅只是搭建 svn 伺服器: (a)、先檢查 svn 是否已經安裝了 rpm -qa subversion #輸入這個命令後,會出現 subversion 版本號 (b)、如果沒有安裝,使用下面命令: yum install subversio
【spring boot為例】如何徹底實現前後端徹底分離
問題描述:為了實現前後端的徹底分離,我們徹底放棄使用.jsp的方式在前端顯示頁面中穿插java程式碼,但是帶來的問題也比較明顯,就是前端向後臺發出請求的時候可能會出現跨域的問題,瀏覽器為了安全會阻止跨域請求。 目前有一種很好的方法是使用node.js來解決這個問題,現在我提
【網路程式設計】tcp伺服器與客戶端
TCP與UDP的區別: TCP傳輸控制協議(穩定)(慢一些) UDP使用者資料包協議(不穩定)(快一些) TCP有三次握手,a給b請求資料,b傳送請求確認併發送一個數據包,a收到資料包再發送確認訊息給b
【小程式實戰程式碼】小程式登入前後端程式碼實現
文章目錄 小程式登入程式碼 1、小程式登入的wxml程式碼 2、小程式登入的wxss程式碼 3、小程式js程式碼 註冊後端程式碼
【前後端互動版】JAVA匯出資料到Excel表格
【背景】新入公司臨時進行維護現場版本,在修復bug之餘多了一些需求,其中一個就是匯出資料到Excel。 0、生成Excel工具類 package com.onewaveinc.utils; import java.util.List; import org.apa
【git】搭建git伺服器 在 Linux 下搭建 Git 伺服器
在 Linux 下搭建 Git 伺服器 目錄 ① 安裝 Git ② 伺服器端建立 git 使用者,用來管理 Git 服務,併為 git 使用者設定密碼 ③ 伺服器端建立 Git 倉庫 ④ 客戶端 clone 遠端倉庫 ⑤ 客
【Linux】搭建Samba伺服器詳細介紹
什麼是Samba伺服器 我們都知道培養計劃上的檔案都在伺服器上,隨時可以拷貝下來,但是卻不知道這是Samba實現的功能呢 Samba伺服器主要是用來實現SMB協議的,那SMB協議又是什麼呢,它是能讓我們在區域網上共享檔案和印表機的一種協議,也就是通過這個實現這個協議我們的客戶機就可以
【Android】Retrofit的使用(4)-Retrofit進行簡單的GET和POST訪問操作
1.GET方式提交資料 第一種方法: @GET("account/login.action") Call<JSONObject> login(@Query("<span styl
【ESP8266】ESP8266的MQTT客戶端搭建教程(基於NONS_SDK_v2.0)
前言 MQTT是IBM開發的一個即時通訊協議,面向M2M和物聯網的連線,採用輕量級釋出和訂閱訊息傳輸機制,並且有可能成為物聯網的重要組成部分。 ESP8266是一款物美價廉的Wi-Fi晶片,整合Tensilica L106 鑽石系列的32 位處理器和片上S
【Samba】共享伺服器的搭建和相關許可權設定
1.檢視防護牆 [[email protected]~ ]# /etc/init.d/iptables status iptables:Firewall is not running. 如果沒有關閉的話將他規則清空並關閉 iptables–F
【Git】搭建Git伺服器——本地協議伺服器
環境 CentOS 7 x64 安裝 在終端下執行下面命令來檢查系統是否安裝git $ git --version 如果返回 “git: 未找到命令” 則需要安裝git。 執行下面命令安裝git和nfs $ sudo yum install -y
【Java】Red5伺服器搭建(實現線上直播,流媒體視訊播放)
引言 流媒體檔案是目前非常流行的網路媒體格式之一,這種檔案允許使用者一邊下載一邊播放,從而大大減少了使用者等待播放的時間。另外通過網路播放流媒體檔案時,檔案本身不會在本地磁碟中儲存,這樣就節省了大量的磁碟空間開銷。正是這些優點,使得流媒體檔案被廣泛應用於網路播放。 流媒體伺服
Android 原始碼編譯詳解【一】:伺服器硬體配置及機型推薦-2016/06
做 Android系統開發多年,開發環境都是入職就搭建好了,入職時拿個賬號密碼就直接開始搞開發了,年初換了新公司,所有的專案都是剛起步,一切環境都要重新搭建,有幸當此重任,因為自己之前也只是用過,並沒