Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пример диплома специалиста / 002 Пояснювальна записка.docx
Скачиваний:
15
Добавлен:
28.03.2016
Размер:
323.39 Кб
Скачать

27

02070743.00569-01 81 01

{ |req, resp| . } – процедурному (як і будь-якому іншому) сервлету передається в замикання дві змінні. Змінна req містить інформацію про запит (який браузер запрошує, які змінні передаються і так далі), а за допомогою змінної resp формується відповідь (який тип інформації передається, інформація для відображення і так далі).

. if req.query["text"] – постфіксний запис умовного оператора if. Блок, перед if виконуватиметься лише у тому випадку, коли сервлету передаватиметься змінна text. Метод .query повертає асоціативний масив у вигляді {имя_переменной=>значение}.

File.open('notepad.txt', 'w'){|f| f.write(req.query["text"]) } – відкриваємо файл notepad.txt для запису і пишемо туди значення змінної text (передається сервлету в тілі запиту).

resp['Content-Type']= 'text/html' – встановлюємо типа передаваних нами даних. Зазвичай тип визначається по розширенню файлу, але процедурний сервлет про файл, а тим більше про його розширення, нічого не чув. Ось і доводиться вказувати типу передаваних даних через параметр Content-Type.

resp.body = %& . & – за допомогою методу .body= ми передаємо HTML-код як відповідь на запит. Сам HTML-код передається у вигляді рядка, поміщеному в %& . &. Це альтернативний спосіб завдання рядка. Після символу % йде символ, який буде таким, що замикає (у нашому випадку & ). Такий спосіб завдання рядка використовується у випадках, коли рядок містить багато лапок і апострофів (аби не займатися їх екрануванням).

server.start – за допомогою методу .start ми запускаємо Web-сервер.

Для того, щоб припинити роботу Web-сервера, треба його просто вивантажити. Це робиться за допомогою комбінації клавіш Ctrl+Break або Ctrl+C.

28

02070743.00569-01 81 01

Вийшов трохи громіздкий опис, але це лише спочатку. Далі ми розглядатимемо лише зміни, а їх буде істотно менше.

Тепер приступимо до ERB. Це шаблонна бібліотека, яка дозволяє здійснювати вставку в довільний текст будь-якої Ruby-коду. Для цього є два основних тега:

  • <% . %> – Код усередині тега виконується. Під час обробки він замінюється на порожній рядок.

  • <%= . %> – Код усередині тега виконується. Результат останнього обчислення перетвориться в рядок і вставляється замість тега.

Обробка коду всередині тегів ERB йде лише під час обробки шаблону (виклику методу .result).

ERB для прихильників РНР – це «PHP, лише на Ruby». Ця фраза володіє настільки магічною властивістю, що після неї співбесідникові все стає зрозумілим. Давайте поглянемо, як може виглядати наша програма в якій використовується ERB-шаблон:

require 'webrick'

require 'erb'

server = WEBrick::HTTPServer.new(:Port=>8080)

server.mount_proc('/'){ |req, resp|

File.open('notepad.txt', 'w'){ |f| f.write req.query["text"] } if req.query["text"]

resp['Content-Type']= 'text/html'

template = %& <html><body><center><form method="post">

<textarea name="text" rows="4"cols="40"><%=IO.read('notepad.txt')%></textarea><br/>

<input type="submit" name="update" value="Сохранить"/>

</form></center></body></html>&

resp.body = ERB.new(template).result

29

02070743.00569-01 81 01

}

server.start

Що змінилося? Змін небагато, але вони все ж є:

require 'erb' – підключаємо бібліотеку ERB.

template = %& . <%=IO.read('notepad.txt')%> . & – створюємо змінну template і привласнюємо їй рядок, який за сумісництвом є ERB-шаблоном. Усередині рядка можна відмітити тег <%= . %>, усередині якого здійснюється зчитування файлу notepad.txt. Результат зчитування буде вставлений замість тега <%= . %> під час обробки ERB-шаблона.

resp.body = ERB.new(template).result – створюємо об'єкт ERB і передаємо туди підготовлений ERB-шаблон. Обробляємо його методом .result і результуючий рядок передаємо методу .body =, який підставляє її як відповідь на запит.

І що ми отримуємо в результаті? Підключили «зайву» бібліотеку і створили «зайву» змінну? Не квапитимемося з виводами. Використання бібліотеки ERB дозволяє винести шаблон в зовнішній файл. Тим самим ми очищаємо Ruby-код від HTML-коду.

ERB-шаблон істотно псує красу нашої Ruby-коду. Тому, рішення винести шаблон в зовнішній файл сповна виправдане. Тим паче, що це дозволить нам правити ERB-шаблон окремо від програми. Більш того, внесені до шаблону зміни набиратимуть чинності без перезавантаження сервера.

Файл з ERB-шаблоном (index.html) виглядатиме таким чином:

<html>

<body>

<center>

<form method="post">