ASP.NET Plan ASP.NET ASP.NET

Transcription

ASP.NET Plan ASP.NET ASP.NET
Plan
ASP.NET
1. Développement
2. Contrôles
2.1
2.2
2.3
2.4
Lionel Seinturier
Université des Sciences et Technologies de Lille
Contrôles élémentaires
Présentation de données
Gestion des utilisateurs
Pagelet
[email protected]
3. Compléments sur l'API
26/11/07
ASP.NET
1
Lionel Seinturier
ASP.NET
ASP.NET
2
Lionel Seinturier
ASP.NET
Active Server Pages (ASP)
ASP vs ASP.NET
• du code Java embarqué dans une page HTML
• mêmes principes JSP, PHP
• évolution des ASP pour prendre en compte .NET
• extension .asp (.aspx pour ASP.NET)
• ASP : VBScript ou JScript
• ASP: interprété/non typé
• les fichiers .aspx sont stockés sur le serveur (comme des docs)
• ils sont désignés par une URL
http://www.lifl.fr/prog.aspx
• le chargement de l'URL provoque l'exécution de l'ASP côté serveur
ASP.NET : VB, C#, … ∀ langages .NET
ASP.NET : compilé/typé
ASP.NET vs JSP
1
Client
IE
Firefox
...
ASP.NET
2
Serveur
prog.aspx
• modèle de programmation similaire
• ++ ASP.NET = composants graphiques (contrôles)
3
4
CLR
3
ASP.NET vs servlet
.NET
• pas d'équivalent de l'API servlet dans le monde ASP.NET
• en interne, les ASP.NET sont traduites en classes et compilées
Lionel Seinturier
ASP.NET
4
Lionel Seinturier
1. Développement
1. Développement
Illustration du fonctionnement
Principe de fonctionnement
<%@ Page Language="c#" %>
<HTML> <BODY>
<H1>Table des factorielles</H1>
<%
int i,fact;
for ( i=1,fact=1 ; i<4 ; i++, fact*=i ) {
Response.Write( i + "! =" + fact + "<BR>" );
}
%>
</BODY> </HTML>
<%@ Page Language="c#" %>
<HTML> <BODY>
<H1>Table des factorielles</H1>
<%
int i,fact;
for ( i=1,fact=1 ; i<4 ; i++, fact*=i ) {
Response.Write( i + "! =" + fact + "<BR>" );
}
%>
</BODY> </HTML>
invocation
Ö
exécution
côté serveur
ce qui est
renvoyé
au client
ASP.NET
5
Lionel Seinturier
résultat = HTML
généré via l'objet
prédéfini Response
<HTML> <BODY>
<H1>Table des factorielles</H1>
1! = 1<BR>
2! = 2<BR>
3! = 6<BR>
</BODY> </HTML>
ASP.NET
1. Développement
du code C#
6
Lionel Seinturier
1. Développement
Principe de fonctionnement
Méthodes et variables d'instance
• plusieurs zones <% ... %> possibles dans une même ASP.NET
• exécutées dans leur ordre de définition
Entre les balises <script runat="server"> et </script>
<%@ Page Language="c#" %>
<HTML> <BODY>
<H1>Compteur</H1>
<script runat="server">
• une classe générée pour chaque ASP.NET
• ne change pas tant que le fichier .aspx n'est pas modifié
• instanciée pour traiter une requête
static int compteur = 0;
• pas de persistence de l'instance (objet) entre 2 invocations
• besoin : conserver de l'information
¾ déclarer des attributs static
int GetCompteur() {
return compteur++;
}
</script>
<H1> <% Response.Write(GetCpt()); %> </H1>
</BODY> </HTML>
ASP.NET
7
Lionel Seinturier
ASP.NET
8
Lionel Seinturier
1. Développement
1. Développement
Exemple
Balise <script>
Le code peut être défini dans un fichier externe
1ère invocation
<%@ Page Language="c#" %>
<HTML> <BODY>
<H1>Compteur</H1>
<script runat="server" src="url" />
<H1> <% Response.Write(GetCpt()); %> </H1>
</BODY> </HTML>
2ème invocation
Directive Import
≈ using
<%@ Import Namespace = "...">
ASP.NET
9
Lionel Seinturier
ASP.NET
1. Développement
10
Lionel Seinturier
1. Développement
Les objets implicites
Récupération des données d'un formulaire
Objets prédéclarés utilisables dans le code
Propriété Params de l'objet prédéfini Request
Request
Response
la requête qui a provoqué le chargement
la réponse à la requête de chargement
Session
suivi de session pour un même client
Ö retourne le texte saisi
Ö ou null si le nom de paramètre n'existe pas
Session.Add( string name, object value )
Session[string name]
Application
espace de données partagé entre toutes les ASP.NET
idem Session
Cache
Server
Trace
données gardées en cache par le serveur
information sur le serveur, inclusion, délégation de pages
générer des traces d'exécution
ASP.NET
11
<HTML> <BODY>
<FORM ACTION="http://..."
METHOD=POST>
Nom <INPUT NAME="nom"> <P>
Prénom <INPUT NAME="prenom"> <P>
<INPUT TYPE=SUBMIT VALUE="Envoi">
<INPUT TYPE=RESET
VALUE="Remise à zéro">
</FORM>
</BODY> </HTML>
Lionel Seinturier
ASP.NET
12
Lionel Seinturier
1. Développement
1. Développement
Récupération des données d'un formulaire
Inclusion de pages
ASP.NET 4
ASP.NET 1
• aggrégation des résultats fournis
par plusieurs page
Ö meilleure modularité
Ö meilleure réutilisation
<%@ Page Language="c#" %>
<HTML> <BODY>
<H1>Exemple de résultat</H1>
Bonjour
<% Response.Write( Request.Params.Get("prenom") ); %>
<% Response.Write( Request.Params.Get("nom") ); %>
</BODY> </HTML>
ASP.NET 5
ASP.NET
ASP.NET 3
Méthode Server.Execute
Fichier inc.aspx
<%@ Page Language="c#" %>
<HTML> <BODY>
<H1>ASP.NET principale</H1>
<%
Server.Execute(" inc.aspx ");
%>
</BODY> </HTML>
clic
ASP.NET 2
<%@ Page Language="c#" %>
<HTML> <BODY>
<H1>ASP.NET incluse</H1>
</BODY> </HTML>
URL
ASP.NET
13
Lionel Seinturier
ASP.NET
1. Développement
14
Lionel Seinturier
1. Développement
Délégation de page
Gestion des erreurs
Une page peut déléger le traitement d'une requête à une autre
Ö prise en compte complète de la requête par la page déléguée
Erreur d'exécution du code
ex. : NullReferenceException, DivideByZeroException, …
Méthode Server.Transfer
Tout ce qui est après Transfer est ignoré
Ö dans tous les cas, erreur récupérée dans le navigateur client
2 possibilités
<%@ Page Language="c#" %>
<HTML> <BODY>
<H1>ASP.NET principale</H1>
<%
Server.Transfer(" transf.aspx ");
%>
</BODY> </HTML>
• conserver la page par défaut construite par le serveur Web
• en concevoir une adaptée aux besoins particuliers de l'application
URL
ASP.NET
15
Lionel Seinturier
ASP.NET
16
Lionel Seinturier
1. Développement
1. Développement
Exemple de gestion d'erreur
Exemple de gestion d'erreur
<%@ Page Language="c#" %>
<HTML> <BODY>
<H1>Pourvu ... !!</H1>
<% Random r = new Random();
double h = (double)r.Next();
int hasard = (int) (h/Int32.MaxValue*5); %>
<H1> <% Response.Write(12/hasard); %> </H1>
</BODY> </HTML>
Si hasard = 0
page d'erreur par défaut
<%@ Page Language="c#"
ErrorPage="err.aspx" %>
<HTML> <BODY>
<H1>Pourvu ... !!</H1>
<% Random r = ... %>
<H1> <% ... (12/hasard) %> </H1>
</BODY> </HTML>
<%@ Page Language="c#" %>
<HTML> <BODY>
<h1>Le 0 est sorti !!</h1>
</BODY> </HTML>
Si hasard = 0
page d'erreur err.aspx
ASP.NET
17
Lionel Seinturier
ASP.NET
1. Développement
18
1. Développement
Gestion des traces
Activation des traces
• debugger
• contrôler/inspecter le déroulement d'une appli web
Ö à la main : Response.Write
: lourd, long à enlever pour passer en prod.
<%@ Page Trace="true" %>
Objet prédéfini Trace
Lionel Seinturier
Exemple factorielle
À chaque itération :
Trace.Write( "i=" + i + " / fact=" + fact );
System.Web.TraceContext
• Trace.Write(string message)
• Trace.Write(string categorie, string message)
• Trace.Write(string categorie, string message, Exception e)
• idem méthode Warn : les messages apparaissent en rouge dans les traces
ASP.NET
19
Lionel Seinturier
ASP.NET
20
Lionel Seinturier
Plan
2. Contrôles
Philosophie ASP.NET
1. Développement
Séparer
2. Contrôles
• rendu graphique
• traitement
2.1
2.2
2.3
2.4
Contrôles élémentaires
Présentation de données
Autres contrôles
Pagelet
2 fichiers
• .aspx
le code de présentation et celui des contrôles
fichier XTHML (HTML 4.0 formulé en XML)
Web form
3. Compléments sur l'API
ASP.NET
21
• .aspx.cs , .aspx.vb , …
fichier dit codebehind
classe contenant les traitements
Lionel Seinturier
ASP.NET
2. Contrôles
22
Lionel Seinturier
2. Contrôles
Les contrôles
Les contrôles existants par défaut
Composants graphiques pour l’écriture de pages ASP.NET
• toutes les balises HTML standards (<input> <img> <p> …)
• composants supplémentaires fournis par MS (redondants avec HTML mais + évolués)
• pour agir avec l'utilisateur
• pour réagir aux actions de l'utilisateur
: lui présenter de l'information
: déclencher des traitements
• utilisation en drag-and-drop dans VS pour la conception page web
• analogue atelier conception IHM en client lourd
• classe / objet
• propriétés : les caractéristiques d'affichage (ex. Text pour un TextBox)
• événements: réactions (clic, frappe, changement, …)
• autant d'objets par page que de contrôles "déposés" sur la page
• interaction avec la page ≡ interaction avec les objets
• rendu HTML de la page à partir de l'état des objets
ASP.NET
23
• affichage
• bouton
• saisie
• liste
• validation
• divers
• données
• login
• ….
: Label, Image, Panel, Tabel
: Button, Hyperlink, ImageButton, LinkButton
: TextBox, CheckBox, RadioButton, FileUpload, …
: ListBox, DropDownList, …
: CompareValidator, RequiredFieldValidator, RangeValidator, …
: Calendar
: DataList, GridView, DetailsView
+ de nouveaux contrôles peuvent être programmés par l’utilisateur
Lionel Seinturier
ASP.NET
24
Lionel Seinturier
2.1 Contrôles élémentaires
2.1 Contrôles élémentaires
Exemple
Exemple
Contrôles TextBox et Button
Contrôles TextBox et Button
Fichier WebForm1.aspx
<%@ Page Language="c#" CodeFile="WebForm1.aspx.cs" Inherits="WebForm1" %>
<html>
<body>
<form id="form1" runat="server">
<asp:TextBox ID="MyTextBox" runat="server" />
<asp:Button ID="MyButton" runat="server" OnClick="MyButton_Click" />
</form>
</body>
Fichier WebForm1.aspx.cs
public partial class WebForm1 : System.Web.UI.Page {
public void MyButton_Click(object sender, System.EventArgs e) {
MyTextBox.Text = "Hello world!";
} }
demo >>
ASP.NET
25
Lionel Seinturier
ASP.NET
2.1 Contrôles élémentaires
26
2.1 Contrôles élémentaires
Contrôle TextBox
Association page - code
Propriétés principales
1ère solution : .aspx + codebehind + association (On…) déclarée dans .aspx
• ID
: identificateur unique (propriété présente pour tous les contrôles)
• Text
: le texte affiché
• MaxLength
: taille max du texte
• TextMode
: SingleLine | MultiLine | Password
• ReadOnly
: false | true
• Columns
: le nombre de colonnes
• Rows
: le nombre de lignes (MultiLine)
• BackColor, BorderColor, ForeColor
: couleurs
• BorderStyle, BorderWidth, Font
: affichage
Événement principal
• TextChanged
ASP.NET
: le texte change
(méthode de réaction OnTextChanged)
27
Lionel Seinturier
Lionel Seinturier
2ème solution : sans codebehind
• définir le code des méthodes de traitements des événements dans le fichier .aspx
entre des balises <script runat="server"> et </script>
Ö 1 seul fichier à gérer, moins modulaire
3ème solution : .aspx + codebehind + association (On…) déclarée dans codebehind
• ne pas utiliser l'attribut OnClick dans le fichier .aspx
• ajouter un gestionnaire d'événement sur le bouton dans le code C#
en redéfinissant la méthode exécutée lors du chargement (OnInit)
Ö couplage moins fort entre le fichier .aspx et le codebehind
Ö plus difficile à manipuler, moins intuitif
ASP.NET
28
Lionel Seinturier
2.2 Présentation de données
2.2 Présentation de données
Contrôle GridView
Contrôle DataSource
• présentation d'information sous forme de tableau
• édition, suppression
• pager automatique
• tri
• “source” des données à afficher
• SqlDataSource
: un SGBD (SQL Server, …)
• AccessDataSource : un fichier Access
• XmlDataSource
: un fichier XML
• ObjectDataSource : des objets (C#, VB, …)
Exemple d'utilisation
• édition des données d'une table SQL
Définition d’une SqlDataSource
• une connection string (~ chemin d’accès aux données)
• 4 commandes SQL : SELECT, INSERT, DELETE, UPDATE
Ö associé à un contrôle DataSource
ASP.NET
29
Lionel Seinturier
ASP.NET
2.2 Présentation de données
30
2.2 Présentation de données
Exemples
Contrôle GridView
Exemple de DataSource
Propriétés principales
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="Driver={SQL Server};server=localhost;database=master"
ProviderName="System.Data.Odbc"
SelectCommand="SELECT * FROM [foo]"
DeleteCommand="DELETE FROM [foo] WHERE [nom] = ?"
InsertCommand="INSERT INTO [foo] ([nom], [age]) VALUES (?, ?)"
UpdateCommand="UPDATE [foo] SET [age] = ? WHERE [nom] = ?">
</asp:SqlDataSource>
• ID
• AllowPaging, AllowSorting
• AutoGenerateColumns
• AutoGenerateDeleteButton (idem Edit, Select)
Exemple de GridView
<asp:GridView ID="GridView1" runat="server"
DataSourceID="SqlDataSource1" DataKeyNames="nom"
AutoGenerateColumns="True"
AllowPaging="True" PageSize="4" AllowSorting="True"
AutoGenerateEditButton="true" AutoGenerateDeleteButton="true">
</asp:GridView>
demo
ASP.NET
31
Lionel Seinturier
• Rows
: les lignes affichées dans le GridView
• SelectedIndex : l'indice de la ligne sélectionnée
• ex. utilisation : GridView1.Rows[GridView1.SelectedIndex].Cells[0].Text
• EditIndex, PageIndex
Événements principaux
>>
Lionel Seinturier
• RowUpdating : juste avant de mettre à voir une ligne
• RowUpdated : après avoir mis à jour une ligne
• idem SelectedIndexChanging/ed, Sorting/ed, RowDeleting/ed, PageIndexChanging/ed
ASP.NET
32
Lionel Seinturier
2.2 Présentation de données
2.2 Présentation de données
Contrôle DetailsView
Exemple
• présentation sous forme de fiches
• même action que GridView (édition, suppression)
• action supplémentaire : ajout
<asp:DetailsView ID="DetailsView1" runat="server"
DataSourceID="SqlDataSource1" DataKeyNames="nom"
AutoGenerateRows="true"
AutoGenerateEditButton="True"
AutoGenerateDeleteButton="True"
AutoGenerateInsertButton="True"
AllowPaging="True" >
</asp:DetailsView>
demo >>
ASP.NET
33
Lionel Seinturier
ASP.NET
34
2.3 Autres contrôles
Lionel Seinturier
2.3 Autres contrôles
Autre exemple de contrôle
Contrôle Login
Contrôle Login
Modification du fichier Web.Config
• gérer les comptes utilisateurs sur un site
• créer des comptes
• les stocker dans une base de données
• offrir un contenu différents selon que l’utilisateur est connecté ou non
<configuration xmlns="http://schemas.microsoft.com/.NETConfiguration/v2.0">
<appSettings/>
<connectionStrings>
La base de données dans laquelle
<remove name="LocalSqlServer"/>
vont être stockées les infos de login
<add
name="LocalSqlServer"
connectionString="Data Source= localhost;Initial Catalog=aspnetdb;
Integrated Security=True"
providerName="System.Data.SqlClient"/>
</connectionStrings>
• Login
• LoginStatus
• CreateUserWizard
• ChangePassword
• PasswordRecovery
ASP.NET
: se connecter
: affichage du statut (connecté/non connecté)
: création d’un nouvel utilisateur
: changer le mot de passe du compte
: récupérer son mot de passe
35
<system.web>
<authentication mode="Windows"/>
<authentication mode="Forms"/>
Lionel Seinturier
ASP.NET
36
Lionel Seinturier
2.3 Autres contrôles
2.3 Autres contrôles
Contrôle Login
Contrôle Login
Modification du fichier Web.Config
Modification du fichier Web.Config
Par défaut le contrôle Login impose des règles strictes de sécurité sur les mots de passe
<system.web>
<authentication mode="Forms"/>
<membership defaultProvider="MyMembershipProvider" >
<providers>
<add
name="MyMembershipProvider"
type="System.Web.Security.SqlMembershipProvider"
minRequiredNonalphanumericCharacters="0"
minRequiredPasswordLength="1"
passwordStrengthRegularExpression=""
connectionStringName=" LocalSqlServer " />
</providers>
</membership>
La réf. sur la chaîne
</system.web>
de connexion
</configuration>
• au moins 7 caractères
• au moins 1 caractère non alphanumérique
Ö possibilité de réduire ces exigences
ASP.NET
37
Lionel Seinturier
ASP.NET
2.3 Autres contrôles
38
2.4 Pagelet
Contrôle Login
Contrôles définis par l'utilisateur
Création de la base des utilisateurs
• factorisation de code HTML et de scripts
• fichier .ascx
• programme aspnet_regsql.exe
Ö base SQL Server aspnetdb
Lionel Seinturier
\WINDOWS\Microsoft.NET\Framework\v2.0.xxx
<table><tr>
<td><asp:textbox id="jour" runat="server" /></td><td>/</td>
<td><asp:textbox id="mois" runat="server" /></td><td>/</td>
<td><asp:textbox id="annee" runat="server" /></td>
• alternativement fichier XML
Rq: gestion des utilisateurs et des “membership provider” via le site web d’admin
<script language="c#" runat="server">
public string Jour {
// les propriétés de la pagelet
get { return jour.Text; }
set { jour.Text=value; } }
/* idem Mois, Annee */
</script>
</tr></table>
ASP.NET
39
Lionel Seinturier
ASP.NET
40
Lionel Seinturier
2.4 Pagelet
2.4 Pagelet
Utilisation de pagelet
<%@ Register
TagPrefix
TagName
Src
Utilisation de pagelet
le namespace XML choisi
le nom de la pagelet choisi
l'URL pour accéder au fichier .ascx
<%@ Register TagPrefix="foo" TagName="bar" Src="Date.ascx" %>
<%@ Page Language="c#" %>
<html><body>
<form runat="server">
<foo:bar id="JMA" runat="server" />
<asp:label id="Label" runat="server" />
<asp:button id="Button" text="Go!" runat="server" onclick="Click" />
</form>
clic
<script runat="server">
void Click(object sender, System.EventArgs e) {
Label.Text = JMA.Jour;
}
</script></body></html>
ASP.NET
41
Lionel Seinturier
ASP.NET
2.4 Pagelet
42
2.4 Pagelet
Utilisation de pagelet
Autre façon de définir des contrôles utilisateur
• chaque pagelet est compilée en une classe nompagelet_ascx (ex : Date_ascx)
<foo:bar id="JMA" runat="server" />
• instanciée lorsqu'on les utilise
• étendre System.Web.UI.WebControls.WebControl
• redéfinir CreateChildControls
Alternativement
Avantage
: le contrôle peut-etre défini à l'aide d'un DOM HTML
Ö on ne se préoccupe pas d'écrire le code HTML
• peut être instanciée par programme
• ajoutée dynamiquement à une page
LoadControl("Date.ascx")
public class MyWebControl : WebControl {
protected override void CreateChildControls() {
Table tbl = new Table();
TableRow row = new tableRow();
TableCell cell = new TableCell();
TextBox box = new TextBox();
box.ID = "jour";
cell.Controls.Add(box);
row.Cells.Add(cell);
table.Rows.Add(row);
Controls.Add(table);
} }
<script runat="server">
void Page_Load() {
Control dt = LoadControl("Date.ascx");
((Date_ascx)dt).Jour = 12;
Frm.Controls.Add(dt);
}
</script>
<form id="Frm" runat="server">
...
ASP.NET
Lionel Seinturier
43
Lionel Seinturier
ASP.NET
44
Lionel Seinturier
Plan
3. Compléments sur l'API
Les objets prédéfinis ASP.NET
1. Développement
Request
la requête qui a provoqué le chargement
System.Web.HttpRequest
2. Contrôles
2.1 Contrôles élémentaires
2.2 Présentation de données
2.3 Pagelet
45
les paramètres de la requêtes
.RawUrl
.FilePath
.PhysicalPath
l'URL complète
le chemin du fichier dans l'URL
le chemin ϕ du fichier sur disque
/foobar/c2/WebForm1.aspx
c:\Inetput\wwwroot\foobar\c2\WebForm1.aspx
.PhysicalApplicationPath
la racine de l'application
c:\Inetput\wwwroot\foobar\
3. Compléments sur l'API
ASP.NET
.Params
.Headers
.UserHostName
.UserHostAddress
.UserLanguages
.Cookies
Lionel Seinturier
les en-têtes de la requête HTTP
l'@ du client
l'IP du client
les préférences du client en terme de langues
lecture d'un cookie
ASP.NET
3. Compléments sur l'API
46
Lionel Seinturier
3. Compléments sur l'API
Les objets prédéfinis ASP.NET
Les objets prédéfinis ASP.NET
Response
Session
la réponse à une requête
System.Web.HttpResponse
gestion d'une session client
System.Web.SessionState.HttpSessionState
.ContentType
.Cache
le type MIME du contenu retourné au client (text/html, image/gif, …)
gestion de la politique de cache de la réponse (date expiration)
.SetCookie
positionnement d'un cookie chez le client
Fonctionne comme une table de hachage indicée
• Session["key"] = object
• object res = Session["key"]
• object res = Session[int]
• Session.Count
• Session.GetEnumerator()
• Session.Remove("key")
• Session.RemoveAt(int)
• Session.RemoveAll()
// null si la clé n'existe pas
le i-ème élément de la session
le # d'éléments dans la session
un itérateur sur toutes les éléments de la session
• Session créée lors de la 1ère visite d'un client (Session.IsNewSession vaut true)
• Session.Timeout
délai d'inactivité (en minutes) au delà duquel la session expire
ASP.NET
47
Lionel Seinturier
ASP.NET
48
Lionel Seinturier
3. Compléments sur l'API
3. Compléments sur l'API
Les objets prédéfinis ASP.NET
Les objets prédéfinis ASP.NET
Application
Cache
espace de données partagé par tous les clients
System.Web.HttpApplicationState
System.Web.Caching.Cache
Fonctionne comme une table de hachage indicée
Server
• Application["key"] = object
• object res = Application["key"]
• object res = Application[int]
• Application.Count
• Application.GetEnumerator()
• Application.Remove("key")
• Application.RemoveAt(int)
• Application.RemoveAll()
ASP.NET
espace de données partagé par tous les clients
≠ par rapport Application : peut avoir une durée de vie limitée
informations sur le server
System.Web.HttpServerUtility
// null si la clé n'existe pas
le i-ème élément de la session
le # d'éléments dans la session
un itérateur sur toutes les éléments de la session
49
www.cours-ofppt.com
Lionel Seinturier
ASP.NET
50
Lionel Seinturier
www.cours-ofppt.com

Documents pareils