如何往伺服器中讀寫資料?
阿新 • • 發佈:2019-01-07
本次專案,我用apache-tomcat將自己的計算機弄成了一個小伺服器,然後對裡面的jsp型別的檔案進行讀寫。
首先,如何弄伺服器呢?工程檔案:點選開啟連結
1.下載一個apache-tomcat,這裡我給大家提供一個apache-tomcat-6.0.37的下載地址:點選開啟連結 提取碼:utb8
2.下載好之後解壓,解壓完成,進入資料夾,執行apache-tomcat-6.0.37/bin/startup.dat 如下圖所示。
3.開啟該檔案之後,等待。等到程序完成後。開啟你的瀏覽器,在位址列中鍵入:localhost:8080
跳轉,如果可以正常訪問到有貓的介面,那麼恭喜,伺服器已建立。
伺服器建好了,那麼該讀取其中的資料了。
這裡的佈局我設了一個EditView,用於輸入IP地址,兩個按鈕,分別是不同的獲取資訊的方式,而文字框,則是為了顯示讀取的資訊。
接下來是Acticity,裡面有詳細的註釋,我就不在這裡說了。<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context="jerehdu.com.jereheduch10.HttpActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="IP地址" android:textSize="20sp" android:textColor="#123"/> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/et" android:hint="請輸入IPv4地址"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/search1" android:text="查詢(Get方式)"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/search2" android:text="查詢(Post方式)"/> <TextView android:layout_width="match_parent" android:layout_height="200dp" android:id="@+id/show" android:text="查詢結果" android:background="#e9d6ec"/> </LinearLayout>
在執行的時候,需要我們輸入IP地址,即我們伺服器的IP地址,怎麼獲得呢?public class HttpActivity extends AppCompatActivity { private EditText et ; private Button search1; private Button search2; private TextView show; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_http); et = (EditText) findViewById(R.id.et); search1 = (Button) findViewById(R.id.search1); search2 = (Button) findViewById(R.id.search2); show = (TextView) findViewById(R.id.show); search1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String url = "http://"+et.getText()+":8080/HttpTest/index.jsp" + "?option=getUser&uName=jerehedu"; new MyGetJob().execute(url); } }); search2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String[] arg = new String[2]; arg[0] = "http://"+et.getText()+":8080/HttpTest/index.jsp"; arg[1] = "option=getUser&uName=jerehedu"; new MyPostJob().execute(arg); } }); } public class MyPostJob extends AsyncTask<String,Void,String>{ @Override protected String doInBackground(String... strings) { HttpURLConnection httpURLConnection = null; InputStream is = null; StringBuilder sbd = new StringBuilder(); try { URL url = new URL(strings[0]); httpURLConnection = (HttpURLConnection) url.openConnection(); httpURLConnection.setConnectTimeout(5*1000); httpURLConnection.setReadTimeout(5*1000); httpURLConnection.setRequestMethod("POST"); httpURLConnection.setDoInput(true); httpURLConnection.setDoOutput(true); //是否儲存使用者快取 httpURLConnection.setUseCaches(false); //在這裡設定編碼方式 httpURLConnection.setRequestProperty("Charset","UTF-8"); httpURLConnection.setRequestProperty("Content-type","application/x-www-form-urlencoded"); //params應該是這樣的樣式: option=getUser&Name=jerehedu (沒了問號) String params = strings[1]; OutputStream os = httpURLConnection.getOutputStream(); os.write(params.getBytes()); os.flush(); os.close(); if(httpURLConnection.getResponseCode()==200){ is=httpURLConnection.getInputStream(); int next = 0; byte[] bt = new byte[1024]; while ((next=is.read(bt))>0){ sbd.append(new String(bt,0,next)); } } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { if(is!=null){ try { is.close(); } catch (IOException e) { e.printStackTrace(); } } if(httpURLConnection!=null){ httpURLConnection.disconnect(); } } return sbd.toString(); } @Override protected void onPostExecute(String s) { super.onPostExecute(s); show.setText("POST請求結果:"+s); } } /* AsyncTask非同步任務類 非同步任務類的第一個引數會傳到doInBackground方法中 第三個引數: 此為指定doInBackground方法的返回值。 onPostExecute方法中的String s是來自doInBackground方法的返回值。 UI執行緒裡宣告的任何變數,在子執行緒中禁止操作。 非同步任務類裡只有5個方法。 */ public class MyGetJob extends AsyncTask<String,Void,String>{ //onPreExecute在主執行緒中執行命令,它會在doInBackground前執行。 //通常會在這裡做進度條的初始化,例如:下載進度 @Override protected void onPreExecute() { super.onPreExecute(); } //必須實現的方法,可以理解成,在子執行緒中執行命令 @Override //這裡的...代表陣列 protected String doInBackground(String... strings) { HttpURLConnection httpURLConnection = null; InputStream is = null; StringBuilder sbd = new StringBuilder(); try { URL url = new URL(strings[0]); httpURLConnection = (HttpURLConnection) url.openConnection(); httpURLConnection.setConnectTimeout(5*1000); httpURLConnection.setReadTimeout(5*1000); /* http 響應碼 200:成功 404:未找到 500:發生錯誤 */ if(httpURLConnection.getResponseCode()==200){ is=httpURLConnection.getInputStream(); int next = 0; byte[] bt = new byte[1024]; while ((next=is.read(bt))>0){ sbd.append(new String(bt,0,next)); } } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if(is!=null){ try { is.close(); } catch (IOException e) { e.printStackTrace(); } } if(httpURLConnection!=null){ httpURLConnection.disconnect(); } } return sbd.toString(); } //在UI執行緒(主執行緒)中執行命令 @Override protected void onPostExecute(String s) { super.onPostExecute("GET請求結果:"+s); show.setText(s); } } }
首先我們開啟“執行”——Windows+R,然後輸入CMD,確認。之後再輸入ipconfig,回車。則就可以看到IP地址了,如下圖所示:
輸入IP地址,點選按鈕。效果圖如下: