курсовые,контрольные,дипломы,рефераты
|
Кафедра математической статистики и эконометрики
Курсовая работа
По курсу:
“Математическая статистика”
“HTML и базы данных ”
Группа: ДИ 302
Студент: Шеломанов Р.Б.
Студент: Мельников А.А
Руководитель: Шевченко К.К.
Москва 1999
Содержание
TOC o "1-3" Введение. PAGEREF _Toc465077308 h 3
Internet – интеграция технологий PAGEREF _Toc465077309 h 3
Цели и задачи проекта PAGEREF _Toc465077310 h 6
Формы в HTML PAGEREF _Toc465077311 h 7
ISAPI приложения PAGEREF _Toc465077312 h 16
Исходный код ISAPI модуля на языке Delphi 4 PAGEREF _Toc465077313 h 17
Библиографический список. PAGEREF _Toc465077314 h 24
Свою работу я решил офрмить в виде проекта. В ней кроме теории присутствует пример програмного проекта, затрудняюсь назвать по другому объединение HTML кода и кода языка программирования . Проекта это создание сервер содержащий базу данных товаров «народного потребления» , который через Internet- броузер получает от удаленного пользователя запросы , обслуживает их и отправляет ответ пользователю в виде HTML страниц.
Сразу оговорюсь, что данная работа расчитана на читателя уже имеющего опыт работы в Интернете, представляющего себе что такое HTML документ , знакомого с самим языком гипертекстовой разметки, а также имеющего навыки программирования в современных объектно – ориентированных средствах разработки приложений . Поэтому описывать все спецификации HTML мне не представляется нужным. Опять же, в этой работе вы не найдете описания HTML, а только той его части, которая посвящена работе с формами и в некоторой степени проектированию таблиц. Что касается программирования , я не буду углубляться в описание программной логики проекта, описывать назначение всех процедур и функций моего модуля, а только остановлюсь на возможностях создания ISAPI/NSAPI приложений, так как основная цель проекта это показать возможности использования HTML для взаимодействия пользователя и удаленной базы данных.
Свой проект я построил следующим образом:
В теоритической части я изложу основы технологий использованных в работе. Это формы HTML, построение ISAPI / NSAPI модулей в среде разработки приложений DELPHI 4.0. А в практической, соответсвенно, исходный код программы и код HTML документов.
В последние пару лет можно было заметить бурный рост количества пользователей глобальной компьютерной сети Интернет в Росии. Значительно увеличилось число интернет провайдеров. Благодаря созданию «домашних» компьютерных сетей в некоторых районах Москвы стало возможным качественное подключение к Интернету за небольшие деньги Все эти меры были призваны удовлетворить все возрастающие потребности общества в информации , и лучшим источником этой информации стала всемирная глобальная компьютерная сеть - Интернет Сейчас я хотел бы сказать пару слов о том что же представляет из себя Интернет .
С технической точки зрения Internet - это объединение транснациональных компьютерных сетей, работающих по различным протоколам, связывающих всевозможные типы компьютеров, физически передающих данные по всем доступным типам линий - от витой пары и телефонных проводов до оптоволокна и спутниковых каналов. Большая часть компьютеров в Internet связано по протоколу TCP/IP. Можно сказать, что Internet- это сеть сетей, опутывающая весь земной шар.
Протокол TCP/IP позволяет передавать информацию, а его используют разнообразные сетевые сервисы, по- разному обращающиеся с этой информацией. Internet не решила проблемы хранения и упорядочения информации, но решила проблему её передачи, дав возможность получать её когда и где угодно. Поскольку Сеть (здесь и далее Сеть- с большой буквы- будет означать Internet) децентрализована, то отключение даже значительной части компьютеров не повлияет на её функциональность. По оценкам аналитиков, в 1995 году число полноценно подключённых к Сети компьютеров составило около 7 миллионов и продолжает стремительно расти. По тем же оценкам, в начале следующего века Сеть может стать столь же доступна, как телефон или телевидение сегодня.
Как уже упоминалось, в Сети существует большое число сервисов. Нас в дальнейшем будет интересовать WWW или просто Web (Word-Wide Web- всемирная паутина). Это самый популярный сервис Сети и удобный способ работы с информацией. Сегодня существует по меньшей мере 30 тыс. серверов WWW. Именно за счет WWW Сеть растёт так стремительно. Пользуясь несложным языком описания, можно составлять гипермедийные документы для их последующей публикации в Сети (под гипермедийным я подразумеваю документ, который может содержать все виды информации - от простого текста до мултимедийных роликов). Чтобы увидеть содержание документа так, как его представляет себе его автор нужно иметь на компьютере- клиенте программу просмотра- браузер. Наиболее популярны сегодня Internet Explorer и Netscape Navigator , поддерживающие многие расширения HTML (Hyper Text Markup Language- язык гипертекстовой разметки документов - именно с его помощью оформляется информация в WWW). Далее под словами браузер или программа просмотра я буду подразумевать именно эти программы.
Как я уже сказал выше Сеть в высшей степени обязана своей популярностью службе WWW. Именно с этой службой у многих ассоциируется понятие Интернет. WWW- это простота доступная даже ребенку, наглядность и широкие возможности предоставления информации, можно даже отметить такой критерий как зрелищность, так как многие WWW документы представляют собой произведение дизайнерского и художественного искусства.
Теперь немного информации о технологии «клиент- сервер». Она известна уже довольно длительное время, но раньше чаще всего использовалась в крупных сетях масштаба предприятия. Сегодня, с развитием Internet, эта технология все чаще привлекает взоры разработчиков программного обеспечения. Её можно представить так:
· клиент формирует и посылает запрос к базе данных сервера, вернее - к программе, обрабатывающей запросы.
· эта программа производит манипуляции с БД, хранящейся на сервере, в соответствии с запросом, формирует результат и передаёт его клиенту.
· Клиент получает результат, отображает его на дисплее и ждет дальнейших действий пользователя. Цикл повторяется, пока пользователь не закончит работу с сервером.
Клиент |
Программа на сервере |
БД |
Запрос к серверу БД |
Ответ сервера |
Манипуляции с БД |
В мире накоплено огромное количество информации по различным вопросам. Чаще всего эта информация хранится в базах данных (БД). Чтобы опубликовать её в Сети приходилось экспортировать БД в HTML- документы, что требовало больших затрат и усложняло поиск информации. Сегодня имеется большой опыт подобных работ. Практически любой пользователь Сети не раз сталкивался с подобными БД. Например, главное в работе популярного поискового сервера Altavista (адрес- http::www.altavista.com)- это запросы к базе данных WWW- сервера по ключевым словам. Ответ сервера- список гипертекстовых ссылок на найденные в Сети страницы, содержащие нужную информацию. Аналогичный пример: когда мы ищем иформацию о ценах на что –либо в Иитернете то мы имеем дело с базой данных, например сервер www.prices.ru Именно сегодня проблема Web- интерфейса к БД как никогда актуальна. И именно эту проблему я хотел бы осветить в своей работе.
Браузер клиента |
Пользователь |
Internet / Intranet или ЛВС |
Web- интерфейс к БД |
Монитор БД (Postmaster) |
БД |
Клиент |
сервер |
Данный эскиз показывает, как работает система в общем. Конкретно всё зависит от того, где находится клиент, сервер, как клиент подсоединён к серверу. Пользователь на клиентском компьютере в программе просмотра заполняет предложенную форму или выбирает дальнейшее действие. Браузер по нажатию одной из кнопок в форме пересылает данные из заполненной формы или отображает вновь полученные в результате какой- либо операции. Не важно, к какой из сетей подключен клиент (он даже может быть удалённым пользователем и соединиться по модему). Программа принимает данные, проверяет их и формирует запрос (запросом называется любое действие которое пользователь предлагает совершить БД) к монитору БД или получает от него результат. Получив запрос, монитор обрабатывает его. Если не произошло ошибок, ждёт запроса от программы на отправку программе результата. На диске сервера хранится БД, модифицируемая по запросу клиента.
1)
Для того, чтобы пользователь мог сформировать и отправить запрос серверу через HTML документ, используются так называемые формы ввода. Это блок документа HTML заключенный в тегах
содержащий различные текстовые поля и кнопки отправления и служащий для формирования и отправки серверу запроса пользователя. Формы имеют следующий синтаксис и каждому текстовому полю обязательно должно быть присвоено имя NAME=..
Вот так форма отображается в браузере.
А вот HTML код этой формы
При нажатии кнопки «Ввод» происходит событие SUBMIT и содержание текстовых полей этой формы отправляется по адресу который указан в ACTION свойстве формы action="/Scripts/test/webshop.dll/addmsg . В данном случае адрес указывает на динамическую библиотеку webshop.dll загруженную на сервере и этой библиотеке передается команда addmsg тоесть получить из текстового поля само сообщение пользователя , адрес его электронной почты и записать эти данные в какой либо файл на сервере. Полный вид запроса посылаемого серверу имеет следующий вид: http://shop.com/Scripts/test/webshop.dll/addmsg?sender=xxx@xxx&message=ccc , где xxx и ссс содержание соответствующих полей текстовой формы. Если отбросить адрес сервера , то запрос имеет вид командной строки DOS webshop.dll/addmsg?sender=xxx@xxx&message=ccc Библиотека webshop.dll –называется ISAPI приложением (ISAPI – Internet Services API). Именно обзору интерфейса ISAPI будет посвящена следующая глава.
Место программирования в публикации данных таково. Приемом и обработкой запросов от клиентов занимается WEB сервер. Большая часть серверов Internet работает под управлением UNIX и популярного на этой платформе сервера Apache, растет популярность платформы Windows NT Server и сервера Microsoft Internet Information Server. Сервер реализует поддержку протокала HTTP, принимая от браузеров клиентов запросы и выдавая им в ответ те или иные WWW страницы. Но всех возможных запросов не предусмотришь поэтому после после получения запроса сервер передает управление WEB –интерфейсу БД (модулю расширения) . Чаще всего эти модули расширения называют сценариями или скриптами (scripts). Задача такого скрипта - обработать запрос , извлечь из базы данных или другого внешнего источника нужную информацию, оформить ее в виде HTML документа и передать ее обратно серверу, который возьмет на себя труд отправить ее браузеру клента.
Первым и общепринятым интерфейсом для создания модулей расширения является CGI (Common Gateway Interface) , распространенный в Unix. Излюбленным языком написания CGI скриптов является PERL , хотя можно писать и на С, Basic и Delphi.
Microsoft снабдила свой сервер Internet протоколом для взаимодействия с модулями расширения ISAPI (ISAPI – Internet Services API), по которому скрипт представляет собой динамическую библиотеку, загружаемую сервером и работающую с ним в одном адресном пространстве. Библиотека должна экспортировать вполне определенные функции (их три: GetExtensionVersion , HttpExtensionProc, TerminateExtension), которые и будут вызываться сервером . Одна библиотика может обрабатывать сколько угодно запросов.
Пример сгенеренной ISAPI модулем HTML страницы, выдающей ответ на зпрос:
unit webshopunit;
interface
uses
Windows, Messages, SysUtils, Classes, HTTPApp, DBWeb, Db, DBTables;
type
TWebModule1 = class(TWebModule)
GroupQuery: TQuery;
WebSession: TSession;
StoreQTP: TQueryTableProducer;
GroupQueryMainGroup: TIntegerField;
GroupQuerySubGroup: TIntegerField;
GroupQueryGroupName: TStringField;
StoreQuery: TQuery;
ValidateQuery: TQuery;
AddMsgQuery: TQuery;
procedure WebModule1GetGroupAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
procedure WebModule1Create(Sender: TObject);
procedure StoreQTPFormatCell(Sender: TObject; CellRow,
CellColumn: Integer; var BgColor: THTMLBgColor;
var Align: THTMLAlign; var VAlign: THTMLVAlign; var CustomAttrs,
CellData: String);
procedure WebModule1Destroy(Sender: TObject);
procedure WebModule1ValidateAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
procedure StoreQTPGetTableCaption(Sender: TObject; var Caption: String;
var Alignment: THTMLCaptionAlignment);
procedure WebModule1AcceptOrderAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
procedure WebModule1SearchAction(Sender: TObject; Request: TWebRequest;
Response: TWebResponse; var Handled: Boolean);
procedure WebModule1AddMSgAction(Sender: TObject; Request: TWebRequest;
Response: TWebResponse; var Handled: Boolean);
private
ScriptName: String;
{ Private declarations }
public
{ Public declarations }
function GroupListProducer(Query: TQuery; Kind: Integer): string;
function CreateGroupList(Gr1,Gr2,Kind:Integer) : string;
end;
var
WebModule1: TWebModule1;
resourcestring
sOrderAccepted = 'Tр° чрърч єёях°эю яЁшэ Є';
sContent = '+уыртыхэшх';
implementation
uses inifiles;
{$R *.DFM}
var HTMLPath, TemplatesPath, DBAliasName,
iniName,CommonLook,CommonEnd : string;
UserStatus : Integer;
csect : TRTLCriticalSection;
procedure TWebModule1.WebModule1Create(Sender: TObject);
var
ini : TINIFile;
FN: array[0..MAX_PATH- 1] of char;
s1,s2: string;
fs : TFileStream;
bgpath, txtcol, lcol,vcol,acol: string;
begin
GetWindowsDirectory(FN, SizeOf(FN));
s1:= StrPas(fn);
GetModuleFileName(hInstance, FN, SizeOf(FN));
s2 := ExtractFileName(StrPas(fn));
if not (Char(s1[Length(s1)]) in ['/','']) then AppendStr(s1,'/');
if Pos('.',s2)<>0 then s2 := Copy(s2,1,Pos('.',s2)-1);
iniName := s1+s2+'.ini';
ini := TINIFile.Create(iniName);
HTMLPath := ini.ReadString('Paths','HTMLPath','/test');
TemplatesPath := ini.ReadString('Paths','TemplatesPath',s1);
DBAliasName := ini.ReadString('Paths','DBAliasName','webtest');
if Assigned(WebSession) and WebSession.IsAlias(DBAliasName) then
begin
GroupQuery.DatabaseName := DBAliasName;
StoreQuery.DatabaseName := DBAliasName;
ValidateQuery.DatabaseName := DBAliasName;
end;
bgpath := ini.ReadString('Design','Background','imgsand.jpg');
txtcol := ini.ReadString('Design','text','black');
lcol := ini.ReadString('Design','link','blue');
acol := ini.ReadString('Design','alink','aqua');
vcol := ini.ReadString('Design','vlink','aqua');
ini.Free;
CommonLook := Format('
',[HTMLPath,bgpath,txtcol,lcol,acol,vcol]);
CommonEnd := '';
end;
procedure TWebModule1.WebModule1Destroy(Sender: TObject);
begin
;
end;
function TWebModule1.GroupListProducer(Query: TQuery; kind: Integer): string;
var s: string;gn1,gn2: Integer;
begin
with Query do
try
Open;
Result := '';
First;
while not Eof do
begin
gn1 := Query.Fields[0].AsInteger;
gn2 := Query.Fields[1].AsInteger;
if Gn2=0 then s:='' else s:=IntToStr(Gn2);
Result := Result + Format('%d.%s
%s
',
[Request.ScriptName, gn1,gn2,Kind, gn1,s,Query.Fields[2].AsString]);
Next;
end;
finally
Close;
end;
end;
function TWebModule1.CreateGroupList(Gr1,Gr2,Kind:Integer) : string;
var fs: TFileStream; i: Integer;
begin
Result := ''+sContent+'
with GroupQuery do
begin
if Gr1=0 then
SQL.Text := 'SELECT * FROM Groups WHERE SubGroup=0'
else
SQL.Text := Format('SELECT * FROM Groups WHERE (MainGroup=%d) and (SubGroup>0)',[Gr1]);
try
Result := Result + GroupListProducer(GroupQuery,Kind);
if Gr1<>0 then
Result := Result + Format('TхЁэєЄ№ё ъ
юуыртыхэш¦
',
[Request.ScriptName, 0,0, Kind]);
except
on E:EDBEngineError do
begin
Result := Result + '+°шсър BDE'+'
';
for i:=0 to E.ErrorCount -1 do
Result := Result + E.Errors[i].Message +
'
';
end;
end;
end;
Result := Result+'
+CommonEnd;
end;
// QueryAction - GetGroup тvтюф ЄрсышЎv яю Єют.уЁєяях
threadvar OperKind : Integer;
procedure TWebModule1.WebModule1GetGroupAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var gn1,gn2 : Integer; OrderCol : THTMLTableColumn;
begin
with Request.QueryFields do
begin
gn1 := IndexOfName('Kind');
if (gn1<>0) then OperKind := StrToIntDef(Values['Kind'],0);
if gn1>=0 then Delete(gn1);
gn1 := StrToIntDef(Values['Gr1'],0);
gn2 := StrToIntDef(Values['Gr2'],0);
end; //with
if gn1=0 then Response.Content := CommonLook+CreateGroupList(gn1,gn2,OperKind)
else if gn2=0 then Response.Content := CommonLook+CreateGroupList(gn1,gn2,OperKind)
else
begin
//define group name
with GroupQuery do
begin
SQL.Text := 'SELECT * FROM Groups WHERE (MainGroup=:gn1) and (SubGroup=:gn2)';
Params[0].AsInteger := gn1;
Params[1].AsInteger := gn2;
Open;
with StoreQTP do
begin
Header.Clear;
Header.Add(CommonLook);
if OperKind>0 then
begin
OrderCol := THTMLTableColumn.Create(StoreQTP.Columns);
OrderCol.Title.Caption := '¦рърч';
end
else
OrderCol := nil;
case OperKind of
1: Header.Add('
');end;
Footer.Add(Format('TхЁэєЄ№ё ъ
юуыртыхэш¦
',
[Request.ScriptName, gn1,0, OperKind]));
end;//with storeqtp
end;//with groupquery
Response.Content := StoreQTP.Content;
if Assigned(OrderCol) then OrderCol.Free;
end; //generating table
end;
procedure TWebModule1.StoreQTPFormatCell(Sender: TObject;
CellRow, CellColumn: Integer; var BgColor: THTMLBgColor;
var Align: THTMLAlign; var VAlign: THTMLVAlign; var CustomAttrs,
CellData: String);
var s: string;
begin
if (CellRow<>0) then if (CellRow mod 2=0) then BgColor:='silver' else BgColor:='Gray';
if (OperKind>0) and (CellColumn=0) and (CellRow>0) then
begin
CellData := ''
+CellData;
end;
if (OperKind>0) and (CellColumn=StoreQTP.Columns.Count-1) and (CellRow>0) then
begin
CellData := '¦рърчрЄ№';
s := '
';
end;
end;
procedure TWebModule1.StoreQTPGetTableCaption(Sender: TObject;
var Caption: String; var Alignment: THTMLCaptionAlignment);
begin
Caption :='=рщфхэю чряшёхщ: '+ IntToStr(StoreQTP.Query.RecordCount);
end;
procedure TWebModule1.WebModule1ValidateAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
with ValidateQuery do
begin
Params[0].AsString := Request.QueryFields.Values['UserName'];
Params[1].AsString := Request.QueryFields.Values['Password'];
try
Open;
if RecordCount>0 then
begin
UserStatus := FieldByName('UserCategory').AsInteger;
Response.Content :=
CommonLook+'
Tv єёях°эю чрЁхушёЄЁшЁютрэv';
if UserStatus>0 then
Response.Content := Response.Content +
'
TvсхЁшЄх ЄютрЁэє¦ уЁєяяє ш ттхфшЄх
чрърч
'+CreateGroupList(0,0,1)
else
begin
Response.Content := Response.Content +
'
T ърўхёЄтх рфьшэшёЄЁрЄюЁр'
+'
TЄЁрэшЎр
рфьшэшёЄЁрЄюЁр';
end;
end
else
Response.Content := CommonLook+'Tр°ш фрээvх юЄёєЄёЄтє¦Є т срчх. +сЁрЄшЄхё№ ъ эрь яю рфЁхёє xxx@yyy.zzz';
finally
Close;
end;
end;
end;
procedure TWebModule1.WebModule1AcceptOrderAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
Response.Content := CommonLook+sOrderAccepted+CommonEnd;
// -ры№°х тёЄрт№Єх ётющ ъюф фы тъы¦ўхэш чрърчр т срчє
end;
procedure TWebModule1.WebModule1SearchAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var s: string;
begin
s:= Request.QueryFields.Values['Phrase'];
GroupQuery.SQL.Text := 'SELECT * FROM Groups WHERE GroupName LIKE "%'+s+'%"';
Response.Content :=
CommonLook+'
¦хчєы№ЄрЄv яюшёър '+s+':
'
+GroupListProducer(GroupQuery,0)+CommonEnd;
end;
procedure TWebModule1.WebModule1AddMSgAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var MCookies : TStringList;i: integer;
begin
Response.Content := CommonLook;
with AddMsgQuery do
try
Params[0].AsString:=Request.QueryFields.Values['Sender'];
Params[1].AsString:=Request.Host;
Params[2].AsDateTime:=Request.Date;
Params[3].AsMemo:=Request.QueryFields.Values['Message'];
Prepare;
ExecSQL;
MCookies := TStringList.Create;
MCookies.Add('User='+Request.PathTranslated);
MCookies.Add('Test='+Request.RemoteHost);
MCookies.Add('Time='+Request.UserAgent);
Response.SetCookieField(MCookies, '', Request.PathInfo , Date+1, False);
MCookies.Free;
Response.Content := Response.Content + 'Tр°х ёююс•хэшх яЁшэ Єю' + CommonEnd;
except
on E:EDBEngineError do
begin
Response.Content := Response.Content +
'+°шсър BDE'+'
';
for i:=0 to E.ErrorCount -1 do
Response.Content := Response.Content +
E.Errors[i].Message + '
';
Response.Content := Response.Content + CommonEnd;
end;
end;
end;
end.
1. Компьютер Пресс N2 1997г.
2. П. Дарахвелидзе, Е. Марков «Программирование в Delphi 4»
3. Компьютер Пресс N4 1997г.
4. Компьютер Пресс N5 1998г.
5. Computer Week Москва N4(210) 1999г.
6. Computer Week Москва N17(223) 1996г.
7. Computer Week Москва N18(224) 1998г.
8. Компьютерра N15(142) 1996.
Кафедра математической статистики и эконометрики Курсовая работа По курсу: “Математическая статистика” “HTML и базы данных ” Группа: ДИ 302 Студент: Шеломанов Р.Б. Студент: Мельников А.А Руководитель: Шевченко К.К.
Графический редактор Paint
Панельное представление многоугольников (Компьютерная Графика OpenGL)
Использование полей и закладок для редактирования и обработки информации в документах Word
Классификация программного обеспечения ЭВМ
Windows98
Характеристика Microsoft Excel
Вирусы и антивирусное программное обеспечение
Основные принципы процесса инсталляции приложений в ОС Windows
Модули и объекты в языке Турбо Паскаль 7.0
Изучение Microsoft Exel (v.7.0)
Copyright (c) 2024 Stud-Baza.ru Рефераты, контрольные, курсовые, дипломные работы.