1. 程式人生 > >微信小程式(一):微信小程式與伺服器的簡單鏈接

微信小程式(一):微信小程式與伺服器的簡單鏈接

生活無趣且不易,一起找點樂子吧。歡迎評論,和文章無關的東西也沒關係。

最近在寫小程式,有些問題,搜尋不到太有價值的東西(可能是我對關鍵字的理解不好),這裡總結下我遇到各種問題,可能看來會比較可笑,但對新手來說也許會有些幫助,我會盡量去注重具體的實現。

 這篇文章來說下小程式和伺服器的連結問題,或許有些人會和我一樣。知道小程式要向伺服器傳送帶參或不帶參請求,伺服器處理後,小程式接受並顯示。But, how?

不知道怎樣讓小程式向伺服器傳送請求,不知道伺服器怎樣傳送訊息給客戶端,又怎樣接收。主要就是怎樣具體實現它,而不是缺理論,我嘗試著去解釋下。

先簡單介紹下伺服器的部署吧,瞭解的請直接略過。 我用的是Tomcat,後臺的程式碼編輯器用的myeclipse。

                                                                   

首先,你要知道的請求是向servlet傳送的,(微信小程式只支援http協議)所以 ,我們先來看看怎樣去建立一個servlet。

在編輯器裡,file->new->servlet,然後填相關資訊。

填寫Name,建立的方法點選doget 和 doput就好,因為簡單的事例,不用太複雜,瞭解html的知道,這兩種方法分別是處理get和put方法請求的。簡單情況下我們不區別對待,所以,完全可以doput函式裡只寫this.doGet();。

建好servlet前一定要寫好jsp mapping url,也就是圖中第三行內容,這就是客戶端請求時需要的url(可以理解成地址,類比網頁,位址列的連結就是url【Uniform Resource Locator】,統一資源定位符)。

當建好後你可以通過專案裡webroot資料夾web—inf裡的web.xml檢視建立情況。

url沒問題就可以。開啟我們的sevlet,把一些沒必要的東西刪掉簡單些,像這樣:


package servlet;


import java.io.IOException;
import java.io.PrintWriter;


import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class textServlet extends HttpServlet {


public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {


response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");//這裡是設定一下編碼格式



                System.out.println("收到!");


}



public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {


this.doGet(request, response);
}


}

大家可以看到這個servlet的功能就是收到請求後,在控制檯打出“收到!”

好,接下來我們來部署伺服器

1————————————————————————————

選擇好你的專案工程,選擇tomcat伺服器,點“ok”

2————————————————

啟動tomcat伺服器

啟動成功後控制檯顯示資訊

ok,到這裡伺服器就算佈置完了。接下來我們來談一下什麼是客戶端,又怎樣與伺服器建立連結。

我們先簡單點解釋,我覺得,其實我們經常用的瀏覽器就可以當成客戶端。而上面的,我們通常說的網址,就是要傳送請求的伺服器地址,也就是我們剛剛設定的url。

那麼,我們的服務請求的處理已經編寫完畢,而且url也已經設定好,tomcat也處於開啟狀態。我們知到,客戶端向伺服器傳送請求,如果伺服器接收到了,伺服器端就會在控制檯打出那個“收到”。

現在,我們以瀏覽器為客戶端,向剛才我們寫的伺服器傳送請求,這時候就要用到我們設定的url了。

圖例分別是,埠,專案名稱,servlet的url   因為我們的伺服器是本地的,所以是localhost  至於8080是tomcat的埠,這裡不做過多解釋,需要的大家去查一下,可以查到。Amess是專案的名稱,text就是我們設定的url還記得嗎?

ok,當我們敲擊回車後,瀏覽器(客戶端)就向我們編寫的servlet傳送了請求。但是網頁卻什麼也不顯示。

這是當然,因為我們對請求的處理就是在伺服器端輸出個“收到”,而如果想在瀏覽器上顯示資訊,就是伺服器向客戶端傳送資訊了。(不要忘記把瀏覽器理解成客戶端啊)

我們再切換到後臺:

可以看到,伺服器打出了“收到”,這也就是說明我們客戶端和伺服器建立起了連結。

那麼,伺服器怎樣向瀏覽器(也就是客戶端)發東西呢?

我們需要建立一個printwriter 的物件,通過這個物件, 呼叫他的方法,輸出想要的內容,不要忘記close,只有close了,才能將內容輸出。現在我們更新網頁,看看效果。

ok,沒問題。現在,大家對客戶端 向伺服器發請求,及伺服器向客戶端寫東西,就有了大致的瞭解。

你現在可以去衝杯咖啡或者刷下手機,再回來我們就進入主題:小程式和後臺伺服器的連結

接下來我們就來具體說,小程式(客戶端)怎樣去與伺服器建立連線。

簡單事例,我們只寫一個按鈕,繫結點選事件,在js裡邊來處理事件,向伺服器傳送請求。

其實很簡單,我們需要呼叫微信提供的一個API,request,用它向伺服器傳送請求。開發者工具有具體介紹,大家可以去檢視,之後就是設定引數,url和瀏覽器一樣,依舊是伺服器地址,data內是你要向伺服器傳送的資料。如圖,我們傳送了一個數據叫做username,他的值是一個字串“haha”。success函式就是成功請求伺服器,伺服器返回後進行的處理,這裡我們讓他輸出res的data內容,res引數(當然名字你自定義)是伺服器返回的的資訊,他的data就是後臺返回的資料。這時重新編譯後,點選按鈕就可以了。注意,小程式編譯時會檢查,不允許向本地的伺服器傳送請求的,所以之前要設定下。

在開發者工具中右上角的詳情裡,選擇不校驗http

接下來我們來看伺服器的編寫。

首先我們要獲得客戶端給我們的username,這時我們要呼叫request的Parameter函式獲取,引數就是資料的名字。如圖,那麼我們的變數name就得到了客戶端發來的username的值,也就是“haha”。

之後,我們向客戶端返回資料,這時需要用到write,建立一個write型別變數來返回,呼叫物件的write函式,引數是要傳送的內容,記得close。如果你傳送的資料過多,一個緩衝流不夠用,可以用flush函式,先傳送一批,再傳送下一批。大家有興趣自己查詢,這裡我們返回了“man”字串,那麼客戶端的success函式的res.data就得到了“man”。ok萬事俱備,就差一滑鼠。點選按鈕吧。看看效果。

伺服器得到username:“haha”(其他的輸出專案裡的其他的測試內容,大家自行忽略)

客戶端獲得伺服器data:“man”:

現在我們的小程式和伺服器就建起了簡單的連結,至於傳什麼資料,又做什麼處理,就是你的問題了。

因為只是個人的閒暇娛樂,從點選量和搜尋量上來說,你很難看到這篇文章,如果我有幸讓你您看到,那也是種緣分吧。有些基礎的東西如在本章中說道,不會做過多原理上的解釋,您可以檢視這個系列的其他內容,應該可以幫您濾清一些思路思維上的東西。

這就是我的理解,歡迎討論,糾錯。也希望對有些人有幫助。水平一般,能力有限,難免有不對的地方,多包涵。