Mari kita lihat diagram alir:
Proses permintaan pemrosesan server:
(1) Setiap kali server menerima permintaan, itu akan membuka utas baru untuk permintaan tersebut.
(2) Server akan merangkum data permintaan klien ke objek permintaan, dan permintaan adalah operator dari data permintaan!
(3) Server juga akan membuat objek respons, yang terhubung ke klien dan dapat digunakan untuk mengirim respons ke klien.
Seperti yang dapat dilihat dari bagan aliran, dalam permintaan dan respons Javaweb, dua parameter terpenting adalah permintaan dan respons, yang ada dalam metode layanan () dari servlet.
1. Konsep Respons:
Responsnya adalah parameter dari metode servlet. Ketika klien membuat setiap permintaan, server membuat objek respons dan meneruskannya ke metode servlet.service (). Objek respons digunakan untuk merespons klien, yang berarti bahwa menggunakan objek respons dalam metode layanan () dapat menyelesaikan pekerjaan respons kepada klien.
Fungsi objek respons dibagi menjadi empat jenis berikut:
(1) Tetapkan informasi header respons
(2) Kirim kode status
(3) Atur teks respons
(4) Redirect
2. Teks Respons Teks
Responsnya adalah objek respons. Aliran respons dari badan respons (badan respons) dapat digunakan untuk mengeluarkan badan respons ke klien. Repsonse menyediakan total dua objek aliran respons:
(1) printwriter out = response.getWriter (): Dapatkan stream karakter;
(2) ServETOutputStream out = response.getOutputStream (): Dapatkan aliran byte;
Tentu saja, jika konten badan respons adalah karakter, maka gunakan response.getWriter (), dan jika konten responsnya adalah byte, misalnya, saat mengunduh, maka Anda dapat menggunakan response.getoutputStream ().
Perhatikan bahwa dalam satu permintaan, kedua aliran tidak dapat digunakan secara bersamaan! Artinya, apakah Anda menggunakan Reply.getWriter () atau response.getoutputStream (), tetapi Anda tidak dapat menggunakan kedua aliran pada saat yang sama. Kalau tidak, IllegalStateException akan dilemparkan.
3. Tetapkan informasi header respons
Anda dapat menggunakan metode setHeader () dari objek respons untuk mengatur header respons! Set header respons menggunakan metode ini pada akhirnya akan dikirim ke browser klien!
(1) response.setHeader ("tipe konten", "teks/html; charset = utf-8"): Atur header respons tipe konten. Fungsi header ini adalah untuk memberi tahu browser bahwa konten respons adalah tipe HTML dan dikodekan sebagai UTF-8. Dan pada saat yang sama, pengkodean aliran karakter dari respons akan diatur ke UTF-8, yaitu, respons.setcharaceterencoding ("UTF-8");
(2) Response.setHeader ("Refresh", "5; url = http: //www.baidu.com"): Secara otomatis akan melompat ke beranda Baidu setelah 5 detik.
4. Tetapkan kode status dan metode lainnya
(1) response.setContentType ("Teks/html; charset = utf-8"): setara dengan panggilan respons.setHeader ("tipe konten", "teks/html; charset = utf-8");
(2) respons.setcharacterencoding ("UTF-8"): Atur pengkodean karakter dari aliran respons karakter ke UTF-8;
(3) response.setStatus (200): Atur kode status;
(4) respons.
5. Redirect (****** Key *******)
5.1 Apa itu pengalihan (dua permintaan)
Ketika Anda mengunjungi http://www.sun.com, Anda akan menemukan bahwa URL di bilah alamat browser akan menjadi http://www.oracle.com/us/sun/index.htm, yang merupakan pengalihan. Pengalihan adalah ketika server memberi tahu browser untuk mengakses alamat lain, yaitu, untuk mengeluarkan permintaan lain.
5.2 Bagaimana cara menyelesaikan pengalihan?
Jawaban: Kode status untuk pengalihan adalah 302. Kami pertama -tama menggunakan objek respons untuk mengirim kode status 302 ke browser, dan kemudian menetapkan lokasi, yaitu, memberikan URL yang tersedia, dan browser mengakses URL baru untuk mewujudkan pengalihan.
Misalnya:
Kelas Publik Aservlet memperluas httpservlet {public void doGet (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {response.setstatus (302); response.setheader ("Lokasi", "http://www.baidu.com"); }}Tujuan dari kode di atas adalah: Setelah mengakses Aservlet, browser akan diberitahu untuk mengarahkan kembali ke beranda Baidu. Setelah browser klien menguraikan kode respons 302, ia tahu bahwa server memungkinkannya mengarahkan kembali, sehingga akan segera mendapatkan lokasi header respons dan kemudian mengeluarkan permintaan kedua.
Ada juga metode pengalihan cepat, yaitu, menggunakan metode respons.sendredirect (). Misalnya, dua kalimat dalam contoh di atas dapat digantikan oleh response.sendredirect ("http://www.baidu.com").
permintaan-enkapsulasi semua data permintaan dari klien
1. Permintaan Ikhtisar
Permintaan adalah parameter dari metode servlet.service () dan tipe javax.servlet.http.httpservletRequest. Ketika klien membuat setiap permintaan, server akan membuat objek permintaan dan merangkum data permintaan ke dalam permintaan, dan kemudian meneruskannya ke metode layanan () ketika metode servlet.service () dipanggil, yang menunjukkan bahwa data permintaan dapat diperoleh melalui objek permintaan dalam metode layanan ().
Seperti yang ditunjukkan pada gambar:
Fungsi permintaan dapat dibagi menjadi jenis berikut:
(1) merangkum data header permintaan;
(2) merangkum data teks permintaan. Jika itu adalah permintaan GET, maka tidak ada teks;
(3) permintaan adalah objek domain, yang dapat ditambahkan dan diambil sebagai peta;
(4) Permintaan menyediakan fungsi penerusan permintaan dan permintaan inklusi.
2. METODE DOMAIN Minta
Permintaan adalah objek domain! Ada empat objek domain di Javaweb, di antaranya ServletContext adalah objek domain, yang hanya membuat satu objek ServletContext di seluruh aplikasi. Minta salah satu permintaan, yang dapat berbagi data dalam permintaan.
Permintaan membuat objek permintaan. Jika beberapa servlet telah dialami dalam permintaan, beberapa servlet dapat menggunakan permintaan untuk berbagi data. Sekarang kita tidak tahu bagaimana cara melewati beberapa servlet dalam permintaan.
Berikut adalah metode permintaan domain:
(1) void setAttribute (nama string, nilai objek): Digunakan untuk menyimpan objek, itu juga dapat disebut menyimpan atribut domain, misalnya: servletcontext.setAttribute ("xxx", "xxx"), atribut domain disimpan dalam permintaan, nama atribut domain adalah XXX dan nilai domain adalah domain. Perhatikan bahwa jika metode ini disebut beberapa kali dan nama yang sama digunakan, nilai terakhir akan ditimpa, yang sama dengan peta;
(2) objek getAttribute (nama string): Digunakan untuk mendapatkan data dalam permintaan. Itu perlu disimpan sebelum mendapatkannya. Misalnya: string value = (string) request.getAttribute ("xxx"); untuk mendapatkan atribut domain bernama xxx;
(3) void removeAttribute (nama string): Digunakan untuk menghapus atribut domain dalam permintaan. Jika atribut domain yang ditentukan oleh nama parameter tidak ada, maka metode ini tidak melakukan apa -apa;
(4) enumeration getAttributeNames (): Dapatkan nama semua atribut domain;
3. Parameter Lulus berdasarkan permintaan
Ada dua cara paling umum untuk meneruskan parameter pada klien:
(1) input langsung dari bilah alamat browser: itu harus menjadi permintaan GET;
(2) Hyperlink: Itu harus menjadi permintaan GET;
(3) Formulir: Dapat Dapatkan atau Posting, yang tergantung pada nilai atribut metode <sorm>;
Perbedaan antara permintaan mendapatkan dan permintaan pos:
(1) Dapatkan permintaan:
Parameter permintaan akan ditampilkan di bilah alamat browser, jadi tidak aman;
Batas panjang parameter permintaan adalah dalam 1k;
Permintaan GET tidak memiliki badan permintaan, sehingga pengkodean parameter tidak dapat ditetapkan melalui permintaan.setcharacterencoding ();
(2) Permintaan Posting:
Parameter permintaan tidak akan menampilkan bilah alamat browser, yang relatif aman;
Tidak ada batasan panjang parameter yang diminta;
4. Permintaan Penerusan dan Inklusi Permintaan (****** Key *******)
Apakah itu permintaan penerusan atau inklusi permintaan, itu berarti bahwa beberapa servlet bersama -sama menangani permintaan. Misalnya, Servlet1 menangani permintaan, dan kemudian Servlet1 meneruskannya ke Servlet2 untuk terus memproses permintaan.
Permintaan Penerusan dan Permintaan Termasuk
RequestDispatcher rd = request.getRequestDispatcher ("/myServlet"); Gunakan permintaan untuk mendapatkan objek RequestDispatcher. Parameter metode ini adalah jalur servlet dari servlet yang diteruskan atau terkandung.
Penerusan Permintaan: RD.Forward (Permintaan, Tanggapan);
Permintaan termasuk: rd.include (permintaan, respons);
Terkadang permintaan membutuhkan banyak servlet untuk berkolaborasi, jadi Anda harus melompat dalam satu servlet ke yang lain!
> Permintaan mencakup beberapa servlet dan membutuhkan penerusan dan inklusi.
> Permintaan Penerusan: Badan respons diselesaikan oleh servlet berikutnya! Servlet saat ini dapat mengatur header respons! (Biarkan kepala tetapi tidak tubuh) yaitu, kepala yang sesuai yang ditetapkan oleh servlet saat ini valid, dan badan yang sesuai tidak valid.
> Permintaan berisi: Badan respons tidak diselesaikan oleh dua servlet! (Tetap semua) semuanya valid.
> Apakah itu permintaan penerusan atau permintaan yang berisi, itu berada dalam lingkup permintaan! Gunakan permintaan dan tanggapan yang sama!
Penyerahan dan permintaan permintaan termasuk perbandingan:
(1) Jika permintaan diteruskan ke BServlet di AserVlet, maka badan respons tidak diizinkan untuk menjadi output di Aservlet, yaitu, respons.getWriter () dan response.getoutputStream () tidak dapat lagi output ke klien. Pekerjaan ini harus dilakukan oleh BServlet; Jika digunakan untuk memasukkan permintaan, tidak ada batasan seperti itu;
(2) Meskipun penerusan permintaan tidak dapat mengeluarkan badan respons, header respons masih dapat diatur, misalnya: response.setContentType ("Teks/html; charset = UTF-8");
(3) sebagian besar permintaan diterapkan di halaman JSP untuk menyelesaikan penggabungan beberapa halaman;
(4) Penerusan permintaan sebagian besar diterapkan dalam servlets, dan target penerusan sebagian besar adalah halaman JSP;
Seperti yang ditunjukkan pada gambar:
Perbandingan Penerusan Permintaan dan Pengalihan
(1) Penerusan permintaan adalah satu permintaan, sedangkan pengalihan adalah dua permintaan;
(2) Setelah penerusan permintaan, bilah alamat browser tidak akan berubah, tetapi pengalihan akan berubah, karena pengalihan adalah dua permintaan;
(3) target meminta penerusan hanya dapat menjadi sumber daya dalam aplikasi ini, dan target pengalihan dapat menjadi aplikasi lain;
(4) Metode Penerusan Permintaan untuk Aservlet dan BServlet adalah sama, yaitu, keduanya mendapat atau keduanya adalah posting, karena penerusan permintaan adalah permintaan;
(5) Permintaan kedua untuk pengalihan harus didapat;
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.