當前位置:首頁 » Servlets » Servlet服務器HTTP響應

Servlet服務器HTTP響應

Servlets服務器HTTP響應實例代碼 - 當一個Web服務器響應一個HTTP請求的瀏覽器的響應通常包括一個狀態行,一些響應報頭,一個空行,和文檔。

正如前麵的章節中討論的那樣,當一個Web服務器響應一個HTTP請求的瀏覽器的響應通常包括一個狀態行,一些響應報頭,一個空行,和文檔。一個典型的反應看起來像這樣:

HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
  (Blank Line)
<!doctype ...>
<html>
<head>...</head>
<body>
...
</body>
</html>

狀態行包含HTTP版本(HTTP/1.1的例子),一個狀態代碼(在本例中為200),並在很短消息對應的狀態代碼(例子中的OK)。

以下是總結了最有用的HTTP 1.1響應報頭回到瀏覽器從Web服務器端,你會非常頻繁地使用他們在網絡編程:

報頭 描述
Allow 這個頭指定服務器支持的請求方法(GET,POST等)。
Cache-Control 這個頭指定響應文件在何種情況下可以安全地緩存。它可以的值有:public, private 或 no-cache等。公共意味著是可緩存的文件,是為單個用戶私用文件隻能存儲在私有(非共享)緩存和緩存裝置文件不應被緩存。
Connection 這頭指示瀏覽器是否使用持久HTTP連接或不是。其值接近指示瀏覽器使用持久HTTP連接,並保持活著的意味著使用永久連接。
Content-Disposition 這頭可以讓你請求的瀏覽器要求用戶在一個文件中給定的名稱保存到磁盤。
Content-Encoding 在傳輸過程中,這個頭指定的頁麵編碼的方式。
Content-Language 該頭表示寫入的文件所用的語言。例如,en,EN-US等。
Content-Length 此標頭指示的響應中的字節數。隻有當瀏覽器使用持久(保持活動狀態)HTTP連接時需要這些信息。
Content-Type 這個頭提供了響應文件的MIME(多用途互聯網郵件擴展)類型的。
Expires 這個頭指定的內容應考慮的日期,因此不再被緩存的時間。
Last-Modified 此標頭指示的文件的最後修改時間。然後,客戶端可以緩存文件,並在以後的請求中的一個If-Modified-Since請求頭提供一個日期。
Location 這個頭文件中應包含的所有反應,有一個狀態代碼的300s。這通知瀏覽器的文件的地址。瀏覽器會自動重新連接到這個位置,並獲取新的文件。
Refresh 這個頭指定瀏覽器應該如何儘快要求更新的頁麵。您可以指定時間的秒數後的頁麵將被刷新。
Retry-After 這頭可以配合使用503(服務不可用)響應告訴客戶端很快就可以重複它的要求。
Set-Cookie 這個頭指定一個與頁麵關聯的Cookie。

設置HTTP響應頭的方法:

有下麵的方法可用於設置HTTP響應報頭中的Servlet程序。這些方法是HttpServletResponse對象。

S.N. 方法& 描述
1 String encodeRedirectURL(String url)
用於在指定的URL進行編碼sendRedirect方法或如果編碼不是必需時,返回的URL不變。
2 String encodeURL(String url)
包括會話ID在指定的URL進行編碼,或者如果不需要編碼,返回的URL不變。
3 boolean containsHeader(String name)
返回一個布爾值,指示是否已命名的響應頭已經被設置。
4 boolean isCommitted()
返回一個布爾值,指示是否響應已經提交。
5 void addCookie(Cookie 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)
發送臨時重定向響應到客戶端使用指定的位置URL重定向。
15 void setBufferSize(int size)
設置為主體的反應的首選的緩衝區大小。
16 void setCharacterEncoding(String charset)
設置的字符編碼(MIME字符集)被發送到客戶端的響應,例如,轉換為UTF-8。
17 void setContentLength(int len)
設置在HTTP Servlet的響應內容體的長度,這種方法設置HTTP Content-Length頭。
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)
設置此響應的狀態碼。

HTTP頭的響應示例:

您已經在前麵看到setContentType()方法例子,下麵的例子也用同樣的方法,此外,我們會用usesetIntHeader()方法來設置刷新頭。

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
 
// Extend HttpServlet class
public class Refresh extends HttpServlet {
 
  // Method to handle GET method request.
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
            throws ServletException, IOException
  {
      // Set refresh, autoload time as 5 seconds
      response.setIntHeader("Refresh", 5);
 
      // Set response content type
      response.setContentType("text/html");
 
      // Get current time - by www.gitbook.net
      Calendar calendar = new GregorianCalendar();
      String am_pm;
      int hour = calendar.get(Calendar.HOUR);
      int minute = calendar.get(Calendar.MINUTE);
      int second = calendar.get(Calendar.SECOND);
      if(calendar.get(Calendar.AM_PM) == 0)
        am_pm = "AM";
      else
        am_pm = "PM";
 
      String CT = hour+":"+ minute +":"+ second +" "+ am_pm;
    
      PrintWriter out = response.getWriter();
      String title = "Auto Refresh Header Setting";
      String docType =
      "<!doctype html public \"-//w3c//dtd html 4.0 " +
      "transitional//en\">\n";
      out.println(docType +
        "<html>\n" +
        "<head><title>" + title + "</title></head>\n"+
        "<body bgcolor=\"#f0f0f0\">\n" +
        "<h1 align=\"center\">" + title + "</h1>\n" +
        "<p>Current Time is: " + CT + "</p>\n");
  }
  // Method to handle POST method request.
  public void doPost(HttpServletRequest request,
                     HttpServletResponse response)
      throws ServletException, IOException {
     doGet(request, response);
  }
}

現在,調用上麵的servlet會顯示當前係統時間後,每隔5秒,如下所示。隻要運行servlet看到的結果如下:

Auto Refresh Header Setting

Current Time is: 9:44:50 PM