3.1 Kelas HttpServletResponse
Selepas memanggil service()
kaedah servlet anda, bekas web akan menghasilkan respons kepada klien berdasarkan HttpServletResponse
. Oleh itu, jika anda ingin mempengaruhi tindak balas kepada pelanggan, maka anda harus mengubah suai objek ini.
Respons pelayan terdiri daripada tiga bahagian:
- Baris status (contohnya: 200 OK)
- Pengepala
- Badan tindak balas
Dan kaedah kelas HttpServletResponse
juga dibahagikan kepada 3 kumpulan? Hampir:
Kaedah | Penerangan | |
---|---|---|
1 | void setStatus(int sc) |
Menetapkan kod status respons. |
2 | void sendError(int sc) |
Menghantar ralat kepada klien dengan kod yang ditentukan. |
3 | void sendError(int sc, String msg) |
Menghantar ralat dengan kod yang ditentukan dan mesej kepada klien. |
4 | void addHeader(String name, String value) |
Menambahkan pengepala pada senarai pengepala respons. |
5 | void setHeader(String name, String value) |
Menukar pengepala dalam senarai pengepala respons. |
6 | boolean containsHeader(String name) |
Menyemak sama ada pengepala sudah wujud. |
7 | void addCookie(Cookie cookie) |
Menambahkan Kuki pada respons. |
8 | void sendRedirect(String location) |
Mengubah hala klien ke URL lain. |
9 | String encodeRedirectURL(String url) |
Mengekodkan URL yang ditentukan untuk digunakan dalam kaedah sendRedirect. |
10 | String encodeURL(String url) |
Mengekodkan URL yang ditentukan, termasuk ID sesi. |
sebelas | void setContentType(String type) |
Menetapkan MimeType hasil. |
12 | void setContentLength(int len) |
Menetapkan panjang badan tindak balas. |
13 | void setCharacterEncoding(String charset) |
Menetapkan set pengekodan respons. |
14 | void setBufferSize(int size) |
Menetapkan saiz penimbal untuk badan tindak balas. |
15 | boolean isCommitted() |
Semak sama ada penimbal telah ditulis pada respons. |
16 | void flushBuffer() |
Menulis kandungan penimbal kepada tindak balas. |
17 | void reset() |
Menetapkan semula semua data yang disimpan dalam penimbal, pengepala dan kod tindak balas. |
18 | void resetBuffer() |
Membersihkan penimbal tindak balas. |
Kaedah di sini agak remeh. Tetapi saya akan memberikan anda beberapa sorotan di bawah.
Penampan . Respons servlet anda ditulis kepada penimbal, tidak dihantar terus kepada pengguna. Oleh itu, pada beberapa peringkat (jika, sebagai contoh, ralat berlaku), anda boleh menetapkan semula (memadam) semua yang ditulis ke penimbal. Anda juga boleh memanggil kaedah reset() dan memadamkan bukan sahaja kandungan penimbal, tetapi juga pengepala dengan kod tindak balas.
3.2 ubah hala()
Perkara penting kedua ialah ubah hala. Jika servlet anda memutuskan untuk mengubah hala klien ke URL lain, maka anda perlu menghantar URL ini kepada klien. Ini boleh dilakukan menggunakan sendRedirect
.
Tetapi ada nuansa penting. URI boleh mengandungi julat aksara yang lebih luas daripada yang dibenarkan dalam badan respons. Oleh itu, URL mesti terlebih dahulu dikodkan ke dalam set aksara yang sah sebelum memanggil kaedah sendRedirect()
. Terdapat kaedah khas untuk ini encodeRedirectURL(String url)
. gunakannya.
Contoh ubah hala:
public class RedirectServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
String newUrl = "http://google.com?q=Learn to google!";
String redirectUrl = response.encodeRedirectURL(newUrl);
response.sendRedirect(redirectUrl);
}
}
3.3 kaedah getWriter().
Dan sekarang kita akan belajar cara menulis teks kita sebagai badan tindak balas. Untuk melakukan ini, kelas HttpServletResponse
mempunyai kaedah khas getWriter()
yang mengembalikan objek PrintStream
. Jika ada yang terlupa, ini adalah jenis medan dengan nama System.out
.
Untuk menulis beberapa teks sebagai respons servlet, anda memerlukan:
- Dapatkan objek PrintStream dengan memanggil
response.getWriter()
. - Tulis apa sahaja yang anda fikirkan perlu pada objek PrintStream (semua data akan ditulis ke penimbal).
- Hantar penimbal kepada pengguna dengan memanggil kaedah
close()
pada PrintStream.
Mari tulis servlet yang menambah dua nombor a
dan b
mengembalikan hasilnya kepada pengguna:
public class CalculatorServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
// Getting the parameter “a” and “b” from request
String a = request.getParameter("a");
String b = request.getParameter("b");
try {
// Convert strings to numbers and calculate sum
int sum = Integer.parseInt(a) + Integer.parseInt(b);
// Print HTML as a response for browser
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head> <title> CalculatorServlet </title> </head>");
out.println("<body>");
out.println("<h1> Sum == " + sum + "</h1>");
out.println("</body>");
out.println("</html>");
} finally {
out.close();
}
}
}