Введение
Разработка веб-программ создает большие проблемы для инструментов разработки. Столкнувшись с многочисленными потребностями пользователей, многие компании запустили большое количество платформ разработки: платформы для разработки настольных приложений и программ C/S, платформы для разработки промежуточного программного обеспечения и платформы для разработки веб-сайтов. серверы. В результате программисты сталкиваются с большим количеством инструментов и не имеют возможности начать работу.
DELPHI отличается от других инструментов разработки, поскольку это открытая система. Если вы гибко используете некоторые элементы управления, вы можете разрабатывать различные типы систем, будь то программы N-Tie, многопоточные программы, программы распределенных вычислений (включая DCOM и CORBAR). ), программы TCP, веб-программы, ActiveX, промежуточное программное обеспечение, программы push, и вы даже можете использовать его для написания программ на ассемблере.
DELPHI умело инкапсулирует ISAPI/NSAPI/CGI/WCGI и т. д. в класс. Пользователи могут получать разные системы, если они выбирают результаты компиляции во время компиляции.
В DELPHI4 компания InPRise еще больше усилила поддержку разработки веб-программ и может разрабатывать более совершенные и надежные системы. Ниже приведены несколько распространенных проблем при разработке веб-приложений. Если специального оператора нет, это означает, что программа работает под управлением DELPHI 4.
Как вернуть изображение из приложения веб-сервера?
Приложение веб-сервера может не только генерировать сложные страничные документы, но и возвращать различные изображения в соответствии с запросами пользователя. Конечно, есть более простой метод. В зависимости от входных параметров тег <img src...> также указывает на разные URL-адреса. Здесь мы не используем этот метод, а используем DLL для возврата изображения.
Конечно, сначала необходимо создать контейнер страницы (производитель страниц) со следующим содержимым:
〈html〉
〈body〉Это тест〈BR〉〈img src=″/scripts/mydll.dll/picture″〉〈/body〉
〈/html〉
Далее мы устанавливаем событие действия, соответствующее PathInfo, и возвращаем результат изображения. Исходный код выглядит следующим образом:
(Примечание: модуль JPEG должен быть включен в объявление модуля)
процедура TWebModule1.WebModule1WebActionItem1Action (Отправитель: TObject; Запрос: TWebRequest; Ответ: TWebResponse; var Обработано: Boolean);
вар
Jpg: TJpegImage;
СУБЪЕКТ: TMemoryStream;
начинать
Jpg := TJpegImage.Create;
пытаться
Jpg.LoadFromFile('тест');
S := TMemoryStream.Create;
пытаться
Jpg.SaveToStream(S);
S.Позиция:= 0;
Response.ContentType := 'image/jpeg';
Response.ContentStream := S;
//Необходимо завершить до того, как поток будет выпущен
Ответ.ОтправитьОтвет;
окончательно
С.Бесплатно;
конец;
окончательно
Jpg.Бесплатно;
конец;
конец;
На самом деле этот метод безопаснее и гибче, чем простой метод, упомянутый выше. В некоторых местах его можно использовать гибко, а небольшие модификации на его основе могут давать эффекты, которых трудно достичь с помощью обычных инструментов разработки.
Как использовать собственный драйвер доступа с библиотекой динамической компоновки (DLL) ISAPI/NSAPI?
Это связано с тем, что DAO 3.0 или DAO 3.5 является так называемой потокобезопасной (потокобезопасной программой), а веб-сервер (например, IIS) будет генерировать несколько потоков в соответствии с запросами пользователя, а также указана DLL, соответствующая ISAPI. как нить. В это время ISAPI уведомит DAO через BDE, сообщив, что он не соответствует правилам безопасности потоков.
Существует множество решений. Если вам необходим доступ к библиотеке Access 95/97, вы можете получить к ней доступ через ODBC. ODBC не проходит через DAO и является поточно-ориентированной программой. Кроме того, существуют некоторые сторонние наборы элементов управления, с помощью которых доступ к Access 95/97 можно получить непосредственно из BDE, что более эффективно.
Пользователь обращается к DLL ISAPI на моем веб-сервере, но сообщает: «Неверное имя файла», хотя файл существует. Кстати, моя база данных находится на сервере Novell. Почему это?
Вы не настроили сопоставление путей к дискам (MAPING), соответствующее вашей учетной записи IUSR_XXX. Поскольку Novell не использует FAT, сопоставление путей необходимо добавлять вручную. Конечно, его можно превратить в сценарий загрузочного входа. Имейте в виду, что если вы используете IIS в качестве веб-сервера и используете Novell в качестве файлового сервера или сервера базы данных, вам необходимо определить сопоставление путей.
«Недопустимый параметр конфигурации для псевдонима {alias_name}» (неверная конфигурация псевдонима), такая ошибка возникает, когда я настраиваю ODBC DSN и получаю через него доступ к серверу ISAPI/NSAPI.
Если вы хотите создать псевдоним ODBC для пользователя доступа (пользователя IIS), будьте осторожны и создайте СИСТЕМНЫЙ DSN (системный DNS) вместо создания «пользовательского DNS», хотя «пользовательский DNS» является настройкой по умолчанию.
Как получить имя и IP-адрес клиента (обращающегося к компьютеру)?
Эту функцию очень легко реализовать с помощью TCP-управления. Выберите элемент управления TCP на интернет-странице и получите то, что вам нужно, напрямую:
Memo1.Lines.Add(TCP1.LocalHostName);
Memo1.Lines.Add(TCP1.LocalIp);
Конечно, если вы не хотите этого делать, есть более сложные способы:
использует Winsock;
процедура TForm1.FormCreate(Отправитель: TObject);
вар
wVersionRequested: Слово;
wsaData: TWSAData;
начинать
{Создать WinSock}
wVersionRequested := MAKEWORD(1, 1);
WSAStartup (wVersionRequested, wsaData);
конец;
процедура TForm1.Button1Click(Отправитель: TObject);
вар
р: PHostEnt;
s: массив [0..128] символов;
р2: ПКАР;
начинать
{получить имя компьютера}
GetHostName (@s,128);
p:=GetHostByName(@s);
Memo1.Lines.Add(p^.h_Name);
{Получить IP-адрес машины}
p2 := iNet_ntoa(PInAddr(p^.h_addr_list^)^);
Memo1.Lines.Add(p2);
конец;
процедура TForm1.FormDestroy(Отправитель: TObject);
начинать
{Выпуск WinSock}
ВСАКлеануп;
конец;
Это независимый модуль под названием WINSOCK, который вы можете встроить непосредственно в свою программу.
Почему я не могу создать настоящую многопоточную DLL в DELPHI 3?
Хотя мастер ISAPI DLL в DELPHI3 сгенерировал много кода для создания многопоточных DLL, все же есть серьезный недостаток: в нем не указано, что это приложение является многопоточной программой. Поэтому вам нужно добавить предложение:
IsMultiThread := ИСТИНА;
Поместите это предложение в начало блока начало-конец программы DPR, сделав его первым предложением.
Как узнать, подключен ли я в данный момент к Интернету?
Самый простой способ — использовать компонент TCP, чтобы получить текущий IP-адрес и определить, подключены ли вы к Интернету, оценивая IP-адрес. Например:
если TCP1.LocalIp = '0.0.0.0', то
ShowMessage('В настоящее время нет подключения к Интернету!');
Следует отметить, что, поскольку существенной разницы между Интернетом и Интранетом нет, как правило, невозможно определить, подключен ли он к Интернету или только подключен к Интранету. конечно. Вы также можете добавить компонент PING в PING относительно стабильный и быстрый сайт. Если он подключен, значит, у вас есть доступ к Интернету. Однако этот метод не очень универсален.
Как распечатать веб-страницу?
Вы можете использовать метод AutoPrint элемента управления HTML. Например:
использует принтеры;
процедура TForm1.Button1Click(Отправитель: TObject);
вар
ОлдКур: ТКурсор;
начинать
OldCur := Screen.Cursor;
с принтером сделать
начинать
БегинДок;
HTML1.AutoPrint(дескриптор);
Заголовок := HTML1.URL;
КонечныйДок;
конец;
Screen.Cursor := OldCur;
конец;
Кроме того, вы также можете использовать его метод PrintPage. Однако я рекомендую вам использовать AutoPrint, поскольку этот элемент управления более гибок и может фильтровать некоторый контент, который вы не хотите печатать.
Блог автора: http://blog.csdn.net/zou5655/