方法名 | 作用 |
---|---|
init() | 初始化 |
service() | 處理客戶端請(qǐng)求 |
desdroy() | 銷毀 |
最后被gc回收
init()
init()方法只在第一次創(chuàng)建的時(shí)候被調(diào)用一次
//如果有相關(guān)配置可以調(diào)用這個(gè)init進(jìn)行加載
public void init(ServletConfig config) throws ServletException {
this.config = config;
this.init();
}
//常用init方法
public void init() throws ServletException {
//初始化代碼
}
service()
service() 方法是執(zhí)行實(shí)際任務(wù)的主要方法,用來(lái)處理客戶端的請(qǐng)求并返回響應(yīng)弃酌,內(nèi)部根據(jù)接口類型調(diào)用一下源碼中的各種請(qǐng)求類型渐裂。
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String method = req.getMethod();
long lastModified;
if(method.equals("GET")) {
lastModified = this.getLastModified(req);
if(lastModified == -1L) {
this.doGet(req, resp);
} else {
long ifModifiedSince = req.getDateHeader("If-Modified-Since");
if(ifModifiedSince < lastModified) {
this.maybeSetLastModified(resp, lastModified);
this.doGet(req, resp);
} else {
resp.setStatus(304);
}
}
} else if(method.equals("HEAD")) {
lastModified = this.getLastModified(req);
this.maybeSetLastModified(resp, lastModified);
this.doHead(req, resp);
} else if(method.equals("POST")) {
this.doPost(req, resp);
} else if(method.equals("PUT")) {
this.doPut(req, resp);
} else if(method.equals("DELETE")) {
this.doDelete(req, resp);
} else if(method.equals("OPTIONS")) {
this.doOptions(req, resp);
} else if(method.equals("TRACE")) {
this.doTrace(req, resp);
} else {
String errMsg = lStrings.getString("http.method_not_implemented");
Object[] errArgs = new Object[]{method};
errMsg = MessageFormat.format(errMsg, errArgs);
resp.sendError(501, errMsg);
}
}
一般操作的時(shí)候盈魁,不直接對(duì)service()進(jìn)行操作腮考,而是根據(jù)約定,直接對(duì)調(diào)用的方法類型進(jìn)行邏輯編寫碳竟,最常用的還是get和post慰安。
doGet
一般用來(lái)獲取內(nèi)容,也可以提交少量參數(shù)
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// 邏輯代碼
}
doPost
一般用來(lái)提交內(nèi)容蹋砚,相對(duì)get較安全
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
//邏輯代碼
}
doGet和doPost的區(qū)別
get請(qǐng)求因?yàn)槭敲魑亩蟛ぃ雲(yún)⒅苯蛹釉趗rl后面,所以被限制在1024字節(jié)
post請(qǐng)求沒(méi)有明文規(guī)定數(shù)據(jù)大小都弹,現(xiàn)在一般用json格式的數(shù)據(jù)作為附件進(jìn)行傳送的娇豫,但是如果你上傳比服務(wù)器容量還大的數(shù)據(jù),一樣會(huì)被群毆
destroy()
destroy方法和init方法對(duì)應(yīng)畅厢,一個(gè)初始化冯痢,一個(gè)銷毀。
會(huì)默認(rèn)在GC之前關(guān)閉一切活動(dòng)框杜, 關(guān)閉數(shù)據(jù)庫(kù)連接浦楣、停止后臺(tái)線程、把 Cookie 列表或點(diǎn)擊計(jì)數(shù)器寫入到磁盤咪辱,并執(zhí)行其他類似的清理活動(dòng)等等振劳,然后servlet 對(duì)象被標(biāo)記為垃圾回收。
@Override
public void destroy() {
super.destroy();
}