首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 連接本地 Tomcat Servlet 失敗排查全攻略

     編輯:程式設計綜合問答

典型錯誤現象

org.apache.http.conn.HttpHostConnectException: Connection to https://10.0.2.2:8080 refused

核心排查清單

  1. IP 地址選擇:
    • 10.0.2.2:模擬器專用,映射宿主機 127.0.0.1。
    • 真機調試必須用宿主機 局域網 IP(如 192.168.x.x),不能用 127.0.0.1 或 localhost。
  2. Tomcat 服務狀態:
    • 瀏覽器訪問 https://<宿主機IP>:8080/test/AddMessage 能否正常響應?
    • 檢查 webapps/test/WEB-INF/web.xml 中 Servlet 映射是否為 /AddMessage。
  3. 防火牆/端口:
    • Windows 防火牆入站規則放行 8080 端口。
    • 雲服務器需開放安全組 8080 端口。
  4. Android 權限:
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    
  5. 網絡隔離:真機與電腦必須在同一 Wi-Fi/局域網,無 AP 隔離、客戶端隔離功能。

代碼規範建議

// 使用 HttpURLConnection 替代已棄用的 DefaultHttpClient
URL url = new URL("https://192.168.1.100:8080/test/AddMessage");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setDoOutput(true);
conn.setConnectTimeout(5000);
conn.setReadTimeout(5000);

try (OutputStream os = conn.getOutputStream()) {
    os.write(postData.getBytes("UTF-8"));
}

int code = conn.getResponseCode();
if (code == 200) {
    // 處理響應
}

進階調試技巧

  • 用 adb logcat 過濾 System.err 看完整堆棧。
  • 在 Tomcat logs/localhost_access_log.txt 確認請求是否到達。
  • 用 curl -v https://<IP>:8080/test/AddMessage 在電腦端模擬請求。

90% 的「連不上」屬於 IP 選錯或防火牆攔截,按清單逐項核對通常能在 10 分鐘內定位。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved