Tulis program CGI di Java

Common Gateway Interface (CGI) adalah standard untuk menulis program yang dapat berinteraksi melalui pelayan Web dengan pelanggan yang menjalankan penyemak imbas Web. Program-program ini membolehkan pembangun Web menyampaikan maklumat dinamik (biasanya dalam bentuk HTML) melalui penyemak imbas. Program CGI dapat ditulis dalam bahasa apa pun, termasuk Java, yang dapat dijalankan oleh pelayan Web anda. Program CGI biasanya digunakan untuk menambahkan mesin pencari, aplikasi buku tamu, mesin pertanyaan pangkalan data, forum pengguna interaktif, dan aplikasi interaktif lainnya ke situs Web.

Dalam istilah yang sangat asas, program CGI mesti menafsirkan maklumat yang dihantar kepadanya, memproses maklumat dengan cara tertentu, dan menghasilkan respons yang akan dihantar kembali kepada pelanggan.

Sebilangan besar input untuk program CGI diteruskan ke dalamnya melalui pemboleh ubah persekitaran. Artikel ini akan menunjukkan cara mengirim pemboleh ubah lingkungan ini ke program Java CGI. Selebihnya input (jika ada) diteruskan ke program CGI sebagai input standard yang dapat dibaca langsung oleh program anda.

Pemprosesan dapat sesederhana menambahkan informasi ke file atau rumit seperti meminta data dari pangkalan data.

Oleh kerana program CGI dapat mengembalikan berjuta-juta jenis dokumen, program CGI mesti meletakkan header pendek (teks ASCII) pada outputnya sehingga pelanggan akan tahu bagaimana menafsirkan maklumat yang dihasilkannya. Selalunya, program CGI menghasilkan HTML. Di bawah ini, anda akan menemui pustaka fungsi termasuk fungsi yang menghasilkan tajuk yang sesuai untuk HTML. Mengikuti tajuk, program CGI hanya menghasilkan isi output dalam bentuk asalnya.

Melewatkan persekitaran CGI ke dalam program Java

Menulis program CGI di Java cukup mudah dilakukan setelah anda memahami permasalahannya. Pertama sekali, anda perlu menyelesaikan pelaksanaan program Java di dalam skrip yang lain. Jadi, skrip sebenar yang dipanggil pada pelayan Web anda akan menjadi skrip shell Unix atau fail kumpulan Windows (atau setara) yang hanya meneruskan pemboleh ubah persekitaran CGI ke dalam program Java anda.

Oleh kerana Java tidak lagi menyediakan metode untuk mengakses pemboleh ubah lingkungan secara langsung ( System.getenv()metode tersebut telah dinonaktifkan dalam rilis terbaru JDK), saya mengusulkan untuk memasukkan setiap variabel lingkungan CGI ke dalam program Java menggunakan parameter baris perintah -D pada juru bahasa Java . Saya akan menunjukkan cara menggunakan parameter -D di bawah.

Perpustakaan fungsi yang saya sediakan di bawah mengandaikan bahawa anda telah menggunakan pendekatan yang dijelaskan di atas; ia menggunakan System.getProperty()kaedah untuk mengakses parameter baris perintah tersebut. Sekiranya program anda perlu menggunakan mana-mana pemboleh ubah persekitaran CGI, anda boleh mengaksesnya dengan cara yang sama. Sebagai contoh, jika anda ingin mengakses pemboleh ubah persekitaran SERVER_NAME, anda boleh melakukannya seperti berikut:

 String server_name = System.getProperty ("cgi.server_name"); 

Sedar bahawa saya tidak lulus semua pembolehubah persekitaran CGI ke dalam program Java saya. Saya hanya lulus yang utama. Saya akan meninggalkan penyertaan yang lain sebagai latihan untuk pembaca.

Contoh berikut menunjukkan fail skrip Unix yang dipanggil hello.cgimemanggil program Java yang dipanggil hello. Perhatikan bahawa parameter baris perintah -D meneruskan pemboleh ubah persekitaran CGI ke dalam program Java:

