Servlet學習筆記(三):HTTP請求與響應


一、HTTP請求常用方法:

Cookie[] getCookies()
返回一個數組,包含客戶端發送該請求的所有的 Cookie 對象。

Enumeration getAttributeNames()
返回一個枚舉,包含提供給該請求可用的屬性名稱。

HttpSession getSession()
返回與該請求關聯的當前 session 會話,或者如果請求沒有 session 會話,則創建一個。

HttpSession getSession(boolean create)
返回與該請求關聯的當前 HttpSession,或者如果沒有當前會話,且創建是真的,則返回一個新的 session 會話。

String getRequestedSessionId()
返回由客戶端指定的 session 會話 ID。

Object getAttribute(String name)
以對象形式返回已命名屬性的值,如果沒有給定名稱的屬性存在,則返回 null。

String getCharacterEncoding()
返回請求主體中使用的字符編碼的名稱。

String getContentType()
返回請求主體的 MIME 類型,如果不知道類型則返回 null。

String getContextPath()
返回指示請求上下文的請求 URI 部分。

String getQueryString()
返回包含在路徑后的請求 URL 中的查詢字符串。

String getRemoteUser()
如果用戶已通過身份驗證,則返回發出請求的登錄用戶,或者如果用戶未通過身份驗證,則返回 null。

int getParameterMap()
將參數封裝成 Map 類型。

二、設置 HTTP 響應報頭的方法:

void reset()
清除緩沖區中存在的任何數據,包括狀態碼和頭。

void resetBuffer()
清除響應中基礎緩沖區的內容,不清除狀態碼和頭。

void setCharacterEncoding(String charset)
設置被發送到客戶端的響應的字符編碼(MIME 字符集)例如,UTF-8。

void setStatus(int sc)
為該響應設置狀態碼。

void setIntHeader(String name, int value)
設置一個帶有給定的名稱和整數值的響應報頭。

  HTTP Header 響應實例:

//導入必需的 java 庫
import java.io.IOException; import java.io.PrintWriter; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/Refresh") //擴展 HttpServlet 類
public class Refresh extends HttpServlet { // 處理 GET 方法請求的方法
      public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 設置刷新自動加載時間為 5 秒 response.setIntHeader("Refresh", 5); // 設置響應內容類型 response.setContentType("text/html;charset=UTF-8"); //使用默認時區和語言環境獲得一個日歷 Calendar cale = Calendar.getInstance(); //將Calendar類型轉換成Date類型 Date tasktime=cale.getTime(); //設置日期輸出的格式 SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  //格式化輸出 String nowTime = df.format(tasktime); PrintWriter out = response.getWriter(); String title = "自動刷新 Header 設置 - 菜鳥教程實例"; String docType =
          "<!DOCTYPE html>\n"; out.println(docType +
            "<html>\n" +
            "<head><title>" + title + "</title></head>\n"+
            "<body bgcolor=\"#f0f0f0\">\n" +
            "<h1 align=\"center\">" + title + "</h1>\n" +
            "<p>當前時間是:" + nowTime + "</p>\n"); } // 處理 POST 方法請求的方法
      public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }

  以上測試實例是位於 TomcatTest 項目下,對應的 web.xml 配置為:

<?xml version="1.0" encoding="UTF-8"?>  
<web-app>  
  <servlet>  
     <!-- 類名 --> <servlet-name>Refresh</servlet-name>  
    <!-- 所在的包 --> <servlet-class>com.runoob.test.Refresh</servlet-class>  
  </servlet>  
  <servlet-mapping> <servlet-name>Refresh</servlet-name> 同上面的類名 <!-- 訪問的網址 --> <url-pattern>/TomcatTest/Refresh</url-pattern> </servlet-mapping>  
</web-app> 

  現在,調用上面的 Servlet,每隔 5 秒會顯示當前系統時間。

三、HTTP狀態碼

404:服務器無法找到所請求的頁面。

403:禁止訪問所請求的頁面。

401:所請求的頁面需要用戶名和密碼。

405:在請求中指定的方法是不允許的。

307:所請求的頁面已經臨時轉移到一個新的 URL。

500:未完成的請求。服務器遇到了一個意外的情況。

  下面的方法可用於在 Servlet 程序中設置 HTTP 狀態碼。這些方法通過 HttpServletResponse 對象可用。

public void setStatus ( int statusCode )
該方法設置一個任意的狀態碼。setStatus 方法接受一個 int(狀態碼)作為參數。如果您的反應包含了一個特殊的狀態碼和文檔,請確保在使用 PrintWriter 實際返回任何內容之前調用 setStatus。

public void sendError(int code, String message)
該方法發送一個狀態碼(通常為 404),連同一個在 HTML 文檔內部自動格式化並發送到客戶端的短消息。

// 設置錯誤代碼和原因
response.sendError(407, "Need authentication!!!" );

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM