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 Balas | Penerangan |
---|---|
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 |
---|---|
1 | String encodeRedirectURL(String url) |
2 | String encodeURL(String url) |
3 | boolean mengandungiHeader(Nama rentetan) |
4 | boolean isCommitted() |
5 | batal addCookie(Cookie cookie) |
6 | batal addDateHeader(Nama rentetan, tarikh panjang) |
7 | void addHeader(Nama rentetan, nilai rentetan) |
8 | void addIntHeader(Nama rentetan, nilai int) |
9 | void flushBuffer() |
10 | void reset() |
11 | void resetBuffer() |
12 | void sendError(int sc) |
13 | void sendError(int sc, String msg) |
14 | void sendRedirect(Lokasi rentetan) |
15 | void setBufferSize(int size) |
16 | void setCharacterEncoding(String charset) |
17 | void setContentLength(int len) |
18 | void setContentType(Jenis rentetan) |
19 | void setDateHeader(Nama rentetan, tarikh panjang) |
20 | void setHeader(Nama rentetan, nilai rentetan) |
21 | void setIntHeader(Nama rentetan, nilai int) |
22 | void setLocale(Locale loc) |
23 | void setStatus(int sc) |
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:
Anda juga boleh mengubah suai kod di atas sendiri dan mencuba kaedah lain untuk mendapatkan pengalaman yang lebih mendalam .