Fungsi utama dari Servlet adalah memproses permintaan dan merespons klien. Untuk alasan ini, untuk setiap permintaan, wadah web akan membuat dua objek sebelum memanggil layanan (), yaitu httpservletRequest dan httpservletResponse. Di mana httpservletRequest merangkum pesan permintaan http, httpservletResponse merangkum pesan respons HTTP. Perlu dicatat bahwa selama pengoperasian server web, setiap servlet hanya akan membuat satu objek instance, tetapi setiap permintaan akan menghubungi Layanan (ServletRequest Req, ServletResponse res) metode instance Servlet. Di sini httpservletRequest adalah subclass dari servletRequest, dan httpservletResponse adalah subclass dari servletResponse.
Diagram hubungan warisan dari antarmuka httpservletrequest dan httpservletResponse adalah sebagai berikut:
1. HttpservletResponse
Antarmuka httpservletResponse mewarisi antarmuka servletResponse. Karena pesan respons HTTP dibagi menjadi tiga bagian: baris status, badan pesan respons, dan badan pesan, antarmuka httpservletResponse mendefinisikan metode untuk mengirim kode status respons, header pesan respons, dan badan pesan respons ke klien. Meskipun ada banyak metode dalam antarmuka httpservletResponse, kami hanya menggunakan beberapa yang umum digunakan. Jika Anda menggunakan metode lain, Anda dapat membaca kode sumber atau informasi terkait dari respons.
Kirim Fungsi Terkait Kode Status
Metode Deskripsi public void setStatus (int sc) Mengatur kode status untuk pesan respons. Server web menghasilkan baris status dengan kode status 200 secara default. Public void sendError (int sc) mengirimkan kode status yang menunjukkan pesan kesalahan. Metode kedua juga menambahkan pesan teks untuk meminta deskripsi public void sendError (int sc, string msg)
Kirim Fungsi Terkait Header Pesan Respons
Metode Deskripsi public void addheader (nama string, nilai string) Mengatur bidang header respons http, nama menentukan nama bidang, dan nilai menentukan nilai bidang. AddHeader dapat menambahkan bidang header respons dengan nama yang sama, setheader akan menimpa bidang header dengan nama yang sama public void setHeader (nama string, nilai string) public void setContentLength (int len) mengatur ukuran konten entitas yang ditetapkan, dalam byte, yang menetapkan nilai dari bidang-konten void public-length public-lever public , Menetapkan nilai bidang tipe konten public void setCharacterencoding (string charset) mengatur pengkodean karakter konten output, yaitu, menetapkan nilai bidang tipe konten. Perhatikan bahwa prioritas metode ini lebih tinggi dari pada setContentType public void sendReDirect (String Location) Servlet Request Redirect
Kirim Pesan Respons Fungsi terkait tubuh
| metode | menjelaskan |
| Public ServeLeTutStream getOutputStream () | Dapatkan stream output byte dari tipe httpservletResponse servletoutputstram |
| Public Printwriter GetWriter () | Dapatkan stream output karakter Jenis httpservletResponse |
Masalah Kacang Output Cina
Data di komputer disimpan dalam bentuk biner, jadi ketika teks ditransfer, konversi antara byte karakter akan terjadi. Konversi antara karakter dan byte diselesaikan melalui tabel pencarian kode. Proses mengubah karakter menjadi byte disebut encoding, dan proses mengubah byte menjadi karakter disebut decoding. Jika tabel kode yang digunakan untuk pengkodean dan decoding berbeda, masalah kode kacau akan terjadi.
Catatan: Saat mengkode aliran output karakter dari objek httpservletResponse, standarnya adalah pengkodean ISO 8859-1. Metode pengkodean ini tidak sesuai dengan Cina. Misalnya, "Cina" akan dikodekan sebagai "63 63" (karakter yang tidak dapat ditemukan di tabel kode ISO 8959-1 akan ditampilkan 63). Ketika browser mendekode data yang diterima, itu akan menggunakan GB2312 secara default, mendekode "63" ke "?", Dan browser akan memecahkan kode dua karakter "Cina" menjadi "??".
Contoh Program HttpservletResponse
paket zzz; import java.io.ioException; import java.io.printwriter; import javax.servlet.http.httpservlet; import javax.servlet.http.htpservletrequest; import javax.servlet.http.htpservletequest; DoGet (permintaan httpservletrequest, respons httpservletResponse) melempar ioException {// Atur pengkodean pesan respons, setelah berkomentar "Cina", "respons yang kacau. DOPOST (permintaan httpservletRequest, respons httpservletResponse) melempar ioException {this.doget (permintaan, respons);Terkadang Anda akan menemukan masalah lompatan halaman secara teratur. Bidang header refresh di HTTP dapat memberi tahu browser untuk secara otomatis menyegarkan dan melompat ke halaman lain dalam waktu yang ditentukan, dan halaman web akan menyegarkan dan melompat ke halaman yang ditentukan secara teratur.
paket zzz; import java.io.ioException; import java.io.printwriter; import javax.servlet.http.httpservlet; import javax.servlet.http.htpservletrequest; import javax.servlet.http.htpservletequest; DoGet (permintaan httpservletRequest, respons httpservletResponse) melempar ioException {// atur respons response encoding response.setContentType ("text/html; charset = utf-8"); response.setheader ("Refresh", "2; url = http: //www.baidu.com"); Printwriter out = response.getWriter (); out.println ("Halo Cina, lompat ke Baidu dalam 2 detik ..."); } @Override public void dopost (permintaan httpservletrequest, respons httpservletResponse) melempar ioException {this.doget (permintaan, respons); }}2. HttpservletRequest
Antarmuka HTTPServletRequest mewarisi antarmuka ServletRequest dan secara khusus digunakan untuk pesan permintaan HTTP yang dienkapsulasi. Karena informasi permintaan HTTP mencakup tiga bagian: jalur permintaan, header permintaan dan badan permintaan, antarmuka httpservletRequest menentukan metode terkait untuk mendapatkan jalur permintaan, header permintaan dan badan permintaan.
Metode terkait untuk mendapatkan baris permintaan
| metode | menjelaskan |
| getMethod string publik () | Dapatkan metode permintaan HTTP, posting, dapatkan, dll. |
| string publik getRequesturi () | Dapatkan bagian Nama Sumber Daya di baris permintaan |
| Public String getQueryString () | Dapatkan bagian parameter di baris permintaan |
| getsprotocol public string () | Dapatkan nama dan versi protokol di baris permintaan, seperti HTTP 1.1 |
| string publik getContextPath () | Dapatkan jalur milik aplikasi web di URL permintaan |
Bahkan, metode Metode Permintaan dapat dilihat dari nama metode, jadi saya tidak akan mempostingnya satu per satu di sini.
Metode terkait untuk mendapatkan header pesan permintaan
| metode | menjelaskan |
| String publik getHeader (nama string) | Dapatkan nilai bidang yang ditentukan, jika tidak ada nol yang dikembalikan, jika ada beberapa pengembalian nilai pertama |
| PENCABUAN PUBLIK <String> getHeaders (nama string) | Mengembalikan objek koleksi enumerasi dengan bidang yang ditentukan |
| enumerasi publik <string> getHeaderNames () | Mengembalikan objek koleksi enumerasi yang berisi semua bidang |
| string publik getContentType () | Dapatkan nilai bidang tipe konten |
Cetak semua nilai bidang header permintaan
paket zzz; impor java.io.ioException; impor java.io.printwriter; import java.util.enumeration; import javax.servlet.http.httpservlet; import javax.servlet.htp.httpservletRequest; impor javax.servlet Httpservlet {@Override public void doGet (permintaan httpservletRequest, respons httpservletResponse) melempar ioException {// atur respons response encoding response.setContentType ("text/html; charset = UTF-8"); Printwriter out = response.getWriter (); Enumeration <string> names = request.getHeaderNames (); while (names.hasmoreElements ()) {string name = name.nextElement (); Nilai string = request.getHeader (name); out.println (name + ":" + value + "</br>"); }} @Override public void dopost (permintaan httpservletrequest, respons httpservletResponse) melempar ioException {this.doget (permintaan, respons); }}Metode Terkait untuk Mendapatkan Badan Permintaan
Metode Deskripsi Public ServeTInputStream getInputStream () Mendapat objek servletInputStream yang diminta. Jika konten entitas adalah non-teks, Anda hanya dapat memperoleh Badan Pesan Badan Permintaan melalui metode GetInputStream. BufferedReader getReader () mendapatkan objek BufferedReader yang diminta. Objek ini akan mengonversi data byte konten entitas menjadi string teks yang dikodekan oleh set karakter yang ditentukan.
Dapatkan parameter permintaan
| metode | menjelaskan |
| getParameter string publik (nama string) | Dapatkan nilai parameter yang ditentukan, dan kembalikan null tanpa parameter ini |
| PENCABUAN PUBLIK <String> getParameternames () | Mengembalikan objek enumerasi yang berisi semua nama parameter |
| string publik [] getParameterValues (nama string) | Mungkin ada beberapa parameter yang sama dalam permintaan HTTP untuk mendapatkan semua nilai parameter yang sesuai dengan nama parameter yang sama. |
3. Antarmuka RequestDispatcher
Ketika sumber daya web diminta oleh klien, jika Anda ingin server memberi tahu sumber daya lain seperti memproses permintaan, selain menggunakan fungsi sendReDirect () untuk mengimplementasikan pengalihan, itu juga dapat diimplementasikan melalui objek instance dari antarmuka RequestDispatcher. Metode untuk mendapatkan objek RequestDispatcher didefinisikan dalam antarmuka ServletRequest - getRequestDispatcher (jalur string), yang mengembalikan objek sumber daya dari sumber daya yang ditentukan oleh jalur tertentu. Jalur parameter harus dimulai dengan "/" untuk mewakili direktori root dari aplikasi web saat ini, yaitu, jalur path harus dalam program web ini, jika tidak pengecualian akan terjadi.
Metode dalam Antarmuka RequestDispatcher
| metode | Fungsi |
| Public Void Forward (Permintaan ServletRequest, Respons Respesponse Servlets) | Berikan servlet ke sumber daya web lain dan berikan permintaan ke sumber daya lain untuk tanggapan |
| public void termasuk (permintaan servletRequest, respons servletResponse) | Digunakan untuk memasukkan sumber daya lain sebagai konten respons saat ini |
Di atas adalah penjelasan terperinci dari permintaan web Java dan contoh respons yang diperkenalkan oleh editor. Saya harap ini akan membantu semua orang!