Android設備與電腦Http通信簡單搭建

仍記得剛剛實習的那時候,由於項目需要用到網絡通信,於是便問了做後臺的給我提供接口。做後臺的是從培訓機構出來的,然後我就問他學的這個是什麼,需要多少錢。

他說這是java EE,交了1萬多學費。當時我心想,哇去,這麼貴,想必幹這行錢途滿滿呀~

一年之後的今天.......由於日常工作涉及到HTTP網絡通信較多,加之好奇心較重,於是便自個探索了一下這個1萬多學費的內容是個咋回事~

嗯,其實java EE的內容還是很乏的,但servlet小服務器這種開發還是比較重要的內容之一,所以這裏就嘗試“從零開始的serlet搭建”。


環境搭建

首先,我的環境已經安裝了jdk,配置好了jdk環境,所以這個就不多說了。

接着,下載Tomcat,這裏我是在官網下的tomcat 7版本,這玩意直接解壓就可以了,不需要安裝操作。

這裏,我將放到D盤的目錄下,待會創建web項目時得用到。


放到D盤上



插件下載(非java EE版本eclipse需要這步)

創建一個“Dynamic Web Project”,如果沒有這個選項,Other選項搜索web也沒有的話,可能你Eclipse是se版本的,需要安裝ee插件。



我一開始的eclipse就是沒有ee插件的,即沒有“Dynamic Web Project”這個項,解決辦法:

去安裝eclipse插件 “help”-->"install new software..."


進入安裝界面後,輸入插件的地址線上安裝,或者從官網下載插件後,直接按Add按鈕進行本地安裝

這是網上給的鏈接(居然沒有Mars版本和Luna版本),不過可以將Url後面的版本名字kepler改爲mars則可以了,luna試過,貌似不行。

"http://download.eclipse.org/releases/kepler"(如果你是 EclipseKepler版本)
"http://download.eclipse.org/releases/juno"(如果你是 Eclipse Juno版本)
"http://download.eclipse.org/releases/indigo"(如果你是 EclipseIndigo版本)
"http://download.eclipse.org/releases/helios"(如果你是 Eclipse Helios版本



然後勾選一下四個選項進行安裝:

Eclipse Java EE Developer Tools
Eclipse Java Web Developer Tools
Eclipse Web Developer Tools
Eclipse XML Editors and Tools

爲了避免後面添加Server Rumtime Environment時,沒有Tomcat選項,多勾選一項:

JST Server Adapters (version 3.2.2)

然後就一直next,中途點擊accept什麼鬼的協議,然後就等着它下載完(不用代理可能比較慢),自動安裝。

安裝完後會提示是否重啓eclipse,選擇yes。

重啓後,就能在File-->new選擇裏發現有“Dynamic Web Project”選項了。


建立工程

接着新建Dynamic Web Project,彈出頁面填寫web項目的名字,添加運行環境runtime target,其他默認即可。


點擊New Runtime添加運行環境,選擇tomcat 7,勾選創建本地服務器


點Next, 在Tomcat installation directory選擇剛剛下載加壓到D盤的tomcat文件夾即可,然後點finish


選擇完target runtime後,回到new Dynamic Web Project 頁面,先不要急着點擊Finish,繼續點擊next,會跳到選擇java文件build path的設置,這頁默認即可,繼續點擊Next,然後跳到Web Module頁面,勾選 “Generate web.xml deployment descriptor”,讓它自動生成web項目的xml配置文件。


完成新建後,則發現工程列表裏多了兩個工程,一個是我創建的個人工程MyServer,另一個是Runtime Environment,也即是Servers:


新建class文件

Servers這個可以不管,這只是個運行環境而已,接着在自己的工程MyServer裏的java Resources下的src新建class文件,繼承HttpServlet類,不需要main函數。

重寫該父類的各種請求方法,這裏我只是簡單的重寫了doGet方法,還有doPost等方法就不寫了:

public class Test extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest requset, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		PrintWriter pw=response.getWriter();
		pw.write("Hello World ! ");
	}
}

