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

Java Web 入門指南:拒絕框架依賴,從 Servlet 原生開發起步

     編輯:Java 綜合教學

為什麼初學者應遠離框架?

市面上有 500+ Web 框架,本質皆為 Servlet API 的二次封裝。框架隱藏了 HTTP 協議細節,讓開發者專注業務,但若跳過 Servlet 規範直接學框架:

  • 遇到問題無法定位是框架還是容器行為。
  • 換框架等於重新學習,遷移成本極高。
  • 對 HttpServletRequest/Response、Filter、Session 等核心契約理解膚淺。

最小環境搭建

  1. JDK 8+、Eclipse(Java 版即可,非 JEE)、Tomcat 9/10(zip 解壓版)。
  2. 不集成 Tomcat 到 Eclipse,手動啟動 bin/startup.sh,日誌直觀可控。
  3. 專案結構:普通 Java Project → 手動建立 webapp/WEB-INF/web.xml、webapp/WEB-INF/lib/servlet-api.jar(僅編譯用,運行期由容器提供)。

server.xml 關鍵配置

<Context path="" docBase="D:/WORKDIR/ServletDemo/webapp" reloadable="true"/>

將專案 webapp 目錄掛載為根上下文,修改類/JSP 即時生效(reloadable=true)。

核心 API 必修課

web.xml 部署描述符

<servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>demo.HelloServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
</servlet-mapping>

Filter 過濾器鏈

public class HelloFilter implements Filter {
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) {
        HttpServletRequest request = (HttpServletRequest) req;
        System.out.println("攔截 URI: " + request.getRequestURI());
        chain.doFilter(req, res); // 傳遞給下一個過濾器或 Servlet
    }
}
配置順序:<filter-mapping> 必須置於 <servlet-mapping> 之前,否則 Filter 不生效。

Servlet 與 HTTP 協議映射

HTTP 概念Servlet API核心方法
Request Line / Header / BodyHttpServletRequestgetRequestURI(), getHeader(), getInputStream(), getParameter()
Response Status / Header / BodyHttpServletResponsesetStatus(), setHeader(), getOutputStream(), getWriter()
Session 會話HttpSessiongetAttribute(), setAttribute(), getId()
上下文共享ServletContextgetAttribute(), getResourceAsStream()

必背介面:HttpServletRequest、HttpServletResponse、HttpSession、ServletContext、FilterChain、RequestDispatcher、各類 Listener。

Session 機制本質

  • HTTP 無狀態 → 伺服器維護 Map<String, HttpSession>,Key 為 JSESSIONID。
  • request.getSession():獲取或建立 Session,自動發送 Set-Cookie: JSESSIONID=xxx; Path=/; HttpOnly。
  • Cookie MaxAge=-1 表示瀏覽器進程級生命週期,關閉瀏覽器即銷毀。

JSP 本質:編譯為 Servlet

JSP 首次訪問由 Jasper 編譯為 HttpJspBase 子類(本質是 Servlet),產物位於 tomcat/work/Catalina/localhost/專案/org/apache/jsp/。JSP 適合視圖渲染,Servlet 適合控制邏輯,現代開發建議使用模板引擎(Velocity、Thymeleaf)替代 JSP。

總結:三大鐵律

  1. 精通 Servlet 規範(javax.servlet、javax.servlet.http)再碰框架。
  2. 使用最簡工具(普通 Eclipse + 解壓版 Tomcat),拒絕向導生成代碼。
  3. 熟讀 HTTP/1.1 協議(RFC 7230-7235),理解請求/響應、無狀態、Cookie、緩存、內容協商。

框架是工具,應聽命於你,而非綁架你的思維。掌握 Servlet 核心,看任何框架源碼皆「小菜一碟」。

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