Tulis program CGI di Java

Common Gateway Interface (CGI) adalah standar untuk menulis program yang dapat berinteraksi melalui server Web dengan klien yang menjalankan browser Web. Program-program ini memungkinkan pengembang Web untuk menyampaikan informasi dinamis (biasanya dalam bentuk HTML) melalui browser. Program CGI dapat ditulis dalam bahasa apapun, termasuk Java, yang dapat dijalankan oleh server Web Anda. Program CGI biasanya digunakan untuk menambahkan mesin pencari, aplikasi buku tamu, mesin kueri database, forum pengguna interaktif, dan aplikasi interaktif lainnya ke situs Web.

Dalam istilah yang paling dasar, program CGI harus menafsirkan informasi yang dikirim kepadanya, memproses informasi dengan cara tertentu, dan menghasilkan tanggapan yang akan dikirim kembali ke klien.

Sebagian besar masukan ke program CGI diteruskan ke dalamnya melalui variabel lingkungan. Artikel ini akan mendemonstrasikan cara mengirim variabel lingkungan ini ke program Java CGI. Sisa masukan (jika ada) diteruskan ke program CGI sebagai masukan standar yang dapat dibaca langsung oleh program Anda.

Pemrosesannya bisa sesederhana menambahkan informasi ke file atau serumit meminta data dari database.

Karena program CGI dapat mengembalikan berbagai jenis dokumen, program CGI harus menempatkan header pendek (teks ASCII) pada keluarannya sehingga klien akan tahu bagaimana menafsirkan informasi yang dihasilkannya. Paling umum, program CGI menghasilkan HTML. Di bawah ini, Anda akan menemukan pustaka fungsi termasuk salah satu yang menghasilkan tajuk yang sesuai untuk HTML. Mengikuti tajuk, program CGI hanya menghasilkan tubuh keluaran dalam bentuk aslinya.

Meneruskan lingkungan CGI ke dalam program Java

Menulis program CGI di Java cukup mudah dilakukan setelah Anda memahami masalahnya. Pertama dan terpenting, Anda perlu membungkus eksekusi program Java di dalam skrip lain. Jadi, skrip sebenarnya yang dipanggil di server Web Anda akan menjadi skrip shell Unix atau file batch Windows (atau yang setara) yang hanya meneruskan variabel lingkungan CGI ke program Java Anda.

Karena Java tidak lagi menyediakan metode untuk mengakses variabel lingkungan secara langsung ( System.getenv()metode telah dinonaktifkan dalam rilis terbaru JDK), saya mengusulkan untuk meneruskan setiap variabel lingkungan CGI ke dalam program Java menggunakan parameter baris perintah -D pada penerjemah Java . Saya akan menunjukkan kepada Anda bagaimana menggunakan parameter -D di bawah ini.

Pustaka fungsi yang saya sediakan di bawah mengasumsikan bahwa Anda telah menggunakan pendekatan yang dijelaskan di atas; itu menggunakan System.getProperty()metode untuk mengakses parameter baris perintah tersebut. Jika program Anda perlu menggunakan salah satu variabel lingkungan CGI, Anda dapat mengaksesnya dengan cara yang sama. Misalnya, jika Anda ingin mengakses variabel lingkungan SERVER_NAME, Anda dapat melakukannya sebagai berikut:

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

Ketahuilah bahwa saya tidak meneruskan semua variabel lingkungan CGI ke program Java saya. Saya hanya melewati yang utama. Saya akan meninggalkan penyertaan yang lain sebagai latihan untuk pembaca.

Contoh berikut menunjukkan file skrip Unix yang disebut hello.cgimenjalankan program Java bernama hello. Perhatikan bahwa parameter baris perintah -D meneruskan variabel lingkungan 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.server_name = $ SERVER_NAME -Dcgi. Dcgi.script_name = $ SCRIPT_NAME -Dcgi.path_info = $ PATH_INFO halo 

Solusi ini tidak berfungsi dengan baik pada platform Windows 95 dan NT karena mungkin ada batasan jumlah karakter yang diperbolehkan pada baris perintah. Pendekatan alternatif mungkin hanya dengan menulis setiap variabel lingkungan dan nilai terkait ke file sementara (dengan nama file yang unik, tentu saja). Kemudian, Anda dapat meneruskan nama file ini ke dalam program Java Anda dan membuatnya membaca file itu dan mengurai pasangan variabel / nilai lingkungan. Jangan lupa untuk menghapus file sementara setelah Anda selesai menggunakannya! Sekali lagi, latihan ini diserahkan kepada pembaca.

Perpustakaan Java CGI

Untuk meringankan tugas membosankan memproses input CGI, saya telah menulis kelas Java (benar-benar perpustakaan fungsi) yang dapat Anda gunakan untuk mengurangi beberapa pekerjaan kotor. Pustaka ini mencoba menduplikasi fungsionalitas di cgi-lib.plpustaka Perl yang sangat populer . Saya telah mendokumentasikan kode di bawah ini menggunakan komentar bergaya javadoc sehingga Anda dapat menghasilkan dokumentasi HTML langsung dari kode tersebut. (Gunakan javadoc cgi_lib.javauntuk menghasilkan cgi_lib.html.)

Berikut adalah kode sumber dan dokumentasi untuk perpustakaan tersebut.

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 sederhana yang memproses formulir "Halo yang Ada". Formulir sederhana ini akan meminta nama dan alamat email pengguna. Berikut formulir ( hello.html) yang ingin kami proses:

& ltHTML> & ltHEAD> & ltTITLE & gtHalo dan Selamat Datang! & ltBODY> & ltH1 ALIGN = CENTER & gtHalo dan Selamat Datang & lthr> & ltFORM METHOD = "POST" ACTION = "/ cgi-bin / hello.cgi"> Siapa nama Anda? & ltINPUT TYPE = "text" NAME = "name"> & ltp> Apa alamat email Anda? & ltINPUT SIZE = 40 TYPE = "text" NAME = "email"> & ltINPUT TYPE = "submit" VALUE = "Submit">. & ltP> & lthr>

Mari kita tulis program Java untuk memproses formulir "Hello There".

Pertama, kita perlu memberi tahu klien bahwa program kita akan menghasilkan HTML. The Header()metode dalam cgi_lib.javamenciptakan string yang kita butuhkan, jadi kita akan mulai dengan memanggil metode itu dan mengirimkan string untuk keluar standar menggunakan System.out.printlnsystem call.

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

Kedua, kami ingin memproses data formulir yang dikirimkan kepada kami oleh browser. The ReadParsemetode dalam cgi_lib.javamelakukan semua pekerjaan itu bagi kita dan kembali hasilnya dalam sebuah instance dari sebuah Hashtable. Dalam hal ini, Hashtable akan berisi dua nilai kunci setelah mengurai data formulir. Satu akan menjadi bidang masukan "nama" dan yang lainnya akan menjadi bidang masukan "email". Nilai yang terkait dengan masing-masing kunci ini adalah apa pun yang diketik pengguna ke bidang masukan tersebut pada formulir "Halo yang Ada".

// // Parsing data formulir menjadi Hashtable. // Hashtable form_data = cgi_lib.ReadParse (System.in);

Sekarang setelah kami mengurai data formulir, kami dapat melakukan pemrosesan apa pun yang kami inginkan dengan data yang dikirimkan kepada kami. Kemudian kita dapat membuat beberapa HTML untuk dikirim kembali ke browser pengguna. Dalam program sederhana ini, kami tidak akan melakukan pemrosesan apa pun dengan data; kami hanya akan menggemakan kembali informasi yang diberikan oleh pengguna. Kami akan menggunakan getmetode pada objek Hashtable untuk mengekstrak nilai formulir menjadi string yang dapat kami gunakan dalam program kami. Contoh berikut menunjukkan bagaimana kita mengekstrak nama yang diketik pengguna ke dalam objek String.

 Nama string = (String) form_data.get ("nama"); 

Sekarang, mari kita gabungkan semuanya dalam sebuah program sederhana. Berikut adalah aplikasi Java yang bisa kita gunakan untuk memproses form "Hello There" ( hello.java):

import java.util. *; impor java.io. *; class hello {public static void main (String args []) {// // Berikut adalah program CGI minimalis yang menggunakan cgi_lib // // // Cetak header CGI yang diperlukan. // System.out.println (cgi_lib.Header ()); // // Parsing data formulir menjadi Hashtable. // Hashtable form_data = cgi_lib.ReadParse (System.in); // // Buat Bagian Atas dari halaman HTML yang dikembalikan // String name = (String) form_data.get ("name"); System.out.println (cgi_lib.HtmlTop ("Halo yang Ada" + nama + "!")); System.out.println ("& lth1 align = center & gtHalo Ada" + nama + "!"); System.out.println ("Berikut adalah pasangan nama / nilai dari formulir:"); // // Cetak pasangan nama / nilai yang dikirim dari browser. // System.out.println (cgi_lib.Variables (form_data));// // Cetak variabel Lingkungan yang dikirim dari skrip Unix. // System.out.println ("Berikut adalah variabel lingkungan / pasangan nilai CGI" + "yang diteruskan dari skrip UNIX:"); System.out.println (cgi_lib.Environment ()); // // Buat bagian bawah halaman HTML yang dikembalikan untuk menutupnya dengan bersih. // System.out.println (cgi_lib.HtmlBot ()); }}

Kesimpulan

Dengan pengenalan pemrograman CGI di Java ini, Anda harus berada di jalur yang benar-benar baru dalam memprogram sisi server aplikasi Web Anda. Perlu diingat bahwa protokol CGI hanya menyediakan satu cara untuk berkomunikasi antara browser klien dan server Web. Jigsaw Konsorsium World Wide Web (lihat bagian Sumberdaya di bawah) dan lainnya seperti Sun's Jeeves, datang dengan solusi yang lebih baik, yang melibatkan penulisan servlet Java yang dapat Anda gantung dari server Web Anda. Tapi itu topik untuk hari lain. Selamat bersenang-senang!

Pat Durante adalah insinyur perangkat lunak senior di TASC, Inc. di Reading, MA. TASC adalah perusahaan teknologi informasi terapan senilai 00 juta yang berspesialisasi dalam pengembangan dan integrasi sistem dan layanan informasi canggih. Pat telah merekayasa aplikasi berorientasi objek selama empat tahun. Dia adalah pemimpin TASC's Object Oriented Special Interest Group dan salah satu pendiri TASC's Java Interest Group. Alamat situs web Pat adalah: //members.aol.com/durante.

Pelajari lebih lanjut tentang topik ini

  • Informasi tentang Common Gateway Interface (CGI) dapat ditemukan di:

    //hoohoo.ncsa.uiuc.edu/cgi

  • Jigsaw Konsorsium World Wide Web dijelaskan di:

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

  • Untuk lebih lanjut tentang Sun's Jeeves, lihat:

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

Cerita ini, "Menulis program CGI di Java" pada awalnya diterbitkan oleh JavaWorld.