配置web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
 version="3.0">
  
    <servlet>
        <servlet-name>Test</servlet-name><!-- 隨意定的名字,和下面servlet-mapping一致即可-->
        <servlet-class>com.samuelzhan.Test</servlet-class><!-- 包名+類名 -->
    </servlet>
	<servlet-mapping>
        <servlet-name>Test</servlet-name>
        <url-pattern>/hello</url-pattern><!-- 連接到Test這個類的映射地址 -->
    </servlet-mapping>
</web-app>

運行web項目

工程弄好好,右鍵點擊,選擇“run as”-->"run on server",然後就會彈出窗口,選擇剛剛創建的本地服務器Servers進行加載web項目運行,點finish即可。

此時會初始化Server,eclipse貌似會自動打開自身的瀏覽器,在搜索欄上輸入http://localhost:8080/  + 工程名 + web.xml的映射url即可。



部署到tomcat

這裏講的是動態部署,靜態部署可以直接把文件拉倒tomcat目錄下的webapps即可。

首先,在servers視圖裏找到剛剛運行的Test項目,然後右鍵,點擊“remove”,把工程從服務器去除。


接着,雙擊server,在server設置裏設置兩處地方:一是勾選“use tomcat installation”,二是在deploy path輸入“webapps”(即tomcat文件夾下的webapps文件夾),然後保存


如果有三方庫的話,需要右鍵工程-->Properties-->Deployment Assembly-->Add-->java build path entries->next-->選擇需要添加的lib-->finish。

最後,重新Run as --> Run on server,運行後,eclipse會在tomcat文件夾下的webapps文件夾下增加了你的web project名字的文件夾,裏面有你的classes文件和web.xml配置文件,還有lib等。

現在,可以把eclipse關掉,然後進入tomcat文件夾下的bin文件夾,點擊startup.bat文件即可以開啓服務器,然後就可以脫離eclipse執行webproject了。


編寫Android客戶端

首先,先說明,這裏的通信是基於內網ip的,外網訪問不了,所以手機需要和電腦在同一個局域網,我這裏是手機直接連了電腦的wifi。

這裏前提就不寫那麼多了,eclipse開發需要ADT插件,但我很久都沒用過eclipse開發Android了,現在都用Studio了吧。

我就直接貼代碼了,內容非常簡單,使用Android自帶的apache包裏的HttpUrlConnection進行通信吧:

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    URL url = new URL("http://192.168.59.100:8080/MyServer/hello");
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                    connection.setRequestMethod("GET");
                    int resultCode = connection.getResponseCode();
                    if (resultCode == HttpURLConnection.HTTP_OK) {
                        ByteArrayOutputStream baos = new ByteArrayOutputStream();
                        byte[] buffer = new byte[1024];
                        InputStream is = connection.getInputStream();
                        int i = 0;
                        while ((i = is.read(buffer)) != -1) {
                            baos.write(buffer, 0, i);
                        }
                        Log.d("zz", "response:" + baos.toString());
                        baos.close();
                        is.close();
                    }
                } catch (Exception e) {
                    Log.d("zz", e.toString());
                }
            }
        }).start();
    }

}

佈局文件很簡單,不貼了,記得加上權限:

<uses-permission android:name="android.permission.INTERNET"/>


最後運行結果



好了,到此已經實現了Android設備與PC端的Http通信,最後還是要強調,手機和電腦需要在同一局域網,而且tomcat的server在運行。


Android客戶端這邊很簡單(對我來說),這裏只是搭建一個簡單的C/S系統,便於以後Android安全的研究,逆向分析的測試而已。

不過,早幾年前就感覺JSP已經是老人級別的語言了,現在很多公司都用PHP搭建服務器了,所以JSP就不深究了,瞭解具體的架構即可。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章