Servlet 是運行在Web服務器或應用服務器上的程序,它是作為來自 Web 瀏覽器或其他 HTTP 客戶端的請求和 HTTP 服務器上的數據庫或應用程序之間的中間層。
使用 Servlet,可以收集來自網頁表單的用戶輸入,呈現來自數據庫或者其他源的記錄,還可以動態創建網頁。
Servlet 生命周期可被定義為從創建直到毀滅的整個過程。以下是 Servlet 遵循的過程:
init 方法被設計成只調用一次。它在第一次創建 Servlet 時被調用,在后續每次用戶請求時不再調用。因此,它是用于一次性初始化。
Servlet 創建于用戶第一次調用對應于該 Servlet 的 URL 時,但是也可以指定 Servlet 在服務器第一次啟動時被加載。
當用戶調用一個 Servlet 時,就會創建一個 Servlet 實例,每一個用戶請求都會產生一個新的線程,適當的時候移交給 doGet 或 doPost 方法。
init 方法的定義如下:
public void init() throws ServletException {
// 初始化代碼...
}
Service()方法的定義如下:
public void service(ServletRequest request,ServletResponse response)
throws ServletException, IOException{}
service()方法是執行實際任務的主要方法。Servlet 容器調用 service() 方法來處理來自客戶端的請求,并把格式化的響應寫回給客戶端。
每次服務器接收到一個 Servlet 請求時,服務器會產生一個新的線程并調用服務。service() 方法檢查 HTTP 請求類型(GET、POST、PUT、DELETE 等),并在適當的時候調用 doGet、doPost、doPut,doDelete 等方法。所以,不用對 service() 方法做任何動作,只需要根據來自客戶端的請求類型來重寫 doGet() 或 doPost() 即可。
GET 請求來自于一個 URL 的正常請求,或者來自于一個未指定 METHOD 的 HTML 表單,它由 doGet() 方法處理。
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException {
// Servlet 代碼
}
POST 請求來自于一個特別指定了 METHOD 為 POST 的 HTML 表單,它由 doPost() 方法處理。
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException {
// Servlet 代碼
}
destroy() 方法只會被調用一次,在 Servlet 生命周期結束時被調用。destroy() 方法可以釋放鏈接、清除緩存、。
在調用 destroy() 方法之后,servlet 對象被標記為垃圾回收。
destroy 方法定義如下所示:
public void destroy() {
// 終止化代碼...
}
頭信息 | 描述 |
Accept | 這個頭信息指定瀏覽器或其他客戶端可以處理的 MIME 類型。值 image/png 或 image/jpeg 是最常見的兩種可能值。 |
Accept-Charset | 這個頭信息指定瀏覽器可以用來顯示信息的字符集。例如 ISO-8859-1。 |
Accept-Encoding | 這個頭信息指定瀏覽器知道如何處理的編碼類型。值 gzip 或 compress 是最常見的兩種可能值。 |
Accept-Language | 這個頭信息指定客戶端的首選語言,在這種情況下,Servlet 會產生多種語言的結果。例如,en、en-us、ru 等。 |
Authorization | 這個頭信息用于客戶端在訪問受密碼保護的網頁時識別自己的身份。 |
Connection | 這個頭信息指示客戶端是否可以處理持久 HTTP 連接。持久連接允許客戶端或其他瀏覽器通過單個請求來檢索多個文件。值 Keep-Alive 意味著使用了持續連接。 |
Content-Length | 這個頭信息只適用于 POST 請求,并給出 POST 數據的大小(以字節為單位)。 |
Cookie | 這個頭信息把之前發送到瀏覽器的 cookies 返回到服務器。 |
Host | 這個頭信息指定原始的 URL 中的主機和端口。 |
If-Modified-Since | 這個頭信息表示只有當頁面在指定的日期后已更改時,客戶端想要的頁面。如果沒有新的結果可以使用,服務器會發送一個 304 代碼,表示 Not Modified 頭信息。 |
If-Unmodified-Since | 這個頭信息是 If-Modified-Since 的對立面,它指定只有當文檔早于指定日期時,操作才會成功。 |
Referer | 這個頭信息指示所指向的 Web 頁的 URL。例如,如果您在網頁 1,點擊一個鏈接到網頁 2,當瀏覽器請求網頁 2 時,網頁 1 的 URL 就會包含在 Referer 頭信息中。 |
User-Agent | 這個頭信息識別發出請求的瀏覽器或其他客戶端,并可以向不同類型的瀏覽器返回不同的內容。 |
通過 HttpServletRequest 對象獲取相應方法。
序號 | 方法 & 描述 |
1 | Cookie[] getCookies() |
2 | Enumeration getAttributeNames() |
3 | Enumeration getHeaderNames() |
4 | Enumeration getParameterNames() |
5 | HttpSession getSession() |
6 | HttpSession getSession(boolean create) |
7 | Locale getLocale() |
8 | Object getAttribute(String name) |
9 | ServletInputStream getInputStream() |
10 | String getAuthType() |
11 | String getCharacterEncoding() |
12 | String getContentType() |
13 | String getContextPath() |
14 | String getHeader(String name) |
15 | String getMethod() |
16 | String getParameter(String name) |
17 | String getPathInfo() |
18 | String getProtocol() |
19 | String getQueryString() |
20 | String getRemoteAddr() |
21 | String getRemoteHost() |
22 | String getRemoteUser() |
23 | String getRequestURI() |
24 | String getRequestedSessionId() |
25 | String getServletPath() |
26 | String[] getParameterValues(String name) |
27 | boolean isSecure() |
28 | int getContentLength() |
29 | int getIntHeader(String name) |
30 | int getServerPort() |
31 | int getParameterMap() |
頭信息 | 描述 |
Allow | 這個頭信息指定服務器支持的請求方法(GET、POST 等)。 |
Cache-Control | 這個頭信息指定響應文檔在何種情況下可以安全地緩存。可能的值有:public、private 或 no-cache 等。Public 意味著文檔是可緩存,Private 意味著文檔是單個用戶私用文檔,且只能存儲在私有(非共享)緩存中,no-cache 意味著文檔不應被緩存。 |
Connection | 這個頭信息指示瀏覽器是否使用持久 HTTP 連接。值 close 指示瀏覽器不使用持久 HTTP 連接,值 keep-alive 意味著使用持久連接。 |
Content-Disposition | 這個頭信息可以讓您請求瀏覽器要求用戶以給定名稱的文件把響應保存到磁盤。 |
Content-Encoding | 在傳輸過程中,這個頭信息指定頁面的編碼方式。 |
Content-Language | 這個頭信息表示文檔編寫所使用的語言。例如,en、en-us、ru 等。 |
Content-Length | 這個頭信息指示響應中的字節數。只有當瀏覽器使用持久(keep-alive)HTTP 連接時才需要這些信息。 |
Content-Type | 這個頭信息提供了響應文檔的 MIME(Multipurpose Internet Mail Extension)類型。 |
Expires | 這個頭信息指定內容過期的時間,在這之后內容不再被緩存。 |
Last-Modified | 這個頭信息指示文檔的最后修改時間。然后,客戶端可以緩存文件,并在以后的請求中通過 If-Modified-Since 請求頭信息提供一個日期。 |
Location | 這個頭信息應被包含在所有的帶有狀態碼的響應中。在 300s 內,這會通知瀏覽器文檔的地址。瀏覽器會自動重新連接到這個位置,并獲取新的文檔。 |
Refresh | 這個頭信息指定瀏覽器應該如何盡快請求更新的頁面。您可以指定頁面刷新的秒數。 |
Retry-After | 這個頭信息可以與 503(Service Unavailable 服務不可用)響應配合使用,這會告訴客戶端多久就可以重復它的請求。 |
Set-Cookie | 這個頭信息指定一個與頁面關聯的 cookie。 |
通過 HttpServletResponse 對象獲取。
序號 | 方法 & 描述 |
1 | String encodeRedirectURL(String url) |
2 | String encodeURL(String url) |
3 | boolean containsHeader(String name) |
4 | boolean isCommitted() |
5 | void addCookie(Cookie cookie) |
6 | void addDateHeader(String name, long date) |
7 | void addHeader(String name, String value) |
8 | void addIntHeader(String name, int value) |
9 | void flushBuffer() |
10 | void reset() |
11 | void resetBuffer() |
12 | void sendError(int sc) |
13 | void sendError(int sc, String msg) |
14 | void sendRedirect(String location) |
15 | void setBufferSize(int size) |
16 | void setCharacterEncoding(String charset) |
17 | void setContentLength(int len) |
18 | void setContentType(String type) |
19 | void setDateHeader(String name, long date) |
20 | void setHeader(String name, String value) |
21 | void setIntHeader(String name, int value) |
22 | void setLocale(Locale loc) |
23 | void setStatus(int sc) |
代碼 | 消息 | 描述 |
100 | Continue | 只有請求的一部分已經被服務器接收,但只要它沒有被拒絕,客戶端應繼續該請求。 |
101 | Switching Protocols | 服務器切換協議。 |
200 | OK | 請求成功。 |
201 | Created | 該請求是完整的,并創建一個新的資源。 |
202 | Accepted | 該請求被接受處理,但是該處理是不完整的。 |
203 | Non-authoritative Information | |
204 | No Content | |
205 | Reset Content | |
206 | Partial Content | |
300 | Multiple Choices | 鏈接列表。用戶可以選擇一個鏈接,進入到該位置。最多五個地址。 |
301 | Moved Permanently | 所請求的頁面已經轉移到一個新的 URL。 |
302 | Found | 所請求的頁面已經臨時轉移到一個新的 URL。 |
303 | See Other | 所請求的頁面可以在另一個不同的 URL 下被找到。 |
304 | Not Modified | |
305 | Use Proxy | |
306 | Unused | 在以前的版本中使用該代碼。現在已不再使用它,但代碼仍被保留。 |
307 | Temporary Redirect | 所請求的頁面已經臨時轉移到一個新的 URL。 |
400 | Bad Request | 服務器不理解請求。 |
401 | Unauthorized | 所請求的頁面需要用戶名和密碼。 |
402 | Payment Required | 您還不能使用該代碼。 |
403 | Forbidden | 禁止訪問所請求的頁面。 |
404 | Not Found | 服務器無法找到所請求的頁面。. |
405 | Method Not Allowed | 在請求中指定的方法是不允許的。 |
406 | Not Acceptable | 服務器只生成一個不被客戶端接受的響應。 |
407 | Proxy Authentication Required | 在請求送達之前,您必須使用代理服務器的驗證。 |
408 | Request Timeout | 請求需要的時間比服務器能夠等待的時間長,超時。 |
409 | Conflict | 請求因為沖突無法完成。 |
410 | Gone | 所請求的頁面不再可用。 |
411 | Length Required | "Content-Length" 未定義。服務器無法處理客戶端發送的不帶 Content-Length 的請求信息。 |
412 | Precondition Failed | 請求中給出的先決條件被服務器評估為 false。 |
413 | Request Entity Too Large | 服務器不接受該請求,因為請求實體過大。 |
414 | Request-url Too Long | 服務器不接受該請求,因為 URL 太長。當您轉換一個 "post" 請求為一個帶有長的查詢信息的 "get" 請求時發生。 |
415 | Unsupported Media Type | 服務器不接受該請求,因為媒體類型不被支持。 |
417 | Expectation Failed | |
500 | Internal Server Error | 未完成的請求。服務器遇到了一個意外的情況。 |
501 | Not Implemented | 未完成的請求。服務器不支持所需的功能。 |
502 | Bad Gateway | 未完成的請求。服務器從上游服務器收到無效響應。 |
503 | Service Unavailable | 未完成的請求。服務器暫時超載或死機。 |
504 | Gateway Timeout | 網關超時。 |
505 | HTTP Version Not Supported | 服務器不支持"HTTP協議"版本。 |
通過 HttpServletResponse 對象獲取。
序號 | 方法 & 描述 |
1 | public void setStatus ( int statusCode ) |
2 | public void sendRedirect(String url) |
3 | public void sendError(int code, String message) |
期咱們聊到了mvvm模型,這一期咱們來聊一下vue的實例,這個是個很重要的東西,千萬別輕視了,下面開始:
目標:1 了解實例中的data用法和method用法
最基本的實例是什么樣子的呢,是這樣的啦:
這樣理解是不是就很清楚啦?
為了再詳細解釋一下這個概念,咱們來做一個練習:
這個練習很經典,就是實現一個加法器,比如左邊兩個輸入框,右邊為結果框,當左邊輸入時點擊等于=號,計算結果:
目的:鍛煉data和method的理解,下面開始我的表演:
圖片在這里,該腫么辦呢?那按照步驟來吧!
1 先創建html文件,命名method.html
2 完成上文提到的vue三部曲(這個一定要掌握,后面項目要用到)
3 vue三部曲搞完之后搞頁面,創造三個input框,一個按鈕
4使用v-model綁定屬性
5 綁定方法
這樣就可以算出來啦!
總結:通過兩個input框綁定數值,這樣當input框輸入值時,通過v-model綁定了值,在等于號加上方法,當輸入值時,點擊等于號,調用方法,這樣雙向綁定的方法會計算出來!
下一期會講一下組件的用法,這也是很重要的,同時也是為電商項目實戰做準備,歡迎關注!
. 下列哪一種敘述是正確的(D )
A. abstract修飾符可修飾字段、方法和類
B. 抽象方法的body部分必須用一對大括號{ }包住
C. 聲明抽象方法,大括號可有可無
D. 聲明抽象方法不可寫出大括號
2. 如下代碼
public class Test { public int aMethod() { static int i=0; i++; return i; } public static void main (String args[]) { Test test=new Test(); test.aMethod(); int j=test.aMethod(); System.out.println(j); } }
輸出結果是什么? D
A. 0
B. 1
C. 2
D. 編譯失敗
3. 下列哪種說法是正確的( D)
A. 實例方法可直接調用超類的實例方法
B. 實例方法可直接調用超類的類方法
C. 實例方法可直接調用其他類的實例方法
D. 實例方法可直接調用本類的類方法
4. 如下代碼:
class Super { public Integer getLenght() { return new Integer(4); } } public class Sub extends Super { public Long getLenght() { return new Long(5); } public static void main(String[] args) { Super sooper=new Super(); Sub sub=new Sub(); System.out.println(sooper.getLenght().toString() + "," + sub.getLenght().toString() ); } }
輸出是什么? B
A. 4,4
B. 4,5
C. 5,4
D. 5,5
5. 在Servlet處理請求的方式為: C
A.以進程的方式
B.以程序的方式
C.以線程的方式
D.以響應的方式
6. JDBC中,用于表示數據庫連接的對象是: B
A.Statement
B.Connection
C.DriverManager
D.PreparedStatement
7. 用于調用存儲過程的對象是: C
A.ResultSet
B.DriverManager
C.CallableStatemet
D.PreparedStatement
8. 按照MVC設計模式,JSP用于實現: B
A.Model
B.View
C.Controller
D.容器
9. 下面的語句會產生什么樣的輸出? A
System.out.println(4&7);
A.4
B.5
C.6
D.7
E.0
10.下面哪個不是JAVA關鍵字 A
A integer
B double
C float
D default
11. 在J2EE中屬于Web層的組件有: A
A.Servlet
B.EJB
C.Applet
D.HTML
12. 在Servlet的生命周期中,容器只調用一次的方法是: C
A.service
B.getServletConfig
C.init
D.destroy
13. 以下關于異常的說法正確的是:D
A. 一旦出現異常,程序運行就終止了
B. 如果一個方法申明將拋出某個異常,它就必須真的拋出那個異常
C. 在catch子句中匹配異常是一種精確匹配
D. 可能拋出系統異常的方法是不需要申明異常的
14. 如下代碼:
public class Foo { public static void main(String[] args) { try { return; } finally { System.out.println( "Finally" ); } } }
輸出結果是什么? A
A. Finally
B.編譯失敗
C. 代碼正常運行但沒有任何輸出.
D. 運行時拋出異常
15. jsp指令中isELIgnored="boolean"的意思是(C )
A.決定是否實現Servler的單線程模式,
B.決定改頁面是否是一個錯誤處理頁面,
C.決定是否支持EL表示,
D.沒有具體的含義。
16.下列標識符(名字)命名原則中,正確的是( ) D
A. 類名的首字母小寫
B. 變量和方法名的首寫字母大寫
C. 接口名的首寫字母小寫
D. 常量完全大寫
17. 對于import java.util包,以下那種說法是錯誤的?C
A. Vector類屬于java.util包
B. Vector類放在…/java/util/目錄下
C. Vector類放在java.util文件中
D. Vector類是Sun公司的產品
18. 在一個線程中Sleep(1000)方法,將使得該線程在多少時間后獲得對CPU的控制(假設睡眠過程中不會有其他事件喚醒該線程)?C
A. 正好1000毫秒
B. 1000毫秒不到
C.=>1000毫秒
D. 不一定
19. 在WEB-INF目錄下,必須存放的文件為: B
A.class文件
B.web.xml
B.jar文件
D.html文件
20. 下面關于垃圾收集的說法正確的是:D
A. 一旦一個對象成為垃圾,就立刻被收集掉。
B. 對象空間被收集掉之后,會執行該對象的finalize方法
C. finalize方法和C++的析構函數是完全一回事情
D. 一個對象成為垃圾是因為不再有引用指著它,但是線程并非如此。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。