從 .NET 三年經驗轉型 Java Web,核心差異在於:生態開放性(Maven/Gradle vs NuGet)、運行時模型(JVM vs CLR)、Web 標準(Servlet/JSP vs ASP.NET Core)。建立「對比學習」心智模型,加速知識遷移。
init(),單例創建,僅一次service() → 分發 doGet/doPost,多線程並發destroy(),容器關閉時調用// 1. 實現 Runnable(推薦,支援共享資源)
class Task implements Runnable {
public void run() { /* 邏輯 */ }
}
new Thread(new Task(), "T1").start();
// 2. 繼承 Thread
class MyThread extends Thread {
public void run() { /* 邏輯 */ }
}
new MyThread("T2").start();
// 同步代碼塊(鎖對象必須相同)
synchronized(sharedObj) { /* 臨界區 */ }
// 同步方法(隱式鎖 this)
synchronized void sellTicket() { /* 邏輯 */ }
| 類別 | 字節流 | 字符流 |
|---|---|---|
| 輸入 | InputStream | Reader |
| 輸出 | OutputStream | Writer |
| 文件實現 | FileInput/OutputStream | FileReader/Writer |
| 緩衝增強 | BufferedInput/OutputStream | BufferedReader/Writer |
| 適用場景 | 二進制(圖片、視頻) | 文本(中文支援更好) |
| 對象 | 類型 | 用途 |
|---|---|---|
| request | HttpServletRequest | 請求參數/屬性 |
| response | HttpServletResponse | 響應控制 |
| session | HttpSession | 會話狀態 |
| application | ServletContext | 全局共享 |
| out | JspWriter | 頁面輸出 |
| config | ServletConfig | 初始化參數 |
| pageContext | PageContext | 頁面上下文 |
| page | Object | 當前頁面實例 |
| exception | Throwable | 錯誤頁面專用 |
<%@ taglib prefix="c" uri="https://java.sun.com/jsp/jstl/core" %>
<!-- 變量操作 -->
<c:set var="name" value="Java" scope="request"/>
<c:out value="${name}"/>
<!-- 流程控制 -->
<c:if test="${user.vip}">VIP專享</c:if>
<c:choose>
<c:when test="${score>=90}">優秀</c:when>
<c:otherwise>加油</c:otherwise>
</c:choose>
<!-- 循環 -->
<c:forEach items="${list}" var="item" varStatus="status">
${status.index}: ${item.name}
</c:forEach>
${map.key}、${list[0]}、${bean.prop} 統一訪問.NET 經驗是寶貴資產,OOP、設計模式、數據庫、架構思維通用;擁抱 Java 生態開放性,善用 Maven 中央倉庫、開源社區,轉型必成!