#! / bin / sh java -Dcgi.content_type = $ CONTENT_TYPE -Dcgi.content_length = $ CONTENT_LENGTH -Dcgi.request_method = $ REQUEST_METHOD -Dcgi.query_string = $ QUERY_STRING -Dcgi.server_name_Server_name Dcgi.script_name = $ SCRIPT_NAME -Dcgi.path_info = $ PATH_INFO halo 

Penyelesaian ini tidak berfungsi dengan baik pada platform Windows 95 dan NT kerana mungkin ada had bilangan watak yang dibenarkan pada baris perintah. Pendekatan alternatif mungkin hanya dengan menulis setiap pemboleh ubah persekitaran dan nilai-nilai yang berkaitan dengan fail sementara (tentu saja dengan nama fail yang unik). Kemudian, anda boleh memasukkan nama fail ini ke dalam program Java anda dan membacanya membaca fail tersebut dan menguraikan pemboleh ubah lingkungan / pasangan nilai. Jangan lupa memadamkan fail sementara setelah selesai menggunakannya! Sekali lagi, latihan ini diserahkan kepada pembaca.

Perpustakaan Java CGI

Untuk memudahkan tugas memproses input CGI yang membosankan, saya telah menulis kelas Java (benar-benar perpustakaan fungsi) yang dapat anda gunakan untuk mengurangkan beberapa pekerjaan kotor. Perpustakaan ini cuba menduplikasi fungsi di cgi-lib.plperpustakaan Perl yang sangat popular . Saya telah mendokumentasikan kod di bawah menggunakan komen gaya javadoc supaya anda dapat menghasilkan dokumentasi HTML terus dari kod tersebut. (Gunakan javadoc cgi_lib.javauntuk menjana cgi_lib.html.)

Berikut adalah kod sumber dan dokumentasi untuk perpustakaan.

Menulis program Java CGI pertama anda

Berikut adalah contoh yang menunjukkan bagaimana cgi_lib.javaperpustakaan dapat digunakan untuk menulis program CGI. Kami akan menulis program ringkas yang memproses borang "Hello There" saya Bentuk ringkas ini akan meminta pengguna untuk mendapatkan nama dan alamat e-mel. Berikut adalah bentuk ( hello.html) yang ingin kami proses:

& ltHTML> & ltHEAD> & ltTITLE & gtHalo dan Selamat Datang! & ltBODY> & ltH1 ALIGN = PUSAT & gtHello and Welcome & lthr> & ltFORM METHOD = "POST" ACTION = "/ cgi-bin / hello.cgi"> Siapa nama anda? & ltINPUT JENIS = "teks" NAMA = "nama"> & ltp> Apakah alamat e-mel anda? & ltINPUT SAIZ = 40 JENIS = "teks" NAMA = "e-mel"> & ltINPUT JENIS = "hantar" NILAI = "Kirim">. & ltP> & lthr>

Mari tulis program Java untuk memproses borang "Hello There".

Pertama, kita perlu memberitahu pelanggan bahawa program kita akan menghasilkan HTML. The Header()kaedah dalam cgi_lib.javamewujudkan rentetan yang kita perlukan, jadi kita akan mulakan dengan memanggil kaedah itu dan menghantar rentetan untuk keluar standard menggunakan System.out.printlnsistem panggilan.

// // Cetak tajuk CGI yang diperlukan. // System.out.println (cgi_lib.Header ());

Kedua, kami ingin memproses data borang yang dihantar kepada kami oleh penyemak imbas. The ReadParsekaedah dalam cgi_lib.javamelakukan semua kerja untuk kita dan pulangan hasil dalam suatu unsur yang Hashtable. Dalam kes ini, Hashtable akan mengandungi dua nilai utama setelah menguraikan data borang. Salah satunya adalah medan input "nama" dan yang lain adalah medan input "e-mel". Nilai-nilai yang berkaitan dengan setiap kunci ini adalah apa sahaja yang pengguna taipkan ke medan input tersebut pada borang "Hello There".

// // Uraikan data borang ke dalam Hashtable. // Hashtable form_data = cgi_lib.ReadParse (System.in);

