本系列將完整記錄 Unity3D 客戶端與 Java Web 服務端(JSP + Tomcat)進行數據交互、文件上傳下載的全過程。第一篇專注於服務端環境搭建:使用 MyEclipse 創建 Java Web 項目、配置 Tomcat、編寫 Servlet 處理 GET/POST 請求、部署驗證,為後續 Unity 端調用打下堅實基礎。
| 工具 | 版本 | 說明 |
|---|---|---|
| IDE | MyEclipse 2017 / Eclipse + Web Tools | 集成 Tomcat 管理、Servlet 向導、JSP 編輯 |
| Servlet 容器 | Apache Tomcat 7.0 / 8.5 / 9.0 | 生產環境建議 8.5+,支持 Servlet 3.1+ |
| 客戶端 | Unity 5.1.0f3 / 2020+ LTS | 使用 UnityWebRequest 替代舊 WWW 類 |
| JDK | 1.8 / 11 / 17 | 項目編碼統一 UTF-8 |
MyEclipse 中:File → New → Web Project,項目名如 UnityServer,目標運行時選擇已配置的 Tomcat 7。

標準 Maven/Web 目錄結構:
UnityServer/
├── src/ # Java源碼根目錄
│ └── com.yourname.servlet/ # 包結構:com.英文名.功能模塊
├── WebRoot/ # Web資源根目錄(部署到Tomcat根目錄)
│ ├── WEB-INF/
│ │ ├── web.xml # 核心部署描述符
│ │ ├── lib/ # 第三方JAR包
│ │ └── classes/ # 編譯輸出.class文件
│ ├── index.jsp # 項目首頁入口
│ └── css/js/images/ # 靜態資源
└── .settings/.project # Eclipse項目配置

推薦:com.{personal}.{module},例如 com.lulei.servlet。右鍵 src → New → Package。

右鍵包 → New → Servlet,類名 FormServlet,勾選 doGet、doPost,URL Mapping 填 /form。


package com.lulei.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class FormServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 設置編碼,防止中文亂碼
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=UTF-8");
String username = req.getParameter("username");
String password = req.getParameter("password");
System.out.println("=== doGet 請求 ===");
System.out.println("用戶名:" + username);
System.out.println("密碼:" + password);
resp.getWriter().write("GET 請求接收成功:" + username);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=UTF-8");
String username = req.getParameter("username");
String password = req.getParameter("password");
System.out.println("=== doPost 請求 ===");
System.out.println("用戶名:" + username);
System.out.println("密碼:" + password);
resp.getWriter().write("POST 請求接收成功:" + username);
}
}

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<body>
<h2>Unity-Server 交互測試頁面</h2>
<!-- GET 請求表單 -->
<form action="<%=request.getContextPath()%>/form" method="get">
<fieldset>
<legend>GET 請求測試(參數顯示在URL)</legend>
用戶名:<input type="text" name="username" /><br/>
密碼:<input type="password" name="password" /><br/>
<input type="submit" value="提交 GET" />
</fieldset>
</form>
<hr/>
<!-- POST 請求表單 -->
<form action="<%=request.getContextPath()%>/form" method="post">
<fieldset>
<legend>POST 請求測試(參數在請求體)</legend>
用戶名:<input type="text" name="username" /><br/>
密碼:<input type="password" name="password" /><br/>
<input type="submit" value="提交 POST" />
</fieldset>
</form>
</body>

MyEclipse 窗口 → Servers 視圖 → 右鍵 New → Server → 選擇 Tomcat 版本 → 指定安裝路徑 → Finish。


Servers 視圖中右鍵 Tomcat → Add and Remove → 將 UnityServer 移至右側 → Finish。再右鍵 Tomcat → Redeploy(或 Publish)完成部署。

啟動後控制台輸出關鍵信息:
INFO: Starting ProtocolHandler ["http-nio-8080"]
默認端口 8080。若被佔用,修改 server.xml 中 <Connector port="8080" .../>。

獲取本機 IPv4:Win+R → cmd → ipconfig,記錄 IPv4 Address(如 192.168.1.100)。

訪問:https://{IP}:{Port}/{ProjectName}/ 例如 https://192.168.1.100:8080/UnityServer/

分別點擊 GET/POST 提交,觀察:
?username=xxx&password=yyy,便於 Unity UnityWebRequest.Get 構建 URL。UnityWebRequest.Post。

MyEclipse Console 應輸出:
=== doGet 請求 ===
用戶名:test
密碼:123456
=== doPost 請求 ===
用戶名:admin
密碼:888888

<filter> CharacterEncodingFilter、Servlet req.setCharacterEncoding、Tomcat server.xml URIEncoding="UTF-8" 四處一致。conf/server.xml,或關閉佔用進程(netstat -ano | findstr 8080)。@WebServlet("/form") 省去 XML 配置,本文為兼容性演示 XML 方式。服務端已就緒,下一篇將實戰 Unity3D 客戶端調用:
UnityWebRequest 發送 GET/POST 請求JsonUtility/Newtonsoft.Json)multipart/form-data)與下載實現本文從零構建了支持 GET/POST 的 Java Web 服務端,涵蓋 MyEclipse 項目創建、Servlet 編寫、JSP 表單測試、Tomcat 部署驗證 全流程。掌握這套流程,你就擁有了與 Unity、小程序、App、前端框架通用的 HTTP 後端基礎設施。記住:修改即部署,日誌是眼睛,編碼要統一。下篇見,讓我們讓 Unity 動起來!