respons pelayan JSP


Objek tindak balas respons terutamanya menghantar hasil yang diproses oleh bekas JSP kembali kepada pelanggan. Anda boleh menetapkan status HTTP dan menghantar data kepada klien melalui pembolehubah respons, seperti kuki, maklumat pengepala fail HTTP, dsb.

Respons biasa kelihatan seperti ini:

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

Barisan status mengandungi maklumat versi HTTP, seperti HTTP/1.1, kod status, seperti 200 dan mesej yang sangat ringkas Sepadan dengan kod status, seperti OK.

Jadual berikut meringkaskan bahagian yang paling berguna dalam pengepala respons HTTP1.1, yang sering anda lihat dalam pengaturcaraan rangkaian:

Tajuk BalasPenerangan
Benarkan                   Nyatakan kaedah permintaan yang disokong oleh pelayan (GET, POST, dll.)
Kawalan Cache                 Menentukan keadaan di mana dokumen respons boleh dicache dengan selamat. Biasanya nilainya ialah awam, peribadi atau tiada cache dsb. Awam bermaksud bahawa dokumen itu boleh dicache, dan Peribadi bermaksud bahawa dokumen itu hanya disampaikan kepada pengguna tunggal dan hanya boleh menggunakan cache peribadi. Tanpa cache bermakna dokumen tidak dicache.
Sambungan                 Mengarahkan penyemak imbas sama ada untuk menggunakan sambungan HTTP yang berterusan. closevalue mengarahkan penyemak imbas supaya tidak menggunakan sambungan HTTP yang berterusan, manakala keep-alive bermaksud menggunakan sambungan yang berterusan.
Pelupusan Kandungan                   Biarkan penyemak imbas meminta pengguna untuk menyimpan respons pada cakera di bawah nama yang diberikan
Pengekodan Kandungan                 Nyatakan peraturan pengekodan untuk halaman semasa penghantaran
                     Kandungan-Bahasa                 Bahasa yang digunakan untuk menyatakan dokumen, seperti en, en-us,, ru, dsb.
Panjang Kandungan                 Menunjukkan bilangan bait dalam respons. Hanya berguna jika penyemak imbas menggunakan sambungan HTTP yang berterusan (kekal hidup)
                             Jenis Kandungan                   Menunjukkan jenis MIME yang digunakan oleh dokumen
Tamat tempoh                 Nyatakan bila tamat tempoh dan alih keluar daripada cache
                         Terakhir Diubahsuai                 Menunjukkan bila dokumen terakhir diubah suai.Pelanggan boleh cache dokumen dan menyediakan pengepala permintaan If-Modified-Since
dalam permintaan seterusnya Lokasi                       Dalam masa 300 saat, termasuk semua alamat respons dengan kod status, penyemak imbas akan menyambung semula secara automatik dan mendapatkan dokumen baharu
Muat semula                 Menunjukkan kekerapan penyemak imbas meminta kemas kini pada halaman.
Cuba Semula-Selepas                 Digunakan dengan 503 (Perkhidmatan Tidak Tersedia) untuk memberitahu pengguna berapa lama masa yang diperlukan untuk permintaan dibalas
Set-Cookie               Nyatakan kuki yang sepadan dengan halaman semasa

Kelas HttpServletResponse

objek tindak balas ialah contoh kelas javax.servlet.http.HttpServletResponse. Sama seperti pelayan mencipta objek permintaan, ia juga mencipta respons klien.

Objek tindak balas mentakrifkan antara muka untuk memproses penciptaan pengepala HTTP. Dengan menggunakan objek ini, pembangun boleh menambah kuki atau cap masa baharu, kod status HTTP dan banyak lagi.

Jadual berikut menyenaraikan kaedah yang digunakan untuk menetapkan pengepala respons HTTP Kaedah ini disediakan oleh kelas HttpServletResponse:

S.N. Kaedah & Penerangan
1String encodeRedirectURL(String url)


Kodkan URL yang digunakan oleh kaedah sendRedirect()
2String encodeURL(String url)


Kodkan URL dan kembalikan URL yang mengandungi ID Sesi
3boolean mengandungiHeader(Nama rentetan)


Mengembalikan sama ada pengepala respons yang ditentukan wujud
4boolean isCommitted()


Mengembalikan sama ada respons telah diserahkan kepada pelanggan
5batal addCookie(Cookie cookie)


Tambahkan kuki yang ditentukan pada respons
6batal addDateHeader(Nama rentetan, tarikh panjang)


Tambahkan pengepala respons dan nilai tarikh nama yang ditentukan
                         7void addHeader(Nama rentetan, nilai rentetan)


Tambahkan pengepala respons dan nilai nama yang ditentukan
                         8void addIntHeader(Nama rentetan, nilai int)


Tambahkan pengepala respons dan nilai int bagi nama yang ditentukan
9void flushBuffer()


Tulis sebarang kandungan cache kepada pelanggan
10void reset()


Kosongkan sebarang data dalam sebarang cache, termasuk kod status dan pelbagai pengepala respons
                     11void resetBuffer()


Kosongkan data cache asas, tidak termasuk pengepala respons dan kod status
12void sendError(int sc)


Hantar respons ralat kepada klien dengan kod status yang ditentukan, kemudian kosongkan cache
13void sendError(int sc, String msg)


Hantar respons ralat kepada pelanggan menggunakan kod status dan mesej yang dinyatakan
                        14void sendRedirect(Lokasi rentetan)


Hantar respons tidak langsung sementara kepada pelanggan menggunakan URL yang ditentukan
                            15void setBufferSize(int size)


Tetapkan saiz cache badan tindak balas
16void setCharacterEncoding(String charset)


Tentukan set pengekodan respons (set aksara MIME), seperti UTF-8
17void setContentLength(int len)


Tentukan panjang kandungan respons dalam servlet HTTP Kaedah ini digunakan untuk menetapkan pengepala Panjang Kandungan HTTP
18void setContentType(Jenis rentetan)


Tetapkan jenis kandungan respons, jika respons belum diserahkan lagi
19void setDateHeader(Nama rentetan, tarikh panjang)


Tetapkan nama dan kandungan pengepala respons menggunakan nama dan nilai yang ditentukan
                20void setHeader(Nama rentetan, nilai rentetan)


Tetapkan nama dan kandungan pengepala respons menggunakan nama dan nilai yang ditentukan
                21void setIntHeader(Nama rentetan, nilai int)


Tetapkan nama dan kandungan pengepala respons menggunakan nama dan nilai yang ditentukan
                  22void setLocale(Locale loc)


Tetapkan tempat respons, jika respons belum diserahkan lagi
23void setStatus(int sc)


Tetapkan kod status respons

Contoh program pengepala respons HTTP

Contoh berikut menggunakan kaedah setIntHeader() dan kaedah setRefreshHeader() untuk mensimulasikan jam digital:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>
<h2>自动刷新实例</h2>
<%
   // 设置每隔5秒自动刷新
   response.setIntHeader("Refresh", 5);
   // 获取当前时间
   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;
   out.println("当前时间: " + CT + "\n");
%>
</body>
</html>

Simpan kod di atas sebagai main.jsp, dan kemudian semak imbas pelayan untuk mengaksesnya. Ia akan memaparkan masa sistem semasa setiap 5 saat.

Kita boleh lihat demonstrasi Gif berikut:

jsp1.gif

Anda juga boleh mengubah suai kod di atas sendiri dan mencuba kaedah lain untuk mendapatkan pengalaman yang lebih mendalam .