# 點我呀 有點東西囉 HEHE [TOC] **會前準備:** >1. 之前到現在的專案是否有"Servlet"關鍵字出現? (HttpServletRequest和HttpServletResponse大家都看過所以略 哈哈) >2. 簡述SpringBoot和SpringMVC差異 > > [**可先clone此實作專案**](https://github.com/Star530123/ServletIntro) --- # Servlet是什麼 - 是API - 是可運行在Web Container且可產出動態網頁的程式 # 核心祖宗三代 ## Servlet - javax.servlet.Servlet - Interface - 總共有5個method  ## GenericServlet - javax.servlet.GenericServlet - Abstract class,實作Servlet - 為通用的Servlet類別,若要使用其他的協議則繼承此類別 ## HttpServlet - javax.servlet.http.HttpServlet - Abstract class,繼承GenericServlet - 廣義的Servlet就是此類別,要接收HTTP的Request和送出Response就要透過繼承此類別 - 透過web.xml或是@WebServlet配置 # Servlet Life Cycle  - 主要實作就是在service方法中 - destroy幾乎是用不到,Web container會在結束時調用此方法銷毀Servlet # 部署至Tomcat Project右鍵 -> Export -> WAR file ## 目錄架構  * WEB-INF : 用戶端不可直接存取裡面的項目,但可以在程式中調用裡面的資源 -> 外層放置用戶端可調用的資源  # 請求轉發 ## RequestDispatcher ## sendRedirect # 阿這兩個怎麼分 ServletConfig、ServletContext ## ServletConfig - 傳遞初始化Servlet時的資訊 - 每個Servlet都會被web container創造一個ServletConfig - 可以在web.xml調整配置 - 透過 <init-param>設置初始值 - 從Servlet可取得 -> 沒有用Servlet,就不會用到這個 ## ServletContext - 在Servlet間傳遞共同資訊 - 在部署的時候就會被創建 (每個web application只有一個) - 可以在web.xml調整配置 - 透過<context-param>設置參數 - 從GenericServlet、ServletConfig或**ServletRequest**可取得 -> 即使沒有使用Servlet也可從ServletRequest和HttpServletRequest取得! 使用例子 : servletContext取得SessionCookieConfig後,可設置HttpOnly ### 比較 | | 描述 | 數量(在一個網路應用程式中) | 如何取得 | 從哪裡取得| | -------- | -------- | -------- |--------|--------| | ServletConfig | Servlet的初始參數 | 多個(調用Servlet時創建) |`getServletConfig() `|Servlet| | ServletContext | Servlet運行的環境狀態、參數 | 一個(部署時創建) |`getServletContext()`|GenericServlet ServletConfig ServletRequest| # Filter - 做Request的前置(preprocessing) 或後置(postprocessing)處理 - 可用來做資料驗證、log紀錄、加/解密...等等 - 透過web.xml或@WebFilter配置 # Event and Listener ## Event - 一個物件的狀態改變就是一個事件(event) ## Listener - 監聽特定事件是否發生並做出相應處置 - 透過web.xml或@WebListener配置 - 例子 : ServletRequestListener 監聽 ServletRequestEvent 當收到Request時,實作requestInitialized方法 當釋出Request時,實作requestDestroyed方法 # 資料來源 [Servlets | Servlet Tutorial](https://www.javatpoint.com/servlet-tutorial) [何謂容器](https://openhome.cc/Gossip/ServletJSP/Container.html) [HttpOnly - HTTP Headers 的資安議題](https://devco.re/blog/2014/06/11/setcookie-httponly-security-issues-of-http-headers-3/) [目錄架構](https://openhome.cc/Gossip/ServletJSP/DirectoryStructure.html)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up