close

Вход

Забыли?

вход по аккаунту

?

Отчет lab6

код для вставкиСкачать
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное автономное образовательное учреждение
высшего профессионального образования
НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ЯДЕРНЫЙ УНИВЕРСИТЕТ «МИФИ»
Димитровградский инженерно-технологический институт – филиал НИЯУ МИФИ
Отчет по лабораторной работе №6
по дисциплине «Технологии программирования в сетях»
Выполнил: студент группы ВТ–51
Улейкин Е.Ю.
Проверил: ст. преподаватель кафедры ИТ
Аленин А. А.
Димитровград, 2012
Задание:
Задание 1. Отредактируйте код главной страницы, так чтобы она отражала тему
данной работы и количество её посещений. Вид страницы приведен на Рис.1. Код cgiскрипта - hitcount.cgi, подсчитывающий число посещений приведен ниже. Разместите
скрипт в нужной директории. Проверьте правильность работы.
<! – main.shtml>
<HTML>
<H4> Last modified: <!--#echo var="LAST_MODIFIED"-->
</H4>
<HR>
<H1><CENTER> CGI labs. Input method POST.</H1>
<H2> Hello, student !
<HR>
<BR>
Basic form using POST method <A HREF="/cgi-bin/lr6/hitcount.cgi"> Hitcount </A>
</CENTER>
</H2>
<HR>
<HTML>
Задание 2. Разобрать, запрограммировать и проверить работу всех скриптов описанных выше.
Booka.cgi
#!/bin/sh
# УГЕОБТЙК booka.cgi
echo "Content-type: text/html"
echo ""
echo "<HTML>"
echo "<BODY>"
# ЧЩЪПЧ booka_result.cgi, ЪБФЕН РПМШЪПЧБФЕМШ ЭЕМЛБЕФ ОБ ЛОПРЛЕ ПФРТБЧЛЙ!
echo "<FORM action="conv.cgi" METHOD=POST>"
echo "<H4> CGI FORM</H4>"
# ФЕЛУФПЧПЕ РПМЕ, ТЕЪХМШФБФЩ ЧЧПДБ РТЙУЧПЕОЩ РЕТЕНЕООПК У ЙНЕОЕН 'contact '
echo "Your Name: <INPUT NAME=contact SIZE=30><BR><BR>"
# ТБУЛТЩФЙЕ ЧЩВТБООПЗП РХОЛФБ НЕОА, РТЙУЧПЕООПЗП РЕТЕНЕООПК 'film'
echo "<SELECT NAME=film>"
echo "<OPTION>-- Pick a Film --"
echo "<OPTION>A Few Good Men"
echo "<OPTION>Die Hard"
echo "<OPTION>Red October"
echo "<OPTION>The Sound Of Music"
echo "<OPTION>Boys In Company C"
echo "<OPTION>Star Wars"
echo "<OPTION>Star Trek"
echo "</SELECT>"
# ТБУЛТЩФЙЕ ЧЩВТБООПЗП РХОЛФБ НЕОА, РТЙУЧПЕООПЗП РЕТЕНЕООПК 'actor'
echo "<SELECT NAME=actor>"
echo "<OPTION>-- Pick Your Favourite Actor --"
echo "<OPTION>Bruce Will is"
echo "<OPTION>Basil Rathbone"
echo "<OPTION>Demi Moore"
echo "<OPTION>Lauren Bacall"
echo "<OPTION>Sean Connery"
echo "</SELECT>"
echo "<BR><BR>"
# ЙНЕОБ РЕТЕНЕООЩИ ЖМБЦЛПЧ 'view_cine' Й 'view_vid'
echo "Do you watch films at the,.<BR>"
echo "<INPUT TYPE="Checkbox" NAME=view_cine> Cinema"
echo "<INPUT TYPE="Checkbox" NAME=view_vid> On Video"
echo "<BR><BR>"
# ТЕЪХМШФБФЩ ЧЧПДБ, РТЙУЧПЕООПЗП РЕТЕНЕООПК 'textarea'
echo "Tell what is your best film, or just enter some comments<BR>"
echo "<TEXTAREA COLS="30" ROWS="4" NAME="textarea"></TEXTAREA>"
echo "<BR><INPUT TYPE=Submit VALUE="Send it">"
echo "<INPUT TYPE="reset" VALUE="Clear Form">"
echo "</FORM>"
echo "</BODY>"
echo "</HTML>"
conv.cgi
#!/bin/sh
# УГЕОБТЙК conv.cgi
# ДЕЛПДЙТПЧБОЙЕ УФТПЛЙ URL
echo "Content-type: text/html"
echo ""
echo "<HTML><PRE>"
if [ "$REQUEST_METHOD" = "POST" ]; then
QUERY_STRING=`cat -`
fi
# ПФПВТБЦЕОЙЕ НЕФПДБ ЛПДЙТПЧБООПК УФТПЛЙ
echo "Method
: $REQUEST_METHOD"
echo "Query String : $QUERY_STRING"
echo "<HR>"
# РТЙНЕОЕОЙЕ ТЕДБЛФПТБ sed ДМС ЪБНЕОЩ УЙНЧПМПЧ & УЙНЧПМБНЙ ФБВХМСГЙЙ
LINE=`echo "$QUERY_STRING" | sed 's/&/
/g'`
for LOOP in $LINE
do
#ТБЪВЙЧЛБ ОБ РПМС NAME Й TYPE
NAME=`echo "$LOOP" | sed 's/=/ /g' | awk '{print $1}'`
# РПМХЮЕОЙЕ TYPE, ЪБНЕОБ ЧУЕИ УЙНЧПМПЧ = РТПВЕМБНЙ, a %hex_num - \xhex_num
# ЪБНЕОБ ЧУЕИ УЙНЧПМПЧ + РТПВЕМБНЙ
TYPE=`echo $LOOP | sed 's/=/ /g' | awk '{print $2}' | sed -e 's/%/\\\x/g' | sed 's/+/
/g'`
# ЙУРПМШЪХЕФУС ЖХОЛГЙС printf, ЛПФПТБС ПФПВТБЦБЕФ ЪОБЮЕОЙС РЕТЕНЕООЩИ
# РПУМЕ ЪБЧЕТЫЕОЙС РТЕПВТБЪПЧБОЙК ЫЕУФОБДГБФЕТЙЮОЩИ ЪОБЮЕОЙК
printf "${NAME}=${TYPE}\n"
# Ч РЕТЕНЕООХА VARS ЪБРЙУЩЧБАФУС ЪОБЮЕОЙС ПФДЕМШОЩИ РПМЕК, ЛПФПТЩЕ
# ЪБФЕН РЕТЕДБАФУС ЛПНБОДЕ eval, ВМБЗПДБТС ЮЕНХ ПФДЕМШОЩЕ РПМС
# НПЦОП БДТЕУПЧБФШ; РТЙ ЬФПН, ЕУМЙ РПМС УПДЕТЦБФ РТПВЕМЩ, ФТЕВХЕФУС
# ХДЧПЕООБС ПВТБФОБС ЛПУБС ЮЕТФБ
VARS=`printf "${NAME}=\\${TYPE}\n"`
eval `printf $VARS`
done
echo "<HR>"
# ЙУРПМШЪХЕФУС printf ДМС ПФПВТБЦЕОЙС УРЕГЙБМШОЩИ УЙНЧПМПЧ Ч УМХЮБЕ ЙИ ОБМЙЮЙС
printf "Your name is
: $contact\n"
printf "Your choice of film is
: $film\n"
printf "Your choice of actor is
: $actor\n"
printf "You watch films at the cinema
: $view_cine\n"
printf "You watch films on video
: $view_vid\n"
printf "And here are your comments
: $textarea\n"
echo "<HR>"
if [ "$contact" != "" ] ; then
printf "Hello $contact, it's great to meet you\n"
else
printf "You did not give me your name ... no comment !\n"
fi
if [ "$film" != "-- Pick a Film --" ]; then
printf "Hey I agree, $film is great film\n"
else
printf "You didn't pick a film\n"
fi
if [ "$actor" != "-- Pick Your Favourite Actor --" ]; then
printf "So you like the actor $actor, good call\n"
else
printf "You didn't pick a actor from the menu\n"
fi
if [ "$view_cine" = "on" ]; then
printf "Yes, I agree the cinema is still the best place to watch a film\n"
else
printf "So you don't go to the cinema, do you know what you're missing\n"
fi
if [ "$view_vid" = "on" ]; then
printf "I like watching videos at home as well\n"
else
printf "No video!!, you're missing out on all the classics to rent or buy\n"
fi
if [ "$textarea" != "" ]; then
printf " And here are your comments... OK $textarea\n"
else
printf "No comments entered, so no comment !\n"
fi
echo "</PRE>"
echo "</HTML>"
Задание 3. Переработать, запрограммировать и проверить работу скрипта conv.cgi,
реализующего описанную выше логику работу.
Указание 1 к заданию 3. Для автоматического перенаправления(редиректа) в исходную форму(скрипт booka.cgi) можно использовать инструкцию <META HTTPEQUIV="Refresh" CONTENT="5; URL=booka.cgi">, включаемую в заголовочный контейнер <HEAD> ...</HEAD>, для генерируемой в скрипте conv.cgi страницы ответа в
случае неполного заполнения формы. Здесь, в поле CONTENT первым параметром
указано время показа страницы до ридеректа(5 сек.), а вторым URL редиректа. Более
подробное описание этой инструкции и других тегов форматирования HTML можно
посмотреть в прилагаемом к лабораторной работе справочном руководстве "HTML в
примерах."(файл tags.chm).
Указание 2 к заданию 3. Для большего удобства следует оформить код генерирующий страницу в виде 3-х bash функций begin_html, head_html, body_html, генерирующих начало HTML страницы (от "Content-type: text/html" до "<HTML>"), HEAD контейнер (от <HEAD> до <HEAD>) и тело страницы вплоть до диагоностического сообщения(типа "You have not answered all questions. Try again !" ) и концевика страницы.
Напомним, что функции в bash описываются в начале скрипта в виде;
Booka2.cgi
#!/bin/sh
# УГЕОБТЙК booka.cgi
echo "Content-type: text/html"
echo ""
echo "<HTML>"
echo "<BODY>"
# ЧЩЪПЧ booka_result.cgi, ЪБФЕН РПМШЪПЧБФЕМШ ЭЕМЛБЕФ ОБ ЛОПРЛЕ ПФРТБЧЛЙ!
echo "<FORM action="conv2.cgi" METHOD=POST>"
echo "<H4> CGI FORM</H4>"
# ФЕЛУФПЧПЕ РПМЕ, ТЕЪХМШФБФЩ ЧЧПДБ РТЙУЧПЕОЩ РЕТЕНЕООПК У ЙНЕОЕН 'contact '
echo "Your Name: <INPUT NAME=contact SIZE=30><BR><BR>"
# ТБУЛТЩФЙЕ ЧЩВТБООПЗП РХОЛФБ НЕОА, РТЙУЧПЕООПЗП РЕТЕНЕООПК 'film'
echo "<SELECT NAME=film>"
echo "<OPTION>-- Pick a Film --"
echo "<OPTION>A Few Good Men"
echo "<OPTION>Die Hard"
echo "<OPTION>Red October"
echo "<OPTION>The Sound Of Music"
echo "<OPTION>Boys In Company C"
echo "<OPTION>Star Wars"
echo "<OPTION>Star Trek"
echo "</SELECT>"
# ТБУЛТЩФЙЕ ЧЩВТБООПЗП РХОЛФБ НЕОА, РТЙУЧПЕООПЗП РЕТЕНЕООПК 'actor'
echo "<SELECT NAME=actor>"
echo "<OPTION>-- Pick Your Favourite Actor --"
echo "<OPTION>Bruce Will is"
echo "<OPTION>Basil Rathbone"
echo "<OPTION>Demi Moore"
echo "<OPTION>Lauren Bacall"
echo "<OPTION>Sean Connery"
echo "</SELECT>"
echo "<BR><BR>"
# ЙНЕОБ РЕТЕНЕООЩИ ЖМБЦЛПЧ 'view_cine' Й 'view_vid'
echo "Do you watch films at the,.<BR>"
echo "<INPUT TYPE="Checkbox" NAME=view_cine> Cinema"
echo "<INPUT TYPE="Checkbox" NAME=view_vid> On Video"
echo "<BR><BR>"
# ТЕЪХМШФБФЩ ЧЧПДБ, РТЙУЧПЕООПЗП РЕТЕНЕООПК 'textarea'
echo "Tell what is your best film, or just enter some comments<BR>"
echo "<TEXTAREA COLS="30" ROWS="4" NAME="textarea"></TEXTAREA>"
echo "<BR><INPUT TYPE=Submit VALUE="Send it">"
echo "<INPUT TYPE="reset" VALUE="Clear Form">"
echo "</FORM>"
echo "</BODY>"
echo "</HTML>"
Conv2.cgi
#!/bin/sh
# УГЕОБТЙК conv.cgi
# ДЕЛПДЙТПЧБОЙЕ УФТПЛЙ URL
begin_html()
{
if [ "$REQUEST_METHOD" = "POST" ]; then
QUERY_STRING=`cat -`
fi
# РТЙНЕОЕОЙЕ ТЕДБЛФПТБ sed ДМС ЪБНЕОЩ УЙНЧПМПЧ & УЙНЧПМБНЙ ФБВХМСГЙЙ
LINE=`echo "$QUERY_STRING" | sed 's/&/ /g'`
STR=""
for LOOP in $LINE
do
#ТБЪВЙЧЛБ ОБ РПМС NAME Й TYPE
NAME=`echo "$LOOP" | sed 's/=/ /g' | awk '{print $1}'`
# РПМХЮЕОЙЕ TYPE, ЪБНЕОБ ЧУЕИ УЙНЧПМПЧ = РТПВЕМБНЙ, a %hex_num - \xhex_num
# ЪБНЕОБ ЧУЕИ УЙНЧПМПЧ + РТПВЕМБНЙ
TYPE=`echo $LOOP | sed 's/=/ /g' | awk '{print $2}' | sed -e 's/%/\\\x/g' | sed
's/+/ /g'`
# ЙУРПМШЪХЕФУС ЖХОЛГЙС printf, ЛПФПТБС ПФПВТБЦБЕФ ЪОБЮЕОЙС РЕТЕНЕООЩИ
# РПУМЕ ЪБЧЕТЫЕОЙС РТЕПВТБЪПЧБОЙК ЫЕУФОБДГБФЕТЙЮОЩИ ЪОБЮЕОЙК
STR=$STR`printf "${NAME}=${TYPE}"`"\n"
# Ч РЕТЕНЕООХА VARS ЪБРЙУЩЧБАФУС ЪОБЮЕОЙС ПФДЕМШОЩИ РПМЕК, ЛПФПТЩЕ
# ЪБФЕН РЕТЕДБАФУС ЛПНБОДЕ eval, ВМБЗПДБТС ЮЕНХ ПФДЕМШОЩЕ РПМС
# НПЦОП БДТЕУПЧБФШ; РТЙ ЬФПН, ЕУМЙ РПМС УПДЕТЦБФ РТПВЕМЩ, ФТЕВХЕФУС
# ХДЧПЕООБС ПВТБФОБС ЛПУБС ЮЕТФБ
VARS=`printf "${NAME}=\\${TYPE}\n"`
eval `printf $VARS`
done
STR2=""
all=1
if [ "$contact" != "" ] ; then
STR2=$STR2`printf "Hello $contact, it's great to meet you"`"\n"
else
all=0
STR2=$STR2`printf "You did not give me your name ... no comment !"`"\n"
fi
if [ "$film" != "-- Pick a Film --" ]; then
STR2=$STR2`printf "Hey I agree, $film is great film"`"\n"
else
all=0
STR2=$STR2`printf "You didn't pick a film"`"\n"
fi
if [ "$actor" != "-- Pick Your Favourite Actor --" ]; then
STR2=$STR2`printf "So you like the actor $actor, good call"`"\n"
else
all=0
STR2=$STR2`printf "You didn't pick a actor from the menu"`"\n"
fi
if [ "$view_cine" = "on" ]; then
STR2=$STR2`printf "Yes, I agree the cinema is still the best place to watch a
film"`"\n"
else
all=0
STR2=$STR2`printf "So you don't go to the cinema, do you know what you're
missing"`"\n"
fi
if [ "$view_vid" = "on" ]; then
STR2=$STR2`printf "I like watching videos at home as well"`"\n"
else
all=0
STR2=$STR2`printf "No video!!, you're missing out on all the classics to rent
or buy"`"\n"
fi
if [ "$textarea" != "" ]; then
STR2=$STR2`printf " And here are your comments... OK $textarea"`"\n"
else
all=0
STR2=$STR2`printf "No comments entered, so no comment !"`"\n"
fi
if [ "$all" != "0" ]; then
STR2=$STR2`printf "We congratulate $contact on successful registration !!!"`"\n"
else
STR2=$STR2`printf "You have not answered all questions. Try again !"`"\n"
fi
echo "Content-type: text/html"
echo ""
echo "<HTML>"
return 0
}
head_html()
{
echo "<HEAD>"
if [ "$all" != "1" ]
then
echo "<META HTTP-EQUIV=\"Refresh\" CONTENT=\"5; URL=booka2.cgi\">"
fi
echo "</HEAD>"
return 0
}
body_html()
{
echo "<PRE>"
# ПФПВТБЦЕОЙЕ НЕФПДБ ЛПДЙТПЧБООПК УФТПЛЙ
echo "Method
: $REQUEST_METHOD"
echo "Query String : $QUERY_STRING"
echo "<HR>"
printf "$STR"
echo "<HR>"
# ЙУРПМШЪХЕФУС printf ДМС ПФПВТБЦЕОЙС УРЕГЙБМШОЩИ УЙНЧПМПЧ Ч УМХЮБЕ ЙИ ОБМЙЮЙС
printf "Your name is
: $contact\n"
printf "Your choice of film is
: $film\n"
printf "Your choice of actor is
: $actor\n"
printf "You watch films at the cinema
: $view_cine\n"
printf "You watch films on video
: $view_vid\n"
printf "And here are your comments
: $textarea\n"
echo "<HR>"
printf "$STR2"
echo "</PRE>"
echo "</HTML>"
return 0
}
begin_html
head_html
body_html
Задание 4. Переработать, запрограммировать и проверить работу скриптов booka.cgi
и conv.cgi, реализующих описанную выше логику работу. Пример правильной работы
при первом обращении и к повторному вводу формы проиллюстрирован на Рис.7-9.
Обратите особое внимание на строку URL (Рис.9), из которой видно, что при повторном обращении скрипту были переданы введенные ранее данные. Они же предустановленны и отображаются в соответствующих полях формы.
Замечание к Заданию 4. Повторный ввод нельзя реализовать для полей формы с
тэгом TEXTAREA.
Не полностью заполненная форма
Сообщение о незаполненных полях
Редирект с заполненной формой
Документ
Категория
Рефераты
Просмотров
14
Размер файла
523 Кб
Теги
lab6, отчет
1/--страниц
Пожаловаться на содержимое документа