1. 程式人生 > >【Android】- 搭建伺服器進行前後端的互動

【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:我來說(相比於傳統網頁應用,每一次跳轉都

MySQLMySQL伺服器與客戶的區別

關於MySQL伺服器和客戶端的區別一直沒有深究,今天突然想弄明白怎麼回事,其實也挺簡單的...現在記錄下 簡單地說,資料庫功能有兩種:“資料維護”、“資料訪問”。細一點地說,“維護”包括資料庫許可權、

AndroidApp與App之間的互動

今天剛好公司有一個Android無介面外掛化的列印App需求,隨便在這裡寫下一點心得 知識點分析: 無介面 可比本公司的其他App任意呼叫 隱藏App的啟動圖示 一. 外掛App: (一)修改ac

Flask使用ajax進行前後互動

ajax前後端互動的使用已經非常普及了, 這種資料互動方式比表單提交資料帶給使用者的使用體驗更好一些。同時,利用ajax互動時資料傳輸一般使用json,我們可以很方便的管理我們所需要的資料。只需要定義好

AndroidUbuntu 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協議又是什麼呢,它是能讓我們在區域網上共享檔案和印表機的一種協議,也就是通過這個實現這個協議我們的客戶機就可以

AndroidRetrofit的使用(4)-Retrofit進行簡單的GET和POST訪問操作

1.GET方式提交資料 第一種方法: @GET("account/login.action") Call<JSONObject> login(@Query("<span styl

ESP8266ESP8266的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

JavaRed5伺服器搭建(實現線上直播,流媒體視訊播放)

引言 流媒體檔案是目前非常流行的網路媒體格式之一,這種檔案允許使用者一邊下載一邊播放,從而大大減少了使用者等待播放的時間。另外通過網路播放流媒體檔案時,檔案本身不會在本地磁碟中儲存,這樣就節省了大量的磁碟空間開銷。正是這些優點,使得流媒體檔案被廣泛應用於網路播放。 流媒體伺服

Android 原始碼編譯詳解伺服器硬體配置及機型推薦-2016/06

做 Android系統開發多年,開發環境都是入職就搭建好了,入職時拿個賬號密碼就直接開始搞開發了,年初換了新公司,所有的專案都是剛起步,一切環境都要重新搭建,有幸當此重任,因為自己之前也只是用過,並沒