Logo LineeguidaLinee guida per siti ed applicazioni web della Regione Emilia-Romagna

linee guida per siti ed applicazioni web Logo - Regione Emilia-Romagna
Linee Guida» Per Tecnici»

Pagine ASP

In generale qualsiasi attività di sviluppo di pagine dinamiche va coordinata con il Servizio Sistema Informativo-Informatico Regionale. Soprattutto nel caso tali pagine facciano utilizzo del database SQL Server in quanto occorre sottostare a certi standard architetturali.

Linee guida generali

Seguono le indicazioni su come produrre pagine ASP. Si assume la conoscenza della tecnologia ASP. Si intende che il linguaggio utilizzato lato server sia VBScript.

Option Explicit

è buona prassi di programmazione dichiarare tutte le variabili che si usano. Option Explicit è utile in quanto segnala l´utilizzo di identificatori non dichiarati.
N.B. Option Explicit deve essere la prima linea (dopo la dichiarazione del linguaggio [<%@LANGUAGE=VBSCRIPT%>], che però si può omettere in quanto è di default) del sorgente della pagina.

Gli oggetti Session e Application

Non assegnare riferimenti ad oggetti COM negli oggetti Session o Application. Ciò accade specialmente per memorizzare oggetti "ADODB.Connection" o "ADODB.Recordset", ma è sconsigliato in quanto risulta pesante per il server e difficilmente scalabile.

Deallocare esplicitamente tutti gli oggetti

Sebbene gli oggetti debbano essere deallocati automaticamente dal motore di scripting, è prassi comune deallocarli esplicitamente per moderare i problemi di mancato rilascio della memoria da parte di Internet Information Server. Ciò significa in pratica includere la riga Set mio_oggetto = Nothing.
Inoltre nel caso di connessioni al DB, prima si chiudono e prima ritornano disponibili nel pool delle connessioni per altri utenti. Ciò è un punto fondamentale della scalabilità delle applicazioni Microsoft.

Riutilizzare il codice

Tipicamente le pagine di qualsiasi sito hanno delle parti in comune, sia visive (header, footer, …) che strutturali (link a fogli di stile, meta tags per il refresh, …). è quindi consigliabile, per una maggiore leggibilità e manutenibilità creare delle funzioni che generano queste parti di HTML e posizionarle in un file che viene poi incluso dalle altre pagine. è il classico vecchio concetto della libreria di funzioni. Si ricorda che per includere un file la direttiva ASP è "#include", per esempio:    <!-- #include file="../includes/common.asp" --> . la sintassi completa è descritta su: http://msdn2.microsoft.com/en-us/library/ms524876.aspx)
N.B. A differenza di quanto indicato da Microsoft evitare di dare estensione ".inc" ai file da includere altrimenti il sorgente risulta visibile a chiunque su internet. Usare invece l´estensione ".asp".

Accesso ai dati

Controllare sempre eventuali errori

In ERMES è presente un file disponibile per tutti e che si può includere tramite la direttiva <!--#include virtual="/includes/global.asp"--> in cui è definita una funzione di nome VisualizzaErrore() che accetta come parametro un oggetto di tipo ADODB.Connection. Essa, nel caso si sia verificato un errore, mostra un messaggio standard e termina l´elaborazione. Naturalmente affinché possa essere utilizzata occorre avere dato la direttiva On Error Resume Next. Dopo qualsiasi operazione che può fallire richiamare VisualizzaErrore() passandogli come parametro l´oggetto ADODB.Connection.

Includere le costanti di ADO

Oltre al file di cui sopra nella cartella includes si trova anche il file adovbs.inc contenente tutte le costanti di ADO. Alternativamente, se il sito è definito come applicazione ASP è possibile aggiungere le seguenti linee in testa al file global.asa


<!--==Visual InterDev Generated - startspan==-->
<!--METADATA
TYPE="TypeLib"
NAME="Microsoft ActiveX Data Objects 2.1 Library"
UUID="{00000201-0000-0010-8000-00AA006D2EA4}"
VERSION="2.1"
-->
<!--==Visual InterDev Generated - endspan==-->

Ciò fa si che si importi tutta la type librery di ADO. Così facendo oltre alle costanti di ADO funzionerà la tecnologia IntelliSense che suggerisce e completa in comandi nell´editor di Visual InterDev.

Usare connessioni DSN-less

Sebbene leggermente meno performanti al momento dell´apertura, le connessioni DSN-less risultano più comode in caso di spostamento delle pagine in un altra cartella o in un altro sito.
Per chi non lo sapesse, una connessione è DSN-less quando la stringa di connessione non fa rifemento a Data Source Names (DSN) definiti a priori sul server (tramite l´applet ODBC del pannello di controllo).
Riportiamo di seguito due esempi di tali stringhe una per connettersi ad un DB SQL Server e l´altra che connettersi a un DB Access.

SQL Server:


"Provider=SQLOLEDB.1;
Data Source=(local);
Initial Catalog=nome_database;
User ID=gino;
Password=supergino;
App=Nome applicazione;
Persist Security Info=True
"

Access

I database in formato Access dovranno essere usati solo per applicazioni di sola lettura, ovverosia applicazioni che in nessun caso devono eseguire operazioni di INSERT, UPDATE o DELETE sulle tabelle.


"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" &
Server.MapPath("nome_database.mdb") & "; Persist Security Info=False"

Nel caso di Access si noti l´utilizzo della funzione Server.MapPath() per svincolarsi dalla posizione assoluta del db nel file system.

N.B. la creazione della connessione verso in DB è sicuramente un funzionalità candidata a essere inserita tra quelle funzioni da riutilizzare su tutto il progetto. Si vedano il punto precedente "Riutilizzo del codice" e l´esempio seguente:


<!--#include virtual="/includes/global.asp"-->
<%
Function Connessione
Dim cn
On Error Resume Next
Set cn = Server.CreateObject("ADODB.Connection")
cn.Open "<mettere qui la stringa di _
connessione approriata come indicato sopra>"
VisualizzaErrore(cn) ´Vedi sopra per questa funzione
Set Connessione = cn
Set cn = Nothing
End Function
%>

se questa funzione è, per esempio, definita nel file "tools.asp" ecco come può essere utilizzata da altre pagine:


<%Option Explicit%>
<!--#include file="tools.asp"-->
<%
Dim cn, rs
Set cn = Connessione
On Error Resume Next
Set rs = cn.Execute("SELECT * FROM …")
VisualizzaErrore cn

While not rs.EOF
´QUI SI FA QUALCOSA
rs.MoveNext
Wend
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
%>


Approfondimenti