Mulai dari perkuliahan ini kita akan memasuki proses pembelajaran pemrograman CGI. Melalui perkuliahan sebelumnya, Anda telah menguasai pengetahuan dasar pemrograman CGI. Sekarang Anda dapat duduk dan menulis program CGI Anda!
3. Pemrograman CGI
1. Lampiran sisi server (SSI) dan gateway
2. Gerbang: menghubungkan protokol lain melalui WEB
Dalam proses penulisan program CGI, sebaiknya ikuti poin desain aplikasi berikut:
(1) Ajukan pertanyaan--masalah yang ingin Anda pecahkan
(2) Tahap desain-memahami kerangka dasar dan fungsi program CGI
(3) Tahap pengkodean – mewujudkan ide dengan tindakan
(4) Transplantasi program--menulis kode portabel
(5) Berusaha mencapai keunggulan – membawa program ke tingkat yang lebih tinggi
1. Lampiran sisi server (SSI) dan gateway
Pada bagian ini kami akan memperkenalkan SSI lampiran sisi server (Server Side Include) dan gateway. Sebenarnya, SSI bukan bagian dari pemrograman CGI, namun SSI dapat menyelesaikan beberapa tugas yang dapat diselesaikan oleh program CGI sederhana, dan terkadang SSI bahkan merupakan pilihan terbaik. Oleh karena itu, pengenalan singkat diberikan di sini.
SSI mendefinisikan sekumpulan perintah yang tertanam dalam teks HTML. Sebelum teks HTML dikirim ke klien HTTP, server WEB memproses terlebih dahulu perintah SSI ini dan mengeluarkan teks HTML yang diproses ke browser klien HTTP.
Format perintah SSI adalah:
< !--# perintah parameter="nilai" -->
Perintah SSI berbeda dari Java atau JavaScript karena diproses di sisi server dan bukan di sisi klien. Hal ini mirip dengan program CGI. Tentu saja, dalam lingkup fungsional SSI, kelebihannya sama dengan program CGI, yaitu dapat meningkatkan pemanfaatan sumber daya server, dan browser WEB apa pun di klien dapat menelusuri teks HTML yang berisi SSI.
Berikut ini enam perintah SSI yang umum digunakan:
(1) Sertakan perintah
(2) perintah gema
(3) perintah eksekutif
(4) perintah konfigurasi
(5) perintah ukuran
(6) perintah flashmod
sertakan perintah
Satu-satunya parameter yang didukung adalah file, yang menyisipkan konten file yang ditentukan oleh parameter file ke dalam teks HTML saat ini. Jika Anda mengetahui bahasa C, Anda dapat melihat bahwa fungsinya sama dengan perintah "#include" dalam bahasa C. Misalnya, ada dua teks HTML: main.html dan header.html. Gunakan perintah include di main.html: main.html:
<html>
< tilte> Uji Sertakan Perintah SSI </ /title>
< !--#include file="header.html" -->
<tubuh>
Header di atas berasal dari header.html!
< /tubuh>
< /html>
header.html:
< H1> Ini adalah judul di header.html! < /H1>
(Namun, tampaknya OmniHTTPD tidak mendukung perintah include, :< !)
perintah gema
Satu-satunya parameter yang didukung adalah var, yang digunakan untuk menampilkan variabel yang disediakan server, misalnya:
DOCUMENT_NAME: nama file saat ini
DOCUMENT_URL: Jalur relatif ke teks SSI
DATE_LOCAL: tanggal lokal
DATE_GMT: Tanggal GMT (Waktu Standar Creenwich).
LAST_MODIFIED: Tanggal modifikasi terakhir dari file yang berisi perintah SSI ini
HTTP_USER_AGENT: Nama peramban.
Misalnya: main.shtml <html>
Dokumen ini terakhir diperbarui pada < !--#echo var="LAST_MODIFIED"-->
< /html>
Saat Anda membuka main.shtml dengan browser, Anda dapat melihat waktu modifikasi terakhir. (Perlu dicatat bahwa main.shtml harus disimpan di direktori HtDocs OmniHTTPD dan diakses di browser menggunakan alamat http://localhost/main.shtml.)
perintah eksekutif
Kedua parameter tersebut adalah cgi dan cmd. Yang pertama memanggil file yang dapat dieksekusi, seperti cgi="/cgi-bin/finger.cgi"; yang terakhir memanggil perintah sistem, seperti cmd="ls". Sayangnya, OmniHTTPD tidak mendukung perintah SSI ini (mungkin versi terbaru sekarang mendukungnya).
perintah konfigurasi
Perintah ini mengatur cara server menangani file dan menampilkan tanggal. Ini memiliki dua parameter:
(1) timefmt, menentukan format untuk menampilkan tanggal. Gunakan man strftime di UNIX untuk menanyakan nilai yang tersedia.
(2) sizefmt, menentukan format untuk menampilkan panjang file. Nilainya adalah byte atau addrev. Perintah ini juga tidak didukung di OmniHTTPD.
perintah fsize
Perintah ini menampilkan ukuran file tertentu. Parameternya adalah file, yang menentukan jalur dan nama file dari file tersebut.
perintah flashmod
Perintah ini menampilkan tanggal modifikasi terakhir dari file tertentu. Parameternya adalah file, yang menentukan jalur dan nama file dari file tersebut.
2. Gerbang: menghubungkan protokol lain melalui WEB
Protokol HTTP tidak dapat mengakses semua sumber daya di Internet. Saat Anda ingin mengakses sumber daya selain protokol HTTP (seperti POP3 dan SMTP untuk mengirim dan menerima email), Anda memerlukan gateway. Program CGI adalah cara yang baik untuk mengimplementasikan gateway.
Beberapa gateway yang umum digunakan disediakan di banyak server HTTP UNIX, seperti finger, wais, archie, dll. Namun di OmniHTTPD, gateway ini tidak disediakan. Namun kita dapat menambahkan fungsionalitas gateway ke OmniHTTPD dengan menulis program CGI.
Bentuk dan pengolahannya
Formulir HTML adalah bagian dari dokumen WEB dan digunakan untuk mengirimkan informasi yang diisi oleh pengguna ke server. Biasanya, informasi ini diteruskan ke program CGI, yang melakukan serangkaian operasi atau pemrosesan data berdasarkan informasi masukan, dan kemudian menghasilkan dokumen HTML yang mewakili hasil pemrosesan dan mengirimkannya kembali ke browser klien.
Terlihat bahwa bagian penting dari program CGI adalah memperoleh data masukan dan menghasilkan dokumen HTML, sedangkan bagian pengoperasian dan pemrosesan datanya sama seperti kebanyakan aplikasi. Dalam kuliah ini, saya akan memperkenalkan cara mendapatkan data dan keluaran dokumen HTML di Perl dan Delphi.
Pertama, kita membuat dokumen HTML bernama salam.html:
file salam.html (disimpan di direktori HtDocs OmniHTTPD)
<html>
<kepala>
<title>Ini adalah halaman salam!</title>
< h1> Salam </ /h1>
<tubuh>
<jam>
< formulir aksi="/cgi-bin/greeting.pl" metode=POST>
< p> Nama Depan Anda: < input type=text name="firstname" size=60 maxlength=80> < /p>
< p> Nama Belakang Anda: < input type=text name="lastname" size=60 maxlength=80> < /p>
<jam>
< p> < input type=kirim nilai="Semua OK!"> < input type=reset value="Hapus Semua"> </ /p>
< /bentuk>
< /tubuh>
< /html>
Berikut adalah program Perl CGI, salam.pl:
file salam.pl (disimpan di direktori cgi-bin OmniHTTPD) # Salam Anda!
memerlukan "cgi-lib.pl";
# =====
# dapatkan nilai masukan
&BacaParse(*masukan);
$mNamaDepan = $input{'namadepan'};
$mLastName = $input{'nama belakang'};
# =====
# lakukan beberapa operasi di sini
$mNama Lengkap = "$mNamaDepan $mNamaBelakang";
# =====
# membuat dokumen HTML untuk dikeluarkan
CETAK&CetakHeader;
print "< html>< head>< title> Salam! </ /title>< /head> ";
print "< body> Halo, < i>$mNama Lengkap< /i> ! ";
print "< jam> oleh Salam.pl < /body>< /html>";
# =====
# Semua selesai!
Uji program CGI dengan browsing http://localhost/greeting.html.
Pada program Perl di atas, sebagai program CGI, Anda harus menggunakan require "cgi-lib.pl" untuk mereferensikan file cgi-lib.pl. File ini memiliki banyak fungsi dan prosedur untuk pemrograman CGI. require setara dengan #include di C, namun perlu diperhatikan bahwa harus ada titik koma setelah pernyataan require.
Proses ReadParse membaca data yang dikirimkan oleh formulir HTML, dan parameternya adalah penunjuk array. Perlu dicatat bahwa dalam Perl, pemanggilan fungsi dan prosedur harus diawali dengan simbol &.
mFirstName, mLastName, dan mFullName adalah variabel. Di Perl, nama variabel harus diawali dengan tanda $.
Nilai kembalian sebenarnya dari fungsi PrintHeader adalah "Jenis konten: teks/html", yang memberi tahu browser bahwa data berikut adalah dokumen HTML.
Menghasilkan dokumen HTML sangat sederhana, cukup gunakan pernyataan print untuk menampilkan konten dokumen HTML. Bagaimana? Bisakah Anda menggunakan Perl untuk menulis program CGI?
Selanjutnya, mari kita menulis program Delphi untuk mencapai fungsi yang sama:
Pertama tutup semua proyek di Delphi, pilih menu File/Baru, pilih jenis aplikasi Server Web di kotak dialog, dan gunakan opsi CGI Stand-alone excutable. Proyek baru akan muncul dengan nama jendela utama WebModule1.
Klik dua kali mouse pada properti Actions di WebModule1, dan jendela pengeditan properti Actions akan muncul. Buat Action baru di jendela, bernama WebActionItem1, atur properti Default ke True; dan klik dua kali event OnAction di Events, tambahkan kode berikut:
procedure TWebModule1.WebModule1WebActionItem1Action(Pengirim: TObject;Permintaan: TWebRequest; Respons: TWebResponse; var Ditangani: Boolean);
var
mFirstName, mLastName, mFullName: string;
HtmlDoc: rangkaian;
mulai
// Dapatkan Nilai Masukan:
mFirstName := Permintaan.ContentFields.Values['nama depan'];
mLastName := Permintaan.ContentFields.Values['nama belakang'];
// Lakukan beberapa operasi di sini
mNama Lengkap := mNama Depan + ' ' + mLNama Belakang;
// Buat dokumen HTML untuk dikeluarkan
HtmlDoc := '< html>< head>< title> Salam! </ /title>< /head>';
HtmlDoc := HtmlDoc + '< body> Halo, < i>' + mFullName + '< /i> !';
HtmlDoc := HtmlDoc + '< jam> oleh Salam.cgi < /body>< /html>';
Respon.Konten := HtmlDoc;
akhir;
Simpan unit proyek ini sebagai cgimain.pas dan proyek sebagai salam.dpr. Setelah kompilasi (menggunakan Ctrl+F9), salin salam.exe ke direktori cgi-bin OmniHTTPD dan ganti namanya menjadi salam.cgi. Pada saat yang sama, ubah salam.html yang kami tulis sebelumnya sebagai berikut:
Ubah <form action="/cgi-bin/greeting.pl" method=POST> menjadi
< formulir aksi="/cgi-bin/greeting.cgi" metode=POST>
Dengan cara ini, Anda dapat menguji program CGI yang ditulis dalam Delphi dengan menelusuri http://localhost/greeting.html.
Seperti yang bisa dilihat dari program ini, di Delphi, event OnAction dari WebActionItem terjadi segera setelah program CGI mendapat permintaan. Pada event ini input data dan pembuatan dokumen HTML dilakukan seperti ini:
Dapatkan nilai elemen formulir melalui Request.ContentFields.Values[Nama elemen formulir HTML].
Hasilkan dokumen HTML dengan memberikan nilai ke Response.Content.
Berikut isi ketiga file program Delphi : ------------------------------------ ---- -------------------
salam.dpr :
salam program;
{$Konsol APPTYPE}
kegunaan
Aplikasi HTTP,
Aplikasi CGI,
cgimain di 'cgimain.pas' {WebModule1: TWebModule};
{$E cgi}
{$R *.RES}
mulai
Aplikasi.Inisialisasi;
Aplikasi.CreateForm(TWebModule1, WebModule1);
Aplikasi.Jalankan;
akhir.
--------------------------------------------------- ----------
cgimain.pas:
satuan cgimain;
antarmuka
menggunakan Windows, Pesan, SysUtils, Kelas, HTTPApp;
jenis
TWebModule1 = kelas(TWebModule)
procedure WebModule1WebActionItem1Action(Pengirim: TObject;Permintaan: TWebRequest; Respon: TWebResponse; var Ditangani: Boolean);
pribadi
{Deklarasi pribadi}
publik
{Pernyataan publik}
akhir;
var
WebModule1: TWebModule1;
pelaksanaan
{$R *.DFM}
procedure TWebModule1.WebModule1WebActionItem1Action(Pengirim: TObject; Permintaan: TWebRequest; Respons: TWebResponse; var Ditangani: Boolean);
var
mFirstName, mLastName, mFullName: string;
HtmlDoc: rangkaian;
mulai
// Dapatkan Nilai Masukan:
mFirstName := Permintaan.ContentFields.Values['nama depan'];
mLastName := Permintaan.ContentFields.Values['nama belakang'];
// Lakukan beberapa operasi di sini
mNama Lengkap := mNama Depan + ' ' + mLNama Belakang;
// Buat dokumen HTML untuk dikeluarkan
HtmlDoc := '< html>< head>< title> Salam! </ /title>< /head>';
HtmlDoc := HtmlDoc + '< body> Halo, < i>' + mFullName + '< /i> !';
HtmlDoc := HtmlDoc + '< jam> oleh Salam.cgi < /body>< /html>';
Respon.Konten := HtmlDoc;
akhir;
akhir.
--------------------------------------------------- ----------
cgimain.dfm:
objek WebModule1: TWebModule1
OldCreateOrder = Salah
Tindakan = <
barang
Bawaan=Benar
Nama = 'WebActionItem1'
OnAction = WebModule1WebActionItem1Action
akhir>
Kiri = 192
Atas = 107
Tinggi = 150
Lebar = 215
akhir