In un sito web statico il server contiene file fisici memorizzati in directory e in formati immediatamente riconoscibli dai browser (HTML, gif, jpeg, ecc).
Per ogni possibile schermata del sito esiste esattamente un file, ciascuno con un URL diverso e ognuno viene richiesto singolarmente dal client, il quali li riceve e visualizza. Nessun contenuto visualizzato cambia rispetto al documento memorizzato sul server.
I siti web statici sono molto facili da realizzare ma mandano di automazione e integrazione, dal momento che ogni file è indipendente dagli altri.
Nei siti web dinamici che si basano sul modello a tre livelli:
Il sito è in realtà un’applicazione che contiene alcuni file fisici memorizzati in directory e in formati immediatamente riconoscibli da browser. I file HTML contengono sezioni speciali con codice inserito in linguaggi di programmazione come PHP, ASP ecc. La parte puramente HTML è ripetuta in ogni risposta spedita dal server, mentre le istruzioni embedded generano ogni volta parti HTML diverse.
Una singola pagina HTML contiene più parti di codice embedded: la parte HTML fa da template, mentre il codice fornisce la parte dinamica e i contenuti dell’applicazione. Bisogna fare molta attenzione a mantenere sincronizzati tutti i template, quindi un cambio di look al sito richiede il cambiamento di ogni file HTML.
L’applicazione tramite embedded code permette di realizzare qualunque applicazione lato-server con poco sforzo e in maniera fortemente integrata ai template HTML. Il contro è che si crea un’architettura fragile: cambiamenti al codice posson creare problemi di visualizzazione del template e viceversa cambiamenti al template possono cambiare il comportamento dell’applicazione.
Si attua una forte separazione fra logica dell’applicazione e presentazione. Risiedono su file diversi e vengono modificati in momenti diversi del processo di produzione. In tutti i casi il server esegue il file di programma ed alla fine genera un singolo output dell’intero documento HTML.
I modi più comuni per ottenerlo sono: