Подальший опис — для перевірки з допомогю сервера, створеного засобами XAMPP на ПК під керуванням ОС Linux Mint таким чином, що початковою текою сайту є /opt/lampp/htdocs. У свою чергу ця тека містить підтеку work, до якої мають повний доступ усі користувачі. Саме таким чином організовано роботу на ПК в ауд. 49 Інституту післядипломної освіти Київського університету імені Бориса Грінченка. І саме таким чином рекомендуємо організувати роботу з XAMPP в інших навчальних закладах. У разі іншої структури теки у тих частинах кодів, що містять /opt/lampp/htdocs, localhost чи work, потрібно внести відповідні зміни.
Веб-застосунки, у тому числі з використанням бібліотеки CGI, є одними з найпоширеніших використань Ruby.
Використання бібліотеки CGI. Cтворити об’єкт CGI й використали його, наприклад, для виведення рядка тексту латиницею у вікні браузера можна таким чином.
#!/usr/bin/ruby require 'cgi' cgi = CGI.new puts cgi.header puts "<html><body>This is a test</body></html>"
Опрацювання форми. Ruby автоматично опрацює методи GET і POST, тобто не передбачено різних дій для цих двох методів. Розглянемо форму на сторінці, яка може надсилати дані на опрацюванням файлом http://localhost/work/test.cgi — у файловій системі ПК /opt/lampp/htdocs/work/test.cgi. Код HTML сторінки може мати такий вигляд.
<html><head><meta http-equiv='Content-Type' content='text/html; charset=UTF-8'></head> <body> <form method = "POST" action = "http://localhost/work/test.cgi"> Ім'я: <input type = "text" name = "FirstName" value = ""><br> Прізвище: <input type = "text" name = "LastName" value = ""> <input type = "submit" value = "Submit Data" /> </form> </body> </html>
Якщо файл test.cgi матиме такий код,
#!/usr/bin/ruby require 'cgi' cgi = CGI.new puts cgi.header puts "<html><head><meta http-equiv='Content-Type' content='text/html; charset=UTF-8'></head><body>" puts cgi['FirstName']+"<br>" # Виведення значення поля FirstName puts cgi[ 'LastName']+"<br>" # Виведення значення поля LastName # Альтернативний спосіб отримання даних h = cgi.params # Cловник (асоціативний масив) з даними форми puts h # Звернути увагу на кирилицю puts "<br>" puts h['FirstName'] # Виведення значення поля FirstName puts "<br>" puts h['LastName'] # Виведення значення поля LastName puts "<br>" puts h.keys # Виведення ключів словника з даними форми puts "<br>" puts h.values # Виведення значень словника з даними форми puts "</body></html>"
то після введення слів "Іван", "Франко" й надсилання даних отримаємо таке виведення.
Іван Франко {"FirstName"=>["\u0406\u0432\u0430\u043D"], "LastName"=>["\u0424\u0440\u0430\u043D\u043A\u043E"]} Іван Франко FirstName LastName Іван Франко
Примітка. Якщо форма містить кілька полів з однаковими назвами, відповідні значення буде повернено у вигляді масиву. Метод доступу [] повертає лише перший елемент з них. Потрібно індексувати результат методу params, щоб отримати усі значення.
Створення коду HTML. CGI містить різноманітні методи для створення коду HTML по одному для кожного тегу. Ці методи потрібно застосовувати до об’єкту CGI у порядку, узгодженому з потрібним порядком вкладення тегів. Відповідний блок коду повертає рядок, який буде використано як вміст для тегу. Наприклад, такий код test.cgi
#!/usr/bin/ruby require "cgi" cgi = CGI.new("html4") cgi.out { cgi.html { cgi.head { "\n"+cgi.title{"Title"} } + cgi.body { "\n"+ cgi.form {"\n"+ cgi.hr + cgi.h1 { "Input Text" } + "\n"+ cgi.textarea("get_text") +"\n"+ cgi.br + cgi.submit } } } }
буде відображено таким чином.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><HTML><HEAD> <TITLE>Title</TITLE></HEAD><BODY> <FORM METHOD="post" ACTION="/work/test.cgi" ENCTYPE="application/x-www-form-urlencoded"> <HR><H1>Input Text</H1> <TEXTAREA NAME="get_text" COLS="70" ROWS="10"></TEXTAREA> <BR><INPUT TYPE="submit"></FORM></BODY></HTML>
Примітка. Метод форми класу CGI може приймати параметр методу, який встановлює метод HTTP (GET, POST тощо), який буде використано під час подання форми. Як усталено у цьому прикладі використано POST.
Цитування рядків. При роботі з URL-адресами та HTML-кодом, потрібно бути обережними, використовуючи певні символи. Наприклад, похила риска / має особливе значення в URL-адресі, тому її потрібно екранувати, якщо вона не є частиною шляху. Наприклад, будь-який символ / у частині запиту URL-адреси буде перетворено на рядок %2F і його потрібно перетворити назад на / для правильного використання. Пробіл і амперсанд також є спеціальними символами. Щоб впоратися з цим, CGI надає підпрограми CGI.escape і CGI.unescape. Наприклад, такий код test.cgi
#!/usr/bin/ruby require "cgi" cgi = CGI.new puts cgi.header puts CGI.escape("Boris / boy & my friend") puts "<br>" puts CGI.escapeHTML('<h1>Boris / boy & my friend</h1>') puts "<br>" puts CGI.unescape('<h1>Boris / boy & my friend</h1>')
буде відображено таким чином.
Текст упорядкував Олександр Рудик.