五 Http Servlet

在Servlet API 章節,我們已經談到了一部分關於H他Http Servvlet 的一部分。在本篇文章中,我們更加細緻地討論Http Servlet.

 

不像GenericServlet, Http Servlet 不會重載service()方法,而是重載doGet(),doPost()方法,或者同時重載這兩個方法。doGet()方法用於從服務器獲取信息,doPost()方法發送信息到服務器。

 

在Http Servlet中,沒有必要重載service()方法,因爲這個方法分發http 請求的哦呵對應的處理方法中,例如,如果接收到Http Get請求,就分發此請求到doGet()方法。

 

Http Servlet 如何工作的?

正如你看到的下面的這張圖,客戶端(用戶的瀏覽器)製造請求,這個請求可以是任意類型,例如是Get請求,Post請求,Head請求等,服務分發這些請求到servlet的service()方法。此方法分發這些請求到對應的處理者上,例如接收到Get請求,它就會分發請求到doGet()方法。

 

 

Http Servlet的繼承關係

java.lang.Object

|_extended by javax.servlet.GenericServlet

      |_extended by javax.servlet.http.HttpServlet

 

我已經在Generic Servlet 章節說過了總是應該使用HttpServlet而不是GenericServlet。HttpServlet 是很容易使用的,比GenericServlet有更多的方法。

 

Http Servlet 例子

 

我們創建一個html文件,它將在我們點擊這個頁面上的鏈接時調用一次servlet.

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Http Servlet Demo</title>

</head>

<body>

<a href="welcome">Click to call Servlet</a>

</body>

</html>

 

ExampleHttpServlet.java

現在我們通過繼承HttpServlet類創建了Http Servlet.

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

// Creating Http Servlet by Extending HttpServlet class

public class ExampleHttpServlet extends HttpServlet

{

private String mymsg;

public void init() throws ServletException

{

mymsg = "Http Servlet Demo";

}

public void doGet(HttpServletRequest request,

HttpServletResponse response) throws ServletException,

IOException

{

// Setting up the content type of web page

response.setContentType("text/html");

// Writing the message on the web page

PrintWriter out = response.getWriter();

out.println("<h1>" + mymsg + "</h1>");

out.println("<p>" + "Hello Friends!" + "</p>");

}

public void destroy()

{

// Leaving empty. Use this if you want to perform

//something at the end of Servlet life cycle.

}

}

web.xml

<web-app>

<display-name>BeginnersBookServlet</display-name>

<welcome-file-list>

<welcome-file>index.html</welcome-file>

<welcome-file>index.htm</welcome-file>

<welcome-file>index.jsp</welcome-file>

<welcome-file>default.html</welcome-file>

<welcome-file>default.htm</welcome-file>

<welcome-file>default.jsp</welcome-file>

</welcome-file-list>


<servlet>

<servlet-name>MyHttpServlet</servlet-name>

<servlet-class>ExampleHttpServlet</servlet-class>

</servlet>


<servlet-mapping>

<servlet-name>MyHttpServlet</servlet-name>

<url-pattern>/welcome</url-pattern>

</servlet-mapping>


</web-app>

 

 

現在,我們的目錄結構看起來像這個樣子:

 

HttpServlet

   ├── index.html

        └── WEB-INF

├── classes

│           └── ExampleHttpServlet.java

└── web.xml

 

 

放到tomcat webapps目錄器,

在classes編譯java文件

啓動tomcat

 

 

HttpServlet類中的方法

 

1) protected void doGet(HttpServletRequest req, HttpServletResponse resp): 這個方法被servlet的service()方法調用處理Http GET請求。當重載這個方法,讀取請求數據,寫響應頭信息,獲取response的writer或者輸出流對象,最終寫響應數據。

 

2) protected long getlastModified(HttpServletRequest res): 返回一個長整形指明HttpServletRequest對象最後修改時間。格林尼治時間1970年1月1日午夜後的毫秒,如果不知道時間,則爲-1。

 

3) protected void doHead(HttpServletRequest req, HttpServletResponse resp): servlet服務方法調用此方法來處理來自客戶端的HTTP頭請求。當客戶只希望查看響應的頭信息(如內容類型或內容長度)時,就發送HEAD請求

 

4) protected void doPost(HttpServletRequest req, HttpServletResponse resp): servlet服務方法調用此方法來處理來自客戶機的POST請求。HTTP POST方法允許客戶端一次性向Web服務器發送無限長度的數據(但是瀏覽器實際上是做了限制),在向服務器發送信息時非常有用。與我們從服務器獲取信息的doGet不同,當我們將信息從客戶端傳輸到服務器時,將使用此方法。

 

5) protected void doPut(HttpServletRequest req, HttpServletResponse resp): servlet服務方法調用此方法來處理來自客戶機的PUT請求。此方法與doPost方法類似,但與我們將信息發送到服務器的doPost方法不同,此方法將文件發送到服務器,這類似於從客戶機到服務器的FTP操作。

 

6) protected void doDelete(HttpServletRequest req, HttpServletResponse resp): 由servlet service()方法調用來處理來自客戶機的刪除請求,該請求允許客戶機從服務器刪除文檔、網頁或信息。

 

7) protected void doOptions(HttpServletRequest req, HttpServletResponse resp): 由service()方法調用,以允許servlet處理選項請求。OPTIONS請求確定服務器支持哪些HTTP方法,並返回適當的標頭。

 

8) protected void doTrace(HttpServletRequest req, HttpServletResponse resp): 此方法由service()方法調用,用於處理跟蹤請求。用於調試目的。

 

9) rotected void service(HttpServletRequest req, HttpServletResponse resp): 不需要覆蓋此方法,此方法從客戶端接收HTTP請求並將其轉發給相應的doXXX方法,如doGet()、doPost()、doHEAD()等。

 

10) public void service(ServletRequest req, ServletResponse res): 將客戶端請求轉發到受保護的service()方法。也沒有必要重寫這個方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章