Sambutan HTTP pelayan Servlet


Seperti yang dibincangkan dalam bahagian sebelumnya, apabila pelayan web bertindak balas kepada permintaan HTTP, respons biasanya termasuk baris status, beberapa pengepala respons, baris kosong dan dokumentasi. Respons biasa kelihatan seperti ini:

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

Baris status termasuk versi HTTP (dalam kes ini HTTP/1.1), kod status (dalam kes ini 200) dan rentetan pendek yang sepadan dengan kod status (OK dalam kes ini).

Jadual berikut meringkaskan pengepala respons HTTP 1.1 yang paling berguna yang dikembalikan daripada pelayan web ke penyemak imbas, yang akan anda gunakan dengan kerap dalam pengaturcaraan web:

头信息描述
Allow这个头信息指定服务器支持的请求方法(GET、POST 等)。
Cache-Control这个头信息指定响应文档在何种情况下可以安全地缓存。可能的值有:public、privateno-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。

Kaedah untuk menetapkan pengepala respons HTTP

Kaedah berikut boleh digunakan untuk menetapkan pengepala respons HTTP dalam program Servlet. Kaedah ini tersedia melalui objek HttpServletResponse.

Nombor siriKaedah & Penerangan
1String encodeRedirectURL(String url )
Enkodkan URL yang ditentukan untuk digunakan dalam kaedah sendRedirect, atau jika pengekodan tidak diperlukan, kembalikan URL tidak berubah.
2String encodeURL(String url)
Encode URL yang ditentukan yang mengandungi ID sesi, atau jika pengekodan tidak diperlukan , URL yang dikembalikan kekal tidak berubah.
3boolean containsHeader(String name)
Mengembalikan nilai Boolean yang menunjukkan sama ada pengepala respons yang dinamakan telah ditetapkan.
4boolean isCommitted()
Mengembalikan nilai Boolean yang menunjukkan sama ada respons telah dilakukan.
5void addCookie(Cookie cookie)
Menambahkan kuki yang ditentukan pada respons.
6kosongkan addDateHeader(Nama rentetan, tarikh panjang)
Menambahkan respons dengan nama dan kepala berita nilai tarikh yang diberikan.
7void addHeader(String name, String value)
Menambahkan pengepala respons dengan nama dan nilai yang diberikan .
8void addIntHeader(String name, int value)
Menambahkan respons dengan nama yang diberikan dan kepala berita nilai integer.
9void flushBuffer()
Memaksa apa-apa dalam penimbal untuk ditulis kepada klien.
10void reset()
Kosongkan sebarang data yang terdapat dalam penimbal, termasuk kod status dan pengepala.
11void resetBuffer()
Kosongkan kandungan penimbal asas dalam respons, tetapi jangan kosongkan kod status dan tajuk.
12void sendError(int sc)
Menghantar respons ralat kepada klien menggunakan kod status yang ditentukan dan mengosongkan penimbal .
13void sendError(int sc, String msg)
Menghantar respons ralat kepada klien menggunakan status yang ditentukan.
14void sendRedirect(String location)
Menghantar respons ubah hala sementara kepada klien menggunakan URL lokasi ubah hala yang ditentukan.
15void setBufferSize(int size)
Menetapkan saiz penimbal pilihan untuk badan tindak balas.
16void setCharacterEncoding(String charset)
Tetapkan pengekodan aksara (MIME charset) bagi respons yang dihantar kepada klien cth. , UTF-8.
17void setContentLength(int len)
Tetapkan panjang isi kandungan dalam respons HTTP Servlet ditetapkan pengepala Panjang Kandungan HTTP.
18void setContentType(String type)
Tetapkan kandungan respons yang dihantar kepada klien jika respons belum dihantar lagi jenis.
19void setDateHeader(Nama rentetan, tarikh panjang)
Menetapkan pengepala respons dengan nama dan nilai tarikh yang diberikan.
20void setHeader(String name, String value)
Tetapkan pengepala respons dengan nama dan nilai yang diberikan.
21void setIntHeader(String name, int value)
Menetapkan respons dengan nama yang diberikan dan kepala berita nilai integer.
22void setLocale(Locale loc)
Jika respons belum diserahkan lagi, tetapkan tempat respons.
23void setStatus(int sc)
Menetapkan kod status untuk respons ini.

Contoh Respons Pengepala HTTP

Anda telah melihat kaedah setContentType() dalam contoh sebelumnya, dan perkara yang sama digunakan dalam contoh berikut Kaedah, sebagai tambahan, kami akan menggunakan kaedah setIntHeader() untuk menetapkan pengepala Refresh.

// 导入必需的 java 库
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
 
// 扩展 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");
 
      // Get current time
      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 = "自动刷新 Header 设置";
      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>当前时间是:" + CT + "</p>\n");
  }
  // 处理 POST 方法请求的方法
  public void doPost(HttpServletRequest request,
                     HttpServletResponse response)
      throws ServletException, IOException {
     doGet(request, response);
  }
}

Sekarang, panggil Servlet di atas dan masa sistem semasa akan dipaparkan setiap 5 saat. Cuma jalankan Servlet dan tunggu seketika, dan anda akan melihat hasil berikut:

自动刷新 Header 设置

当前时间是:9:44:50 PM

Segar semula tetapan Pengepala secara automatik

Masa semasa ialah: 9:44:50 PM<🎜><🎜><🎜><🎜><🎜><🎜>