* * * *

Privacy Policy

Blog italiano

Clicca qui se vuoi andare al blog italiano su Lazarus e il pascal.

Forum ufficiale

Se non siete riusciti a reperire l'informazione che cercavate nei nostri articoli o sul nostro forum vi consiglio di visitare il
Forum ufficiale di Lazarus in lingua inglese.

Lazarus 1.0

Trascinare un file nel programma
DB concetti fondamentali e ZeosLib
Recuperare codice HTML da pagina web
Mandare mail con Lazarus
Stabilire il sistema operativo
Esempio lista in pascal
File INI
Codice di attivazione
Realizzare programmi multilingua
Lavorare con le directory
Utilizzare Unità esterne
TTreeView
TTreeview e Menu
Generare controlli RUN-TIME
LazReport, PDF ed immagini
Intercettare tasti premuti
Ampliare Lazarus
Lazarus e la crittografia
System Tray con Lazarus
UIB: Unified Interbase
Il file: questo sconosciuto
Conferma di chiusura di un applicazione
Liste e puntatori
Overload di funzioni
Funzioni a parametri variabili
Proprietà
Conversione numerica
TImage su Form e Panel
Indy gestiore server FTP lato Client
PopUpMenu sotto Pulsante (TSpeedButton)
Direttiva $macro
Toolbar
Evidenziare voci TreeView
Visualizzare un file Html esterno
StatusBar - aggirare l'errore variabile duplicata
Da DataSource a Excel
Le permutazioni
Brute force
Indy 10 - Invio email con allegati
La gestione degli errori in Lazarus
Pascal Script
Linux + Zeos + Firebird
Dataset virtuale
Overload di operatori
Lavorare con file in formato JSON con Lazarus
Zeos ... dietro le quinte (prima parte)
Disporre le finestre in un blocco unico (come Delphi)
Aspetto retrò (Cmd Line)
Lazarus 1.0
Come interfacciare periferica twain
Ubuntu - aggiornare free pascal e lazarus
fpcup: installazioni parallele di lazarus e fpc
Free Pascal e Lazarus sul Raspberry Pi
Cifratura: breve guida all'uso dell'algoritmo BlowFish con lazarus e free pascal.
Creare un server multithread
guida all'installazione di fpc trunk da subversion in linux gentoo
Indice
DB concetti fondamentali e connessioni standard
Advanced Record Syntax
DB concetti fondamentali e DBGrid
DB concetti fondamentali e TDBEdit, TDBMemo e TDBText
Advanced Record Syntax: un esempio pratico
Superclasse form base per programmi gestionali (e non)
Superclasse form base per programmi gestionali (e non) #2 - log, exception call stack, application toolbox
Superclasse form base per programmi gestionali (e non) #3 - traduzione delle form
Superclasse form base per programmi gestionali (e non) #4 - wait animation
Un dialog per la connessione al database:TfmSimpleDbConnectionDialog
Installare lazarus su mac osx sierra
immagine docker per lavorare con lazarus e free pascal
TDD o Test-Driven Development
Benvenuto! Effettua l'accesso oppure registrati.
Novembre 22, 2024, 08:15:31 pm

Inserisci il nome utente, la password e la durata della sessione.

84 Visitatori, 0 Utenti

Autore Topic: altra versione di web app e problema  (Letto 4296 volte)

xinyiman

  • Administrator
  • Hero Member
  • *****
  • Post: 3273
  • Karma: +12/-0
altra versione di web app e problema
« il: Novembre 15, 2018, 06:41:52 pm »
Ciao ragazzi, procedo con i miei test per verificare quale modo sia migliore per le mie esigenze per ottenere delle web app con il backend scritto in lazarus e il frontend in html

A questo link trovate il test

www.lazaruspascal.it/esempi/test_web_app.zip

Se lo aprite vedrete che è un webserver embedded mantenuto dai sviluppatori di lazarus. Il buon nomore aveva tradotto anche un articolo al riguardo, a questo link: https://bitbucket.org/nomorelogic/traduzioni/src/abf2ed4363b99939b6ded5b954103ec19775f960?at=master

