在Web應用體系結構中,咱們知道,容器控制Servlet的生命週期,負責封裝用戶請求給特定的Servlet。Servlet的具體職能以下:segmentfault
HTTP中的各類方法對應HttpServlet方法服務器
使用HttpServletRequest接口獲取請求首部多線程
使用HttpServletResponse接口設置相應首部、設置響應內容類型、使用流、URL重定向url
擁有生命週期線程
Servlet的一輩子:
尋找類->加載類->構造對象->init()變成真正的Servletcode
Web容器->Servlet類: 加載.class Web容器->Servlet對象: 構造方法 Web容器->Servlet對象: init()只執行一次哦 Web容器->Servlet對象: service()能夠反覆執行(多線程) Web容器->Servlet對象: destory()
Servlet生命中的三大重要時刻:中間件
方法 | 什麼時候調用 | 做用 | 是否可覆蓋 |
---|---|---|---|
init() | Servlet實例建立之後,提供服務前 | 初始化Servlet,只運行一次 | 能夠 |
service() | 第一個客戶請求到達時 | 肯定調用何種方法,有本身的棧 | 不能夠 |
doGet()/doPost() | service()判斷之後 | 處理客戶端請求 | 至少要覆蓋一個 |
咱們知道,Servlet主要是對請求/響應模型進行實現,所以,HttpServlet中重要的方法:
請求:對象
getHeader(String name)接口
getRemotePort()生命週期
...
響應:
setContentType(String contentType)
setHeader(String name, String value)
getOutputSream()
getWriter()
setRedirect(String url)
...
咱們的Servlet能夠本身處理請求-響應細節,也能夠把請求委託給其它中間件(服務器、Servlet)
轉發:URL不變,委託其它人(服務器內部跳轉)
重定向:直接將請求定向到其它URL(讓客戶端二次請求)
p.s. 不能再響應以後(已經往流裏寫東西了),sendRedirect()
既然咱們說到URL,URL也是有相對URL和絕對URL,因而,
// 下面是使用相對URL response.sendRedirect("<someurl>"); // 下面是使用絕對URL,從項目根尋址 response.sendRedirect("/someurl");