<div dir="ltr"><div dir="ltr"><div dir="ltr">I've been tutoring kids on programming and using Free Pascal as their first computer language. I've been creating example programs to demonstrate different things computer can do and how certain technologies.<div><br></div><div>In that endeavor I've written a basic multi threaded web server as a command line application. I wanted to know if other people have done this much and it would be worthwhile for me to write up a small page with some example extensions to the web server. What is your opinion, are of this type of web server implementation and if there would be any value dedicating some time to writing up a page about it with more information.</div><div><br></div><div>The basic web server program which you can extend looks like this (optional clii switches include -port and binding -address):</div><div><br></div><div><div><font face="monospace, monospace">{ A simple web server application }</font></div><div><font face="monospace, monospace">program WebServer;<br></font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">{$mode delphi}</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">uses</font></div><div><font face="monospace, monospace">  WebServer.Tools;</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">{ This is our web handler for the web server }</font></div><div><font face="monospace, monospace">procedure WebHandler(Request: TWebRequest; Response: TWebResponse);<br></font></div><div><font face="monospace, monospace">begin<br></font></div><div><font face="monospace, monospace">  { Try to send the requested resource }</font></div><div><font face="monospace, monospace">  if not Response.SendFile(Request.Path) then</font></div><div><font face="monospace, monospace">  begin</font></div><div><font face="monospace, monospace">    { If it's not found return a 404 page }</font></div><div><font face="monospace, monospace">    Response.Status := 404;</font></div><div><font face="monospace, monospace">      Response.SendFile('/404');</font></div><div><font face="monospace, monospace">  end;</font></div><div><font face="monospace, monospace">  { Optionally print the request }</font></div><div><font face="monospace, monospace">  if OptionVerbose then</font></div><div><font face="monospace, monospace">      Request.Print;</font></div><div><font face="monospace, monospace">end;</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">begin</font></div><div><font face="monospace, monospace">  { Run the web server }</font></div><div><font face="monospace, monospace">  WebServerRun(WebHandler);</font></div><div><font face="monospace, monospace">end.</font></div></div><div><br></div><div>And objects to work upon the customizing your server look like this:</div><div><br></div><div><div><font face="monospace, monospace">{ The TWebRequest class represents an http request }</font></div><div><font face="monospace, monospace">type<br></font></div><div><font face="monospace, monospace">  TWebRequest = class</font></div><div><font face="monospace, monospace">  private</font></div><div><font face="monospace, monospace">    procedure Parse(const Request: string);</font></div><div><font face="monospace, monospace">  public</font></div><div><font face="monospace, monospace">    { The raw request text sent by the client web browser }</font></div><div><font face="monospace, monospace">    Raw: string;</font></div><div><font face="monospace, monospace">    { Method which is usually GET or POST }</font></div><div><font face="monospace, monospace">    Verb: string;</font></div><div><font face="monospace, monospace">    { Path to the resource requested }</font></div><div><font face="monospace, monospace">    Path: string;</font></div><div><font face="monospace, monospace">    { Optional raw query string }</font></div><div><font face="monospace, monospace">    Query: string;</font></div><div><font face="monospace, monospace">    { Header name value pairs parsed into a handy collection }</font></div><div><font face="monospace, monospace">    Headers: TNamedStrings;</font></div><div><font face="monospace, monospace">    { Query or form parameter name value pairs parsed into a handy collection }</font></div><div><font face="monospace, monospace">    Params: TNamedStrings;</font></div><div><font face="monospace, monospace">    { Print out all the information related to the request }</font></div><div><font face="monospace, monospace">    procedure Print;</font></div><div><font face="monospace, monospace">  end;   </font></div></div><div><br></div></div></div></div>