Ora il mio problema era fare in modo che il programma si caricasse tutto il necessario partendo da dei file esterni all'eseguibile. Quindi AdmiLte e bootstrap sono caricati in una sottocartella chiamata HTML, e poi nel programma principale ho creato un modulo chiamato HTML impostato di default. Poi in unit1 nella DataModuleRequest (qui va cambiato il valore della url := '/Users/ngit/Desktop/test_web_app' + url; con il percorso del vostro sistema operativo) troverete il cuore del mio ragionamento. Così mi aspetto che ogni file richiesto dal browser venga inviato correttamente dal server. Ed infatti invia parecchia roba, ma il risultato a browser non è quello che mi aspetto. Ora basta che compilate, e dal browser provate  a richiamare localhost:8063/HTML/index.html

Ovviamente aprendo il programma da console vedrete i risultati dei miei writeln (log di cosa viene mandato) li sopra. Se avete dubbi chiedete pure, io vorrei riuscire a vedere il file index correttamente. Idee?
Ieri è passato, domani è futuro, oggi è un dono...

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2921
  • Karma: +20/-4
Re:altra versione di web app e problema
« Risposta #1 il: Novembre 15, 2018, 08:05:55 pm »
per dovere di cronaca il documento originale è stato aggiornato e ci sono novità anche interessanti
consiglio a tutti la lettura

https://bitbucket.org/leledumbo/books/downloads/


il progetto è interessante, spero di poter dare un'occhiata (sono sempre ottimista io :D )
Imagination is more important than knowledge (A.Einstein)

xinyiman

  • Administrator
  • Hero Member
  • *****
  • Post: 3273
  • Karma: +12/-0
Re:altra versione di web app e problema
« Risposta #2 il: Novembre 16, 2018, 01:44:07 pm »
Ho risolto con questo codice

Codice: [Seleziona]
procedure TTFPWebModule1.DataModuleRequest(Sender: TObject; ARequest: TRequest;
  AResponse: TResponse; Var Handled: Boolean);
var
  url: string;
  fine_nome_file: integer;
  f: TFileStream;
  estensione: string;
  ret: boolean;
begin

     ret:=false;

     url := stringReplace(ARequest.URL, '/', System.DirectorySeparator, [RfReplaceAll]);

     if trim(url)<>'' then
     begin
       url := '/Users/francesco/Documents/sw/cgi2test' + url;
       fine_nome_file:=Pos('?',url);
       if fine_nome_file>0 then
       begin
            url:=Copy(url,1,fine_nome_file-1);
       end;
     end;

     if FileExists(url) then
     begin
         writeln('trovato:' + url);
         f := TFileStream.Create(url,fmOpenRead);
         try
           AResponse.Code:=200;
           AResponse.FreeContentStream := False;

           estensione:=ExtractFileExt(url);

           if uppercase(estensione) = '.CSS' then
              AResponse.ContentType := 'text/css;charset=utf-8'
           else
               AResponse.ContentType := 'text/html;charset=utf-8'; // 'application/octet-stream'; //<--questo commentato serve per mandare file al browser
           AResponse.ContentStream := f;
           AResponse.SendContent;
           ret:=true;
         finally
           f.Free;
         end;
     end else begin
         writeln('non trovato:' + url);
     end;
     ret:=true;
     Handled:=ret;
end;

Praticamente sbagliavo il ContentType che per i file css doveva essere specificato diversamente. Una caxxata insomma. Bhe se apportate le modifiche all'esempio avrete anche voi un mini web server embedded per fare le vostre web application.
Ieri è passato, domani è futuro, oggi è un dono...

 

Recenti

How To

Utenti
  • Utenti in totale: 803
  • Latest: maXim.FI
Stats
  • Post in totale: 19169
  • Topic in totale: 2286
  • Online Today: 99
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 84
Total: 84

Disclaimer:

Questo blog non rappresenta una testata giornalistica poiché viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge n. 62/2001.