Sekarang setelah kami menguraikan data bentuk, kami dapat melakukan apa sahaja pemprosesan yang kami inginkan dengan data yang dikirimkan kepada kami. Kemudian kita dapat menghasilkan beberapa HTML untuk dihantar kembali ke penyemak imbas pengguna. Dalam program mudah ini, kami tidak akan melakukan pemprosesan dengan data; kita hanya akan mengembalikan maklumat yang diberikan oleh pengguna. Kami akan menggunakan getkaedah pada objek Hashtable untuk mengekstrak nilai bentuk menjadi rentetan yang dapat kami gunakan dalam program kami. Contoh berikut menunjukkan bagaimana kita akan mengekstrak nama yang pengguna taip ke objek String.

 String name = (String) form_data.get ("nama"); 

Sekarang, mari kita satukan semua ini dalam program sederhana. Berikut adalah aplikasi Java yang dapat kita gunakan untuk memproses formulir "Hello There" ( hello.java):

import java.util. *; import java.io. *; halo kelas {public static void main (String args []) {// // Berikut adalah program CGI minimalis yang menggunakan cgi_lib // // // Cetak tajuk CGI yang diperlukan. // System.out.println (cgi_lib.Header ()); // // Uraikan data borang ke dalam Hashtable. // Hashtable form_data = cgi_lib.ReadParse (System.in); // // Buat Bahagian Atas halaman HTML yang dikembalikan // String name = (String) form_data.get ("name"); System.out.println (cgi_lib.HtmlTop ("Hello There" + name + "!")); System.out.println ("& lth1 align = center & gtHello Ada" + nama + "!"); System.out.println ("Berikut adalah pasangan nama / nilai dari borang:"); // // Cetak pasangan nama / nilai yang dihantar dari penyemak imbas. // System.out.println (cgi_lib.Variables (form_data));// // Cetak pemboleh ubah Lingkungan yang dihantar dari skrip Unix. // System.out.println ("Berikut adalah pemboleh ubah persekitaran / pasangan nilai CGI" + "yang diteruskan dari skrip UNIX:"); System.out.println (cgi_lib.Environment ()); // // Buat Bahagian Bawah halaman HTML yang dikembalikan untuk menutupnya dengan bersih. // System.out.println (cgi_lib.HtmlBot ()); }}

Kesimpulannya

Dengan pengenalan ini untuk pengaturcaraan CGI di Java, anda harus menuju ke cara baru untuk memprogramkan bahagian pelayan aplikasi Web anda. Perlu diingat bahawa protokol CGI hanya menyediakan satu cara berkomunikasi antara penyemak imbas pelanggan dan pelayan Web. Jigsaw World Wide Web Consortium (lihat bahagian Sumber di bawah) dan yang lain seperti Sun's Jeeves, hadir dengan penyelesaian yang lebih baik, yang melibatkan menulis servlet Java yang boleh anda lepaskan dari pelayan Web anda. Tetapi itu adalah topik untuk hari yang lain. Berseronok!

Pat Durante adalah jurutera perisian kanan di TASC, Inc. di Reading, MA. TASC adalah sebuah syarikat teknologi maklumat penerapan bernilai 00 juta yang mengkhususkan diri dalam pengembangan dan penyatuan sistem dan perkhidmatan maklumat canggih. Pat telah membuat aplikasi berorientasikan objek selama empat tahun. Dia adalah pemimpin Kumpulan Kepentingan Khas Berorientasi Objek TASC dan pengasas Kumpulan Minat Java TASC. Alamat laman web Pat ialah: //members.aol.com/durante.

Ketahui lebih lanjut mengenai topik ini

  • Maklumat mengenai Common Gateway Interface (CGI) boleh didapati di:

    //hoohoo.ncsa.uiuc.edu/cgi

  • Jigsaw World Wide Web Consortium dijelaskan di:

    //www.w3.org/pub/WWW/Jigsaw

  • Untuk maklumat lanjut mengenai Sun's Jeeves, lihat:

    //www.javasoft.com/products/jeeves/index.html

Kisah ini, "Tulis program CGI di Java" awalnya diterbitkan oleh JavaWorld.