소개
웹 프로그램 개발은 사용자의 수많은 요구에 직면하여 개발 도구에 큰 과제를 안겨줍니다. 많은 회사에서는 데스크톱 응용 프로그램 및 C/S 프로그램 개발용 플랫폼, 미들웨어 개발용 플랫폼, 웹 개발용 플랫폼 등 수많은 개발 플랫폼을 출시했습니다. 서버. 이로 인해 프로그래머는 시작할 방법이 없는 수많은 도구에 직면하게 됩니다.
DELPHI는 개방형 시스템이라는 점에서 다른 개발 도구와 다릅니다. 일부 컨트롤을 유연하게 사용하면 N-Tie 프로그램, 멀티 스레드 프로그램, 분산 컴퓨팅 프로그램(DCOM 및 CORBAR 포함) 등 다양한 유형의 시스템을 개발할 수 있습니다. ), TCP 프로그램, 웹 프로그램, ActiveX, 미들웨어, 푸시 프로그램 등을 사용하여 어셈블리 프로그램을 작성할 수도 있습니다.
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(Sender: TObject;요청: TWebRequest; 응답: TWebResponse; var Handled: Boolean);
var
Jpg: TJpeg이미지;
S: TMemoryStream;
시작하다
Jpg := TJpegImage.Create;
노력하다
Jpg.LoadFromFile('테스트');
S := TMemoryStream.Create;
노력하다
Jpg.SaveToStream(S);
S. 위치 := 0;
Response.ContentType := '이미지/jpeg';
Response.ContentStream := S;
//스트림이 출시되기 전에 완료해야 함
Response.SendResponse;
마지막으로
S.프리;
끝;
마지막으로
Jpg.무료;
끝;
끝;
실제로 이 방법은 위에서 언급한 간단한 방법보다 더 안전하고 유연합니다. 어떤 곳에서는 유연하게 사용할 수 있으며, 이를 기반으로 약간의 수정만 하면 일반 개발 도구로는 달성하기 어려운 효과를 낼 수 있습니다.
ISAPI/NSAPI 동적 링크 라이브러리(DLL)와 함께 기본 액세스 드라이버를 사용하는 방법은 무엇입니까?
이는 DAO 3.0 또는 DAO 3.5가 소위 스레드로부터 안전한(thread-safe) 프로그램이고, 웹 서버(예: IIS)가 사용자 요청에 따라 여러 스레드를 생성하고 ISAPI에 해당하는 DLL을 다음과 같이 나열하기 때문입니다. 스레드. 이때 ISAPI는 BDE를 통해 DAO에 스레드 안전 규정을 준수하지 않음을 알립니다.
Access 95/97 라이브러리에 액세스해야 하는 경우에는 ODBC를 통해 액세스할 수 있습니다. ODBC는 DAO를 거치지 않으며 스레드로부터 안전한 프로그램이기도 합니다. 또한 BDE에서 직접 Access 95/97에 액세스할 수 있는 타사 컨트롤 세트가 있어 더욱 효율적입니다.
사용자가 내 웹 서버의 ISAPI DLL에 액세스했지만 파일이 존재하는데도 "잘못된 파일 이름"이라고 보고했습니다. 그건 그렇고, 내 데이터베이스는 Novell 서버에 있습니다. 왜 이런가요?
IUSR_XXX 계정에 해당하는 드라이브 경로 매핑(MAPING)을 구성하지 않았습니다. Novell은 FAT를 사용하지 않기 때문에 경로 매핑을 수동으로 추가해야 합니다. 물론 부팅 로그인 스크립트로 만들 수도 있습니다. IIS를 웹 서버로 실행하고 파일 서버나 데이터베이스 서버로 Novell과 관련된 경우 경로 매핑을 정의해야 합니다.
"별칭 {alias_name}에 대한 구성 매개 변수가 잘못되었습니다"(잘못된 별칭 구성). ODBC DSN을 설정하고 이를 통해 ISAPI/NSAPI 서버에 액세스할 때 이러한 오류가 발생합니다.
액세스 사용자(IIS 사용자)에 대한 ODBC 별칭을 생성하려면 "사용자 DNS"가 기본 설정이지만 "사용자 DNS"를 생성하는 대신 SYSTEM DSN(시스템 DNS)을 생성하도록 주의하십시오.
클라이언트(액세스하는 기계)의 이름과 IP 주소를 어떻게 얻나요?
TCP 제어를 사용하여 이 기능을 구현하는 것은 매우 쉽습니다. 인터넷 페이지에서 TCP 컨트롤을 선택하고 필요한 것을 직접 얻으십시오.
Memo1.Lines.Add(TCP1.LocalHostName);
Memo1.Lines.Add(TCP1.LocalIp);
물론, 이 작업을 수행하지 않으려면 더 복잡한 방법이 있습니다.
Winsock을 사용합니다.
절차 TForm1.FormCreate(Sender: TObject);
var
wVersionRequested : 단어;
wsaData : TWSA데이터;
시작하다
{WinSock 생성}
wVersionRequested := MAKEWORD(1, 1);
WSAStartup(wVersionRequested, wsaData);
끝;
절차 TForm1.Button1Click(Sender: TObject);
var
p: PHostEnt;
s : char 배열[0..128];
p2: pchar;
시작하다
{컴퓨터 이름 가져오기}
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(Sender: TObject);
시작하다
{WinSock 출시}
WSACleanup;
끝;
이는 WINSOCK이라는 독립적인 장치로, 프로그램에 직접 삽입할 수 있습니다.
DELPHI 3에서 진정한 멀티스레드 DLL을 생성할 수 없는 이유는 무엇입니까?
DELPHI3의 ISAPI DLL 마법사가 다중 스레드 DLL을 생성하기 위한 많은 코드를 생성했지만 여전히 심각한 결함이 있습니다. 즉, 이 애플리케이션이 다중 스레드 프로그램임을 선언하지 않습니다. 따라서 다음 문장을 추가해야 합니다.
IsMultiThread := 참;
이 문장을 DPR 프로그램의 시작-끝 블록 시작 부분에 배치하여 첫 번째 문장으로 만듭니다.
현재 인터넷에 연결되어 있는지 어떻게 알 수 있나요?
가장 간단한 방법은 TCP 구성요소를 사용하여 현재 IP를 얻고, IP를 판단하여 인터넷에 연결되어 있는지 확인하는 것입니다. 예를 들어:
TCP1.LocalIp = '0.0.0.0'인 경우
ShowMessage('현재 인터넷에 연결되어 있지 않습니다!');
인터넷과 인트라넷 사이에는 본질적인 차이가 없기 때문에 일반적으로 인터넷에 연결되어 있는지 아니면 그냥 인트라넷에 연결되어 있는지를 판단하는 것은 불가능하다는 점에 유의해야 합니다. 틀림없이. 비교적 안정적이고 빠른 사이트인 PING에 PING 구성 요소를 추가할 수도 있습니다. 연결되어 있으면 인터넷에 액세스할 수 있다는 의미입니다. 그러나 이 방법은 그다지 다목적이지는 않습니다.
웹페이지를 인쇄하는 방법은 무엇입니까?
HTML 컨트롤의 AutoPrint 메서드를 사용하도록 선택할 수 있습니다. 예를 들어:
프린터를 사용합니다.
절차 TForm1.Button1Click(Sender: TObject);
var
OldCur: TCursor;
시작하다
OldCur := Screen.Cursor;
프린터로
시작하다
시작Doc;
HTML1.AutoPrint(핸들);
제목 := HTML1.URL;
EndDoc;
끝;
Screen.Cursor := OldCur;
끝;
또한 PrintPage 메서드를 사용할 수도 있습니다. 그러나 AutoPrint를 사용하는 것이 좋습니다. 이 컨트롤은 더 유연하고 인쇄하고 싶지 않은 일부 콘텐츠를 필터링할 수 있기 때문입니다.
작성자 블로그: http://blog.csdn.net/zou5655/