[TOC]
## 問題01:Servlet的概念及體系結構。
* 繼承了HttpServlet的Java類(實現了Servlet接口)
* 功能強大(Java API、Servlet API)
* 性能高效(采用線程而非進程)
> servlet在處理請求采用的是線程,而不是一個進程。web服務器會為每一個客戶端的訪問請求創建一個線程,并在這個線程上調用Servlet的service方法。
> 但是如果訪問了同一個資源的話,就有可能引發線程安全問題。
> 采用synchronized關鍵字解決

* [ ] serializable是java.io包中的序列化接口;
* [ ] servlet接口、servletConfig接口定義了servlet的基本方法(用于接收和響應用戶的請求)并封裝了servlet的相關配置信息;
* [ ] GenericServlet對象是一個抽象類,實現了上述的3個接口,并為servlet接口及ServletConfig接口提供了部分實現;
* [ ] httpServlet子類繼承了GenericServlet,并對其中http請求處理進行了實現。
## 問題02:Servlet的生命周期。

* [ ] **constructor**創建實例
> 由服務器容器自動完成—— 當客戶端向Servlet容器**首次**發出HTTP請求訪問Servlet時——**只調用一次**
* [ ] **init**初始化
> 由服務器容器自動完成—— 當客戶端向Servlet容器**首次**發出HTTP請求訪問Servlet時——**只調用一次**
```
public void init(ServletConfig config) throws ServletException {
String code = config.getInitParameter("code");
System.out.println("Servlet初始化編碼為:"+code);
}
```
* [ ] **service**運行
> 根據用戶請求進行執行—— 當客戶端向Servlet容器發出HTTP請求訪問Servlet時——**每次請求都會調用**
```
public void service(ServletRequest req, ServletResponse res)
```
> Dispatches client requests to the protected service method. There's no need to override this method.
```
protected void service(HttpServletRequest req, HttpServletResponse resp)
```
> Receives standard HTTP requests from the public service method and **dispatches** them to the **doMethod** methods defined in this class. This method is an HTTP-specific version of the javax.servlet.Servlet.service method. **There's no need to override this method**.
* [ ] **destroy**銷毀
> 由服務器容器自動完成—— 當服務器**關閉**或web應用**被移除出容器**時——**只調用一次**

## 問題03:Servlet的創建與配置。
### Servlet的創建

### Servlet的注解配置

### Servlet的XML配置

## 問題04:如何控制Servlet的加載
* [ ] 注解方式
```
loadOnStartup=number
```

* [ ] 配置文件
```
<load-on-startup>number<load-on-startup>
```

load-on-startup 是 web.xml 中的一個節點,是 servlet 元素的子元素,用來標記 Servlet 容器啟動時是否初始化當前 Servlet,以及當前 Servlet 的初始化順序。
load-on-startup 元素取值規則如下:
1. 它的取值必須是一個整數;
2. 當值小于 0 或者沒有指定時,則表示容器在該 Servlet 被首次請求時才會被加載;
3. 當值大于 0 或等于 0 時,表示容器在啟動時就加載并初始化該?Servlet,取值越小,優先級越高;
4. 當取值相同時,容器就會自行選擇順序進行加載。
> @WebServlet 注解的 loadOnStartup 屬性與 web.xml 中的 load-on-startup 元素相對應,取值的規則和含義相同。
## 問題05:Servlet編碼初始化(讀取編碼)
### 配置默認值

### ServletConfig讀取配置

```
response.setContentType("text/html;charset="+code);
response.getWriter().print("編碼已經設置為:"+code);
```

## 問題06:ServletContext的獲取
```
ServletContext application = request.getServletContext();
```
> 可以通過上述方法,來獲得Servlet的一些基本信息,或者是將部分數據存儲在該對象中。
## 問題07:Servlet開發步驟
1. 處理編碼
2. 接收視圖層傳遞的參數
3. 進行必要的數據驗證和類型轉換,若驗證失敗跳轉到步驟9
4. 對數據進行封裝
5. 初始化模型層對象,并調用模型層方法
6. 初始化結果變量保存模型層方法處理結果
7. 對必要的信息或者是標識進行保存
8. 根據處理結果,如果符合預期,請求轉發或者重定向到**正確**頁面
9. 如果不符合預期,請求轉發或者重定向到**錯誤**頁面
- 1課程概述
- 2環境配置
- 3MVC
- 3.1View
- 3.1.1前端基礎
- 3.1.2JSP語法
- 3.1.3JSP內置對象1
- 3.1.4JSP內置對象2
- 3.2Bean
- 3.3Controller
- 3.3.1Servlet
- 3.3.2Filter
- 3.3.3Listener
- 3.4EL&JSTL
- 4三層架構
- 4.1數據庫操作
- 4.1.1JDBC
- 4.1.2JDBC優化
- 4.2三層架構設計
- 4.3程序優化
- 4.3.1數據庫連接優化
- 4.3.2數據庫操作優化
- 4.4安全專題
- 4.4.1Ajax異步查詢
- 4.4.2CAPTCHA
- 4.4.3MD5&SHA
- 4.4.4Cookie
- 4.4.5分頁顯示
- 4.4.6文件上傳
- 4.4.7發送郵件
- 5企業級框架
- 5.0Maven
- 5.1MyBatis
- 5.2Spring
- 5.3SpringMVC
- 6實踐項目
- 6.1實驗1-用戶登錄(MVC)
- 6.2實驗2-訪問統計(Servlet高級)
- 6.3實驗3-三層架構
- 6.4實驗4-安全信息系統