Documente Academic
Documente Profesional
Documente Cultură
1.concepte de Baza
1.concepte de Baza
NET
Concepte de baz
Dinamicitatea paginilor web
paginile statice se mai numesc i pagini HTML, cci nu conin alt tip de cod dect cel scris n
HTML; coninutul unei pagini nu variaz n timp sau de la un utilizator la altul; toi vd la
fel, fr informaii specifice contextului rulrii; coninutul este fixat i cunoscut nainte de
lansarea cererii ctre pagina respectiv.
- securitate redus, cci codul este vizibil din browser, cu View / Source.
Pentru a reflecta chestiuni legate de un context ( de exemplu afiarea orei exacte, sau pentru
adaptarea coninutului paginii la profilul utilizatorului care solicit pagina html ) pagina ar trebui
compus abia dup ce s-a naintat cererea din partea unui client.
paginile dinamice sunt cele configurate abia la momentul execuiei, n funcie de context i de
resursele disponibile pe calculatorul de pe care se lanseaz cererea; de obicei aceste pagini au i
un nivel nalt de interactivitate. Pentru a realiza dinamicitatea, trebuie scris cod surs care se
ruleaz la momentul lansrii unei cereri i care prin rulare stabilete coninutul ce va fi afiat n
pagin; trebuie avut ns n vedere n ce limbaj este scris acest cod, cine nelege i poate prelucra
acest cod.
10.01.2013
Tehnologia ASP.NET
Modelul disponibilizat sub .NET de ctre Microsoft pentru aplicaiile accesibile din Internet este
denumit pe scurt ASP.NET (Active Server Page) i are urmtoarele caracteristici principale:
- se bazeaz pe formulare Web ( Web Forms) i separ logica prezentrii de logica de
business;
- furnizeaz controale de server ce recunosc evenimente la nivel de server, dar sunt redate ca
HTML, pentru a fi recunoscute i tratate de orice browser;
- asigur accesul la date prin mecanismul ADO.NET;
- permite caching pentru date i pentru salvarea strii unui client, pe server, pe calculatorul
client sau pe servere SQL specializate.
Avantaje ASP
-
este o tehnologie orientat obiect pentru dezvoltare rapid de aplicaii; elementele HTTP sunt
tratate tot obiectual;
lucreaz cu pagini compilate, nu interpretate pas cu pas; compilarea se face doar cnd este
nevoie;
permite accesul la toate clasele din .NET, clase care pot ndeplini sarcini complexe;
asigur securitatea prin mecanisme forms-based i Passport authentication;
trateaz fiiere XML, inclusiv pentru reconfigurri, fr a necesita restartarea server-ului;
ofer extensibilitate prin crearea i integrarea de noi componente sau nlocuirea unora
existente.
Dac pe calculator se dispune de mai multe plci de reea pot exista mai multe Local Area
Connection (Start / Control Panel / Network and DialUp Connection); ele pot avea setri diferite.
Se pot pune mai multe adrese IP chiar pe aceeai conexiune. O adres IP poate avea i pseudonim:
- n registru DNS, pe serverul de reea;
- local, n c:\winnt\system32\drivers\etc\hosts ca text:
38.25.63.10 www.ceva.ro
Control Panel / Administrative Tools / Computer Management / Services & Apps / IIS / Web
10.01.2013
Sites / Default Web Site cu click mouse dreapta / Properties se poate schimba portul prin care
se
2
comunic cu serverul: TCP Port = 80 sau 81.
n fereastra IIS cu buton dreapta mouse pe calculatorul dorit, se alege New / Web site i se indic
adresa de IP nregistrat mai sus, plus drepturile de acces.
La ncercarea de conectare de la distan:
fie se afieaz directoarele din site (opiunea Directory Browsing activ);
fie se pred controlul unui document implicit (Enable Default Document activat).
Cele dou opiuni se controleaz din fereastra IIS, click mouse dreapta pe site-ul dorit / Properties.
Trebuie creat ns una din paginile: default.htm, default.asp, default.aspx.
Mixarea informaiilor ntr-o pagin web
O pagin Web poate conine:
cod html, recunoscut de orice browser;
cod ntr-un limbaj de programare recunoscut de ctre serverul care ine pagina Web;
cod script ntr-un limbaj de tip script, recunoscut de majoritatea browserelor ( JavaScript,
VB Script fiind cele mai rspndite limbaje de tip script).
Modul n care se mixeaz aceste trei tipuri de cod complic oarecum nelegerea lucrurilor, dar este
foarte important pentru c el d ordinea n care se afieaz diferitele informaii n pagin. Din
punctul nostru de vedere, reinem dou dintre tag-urile care introduc cod scris ntr-un alt limbaj
dect html:
seciunea de cod
<script language="C#" runat="server">
cod C#
</script>
De obicei punem codul propriu-zis n prima parte a paginii, iar apelul codului (partea de
prezentare ) n interior, acolo unde dorim s apar efectul rulrii, n pagin.
Uzual, se practic i gruparea ntregului cod n fiier separat, tehnic denumit "code
behind"; la nceputul paginii se indic numele fiierului coninnd codul, iar n interiorul paginii se
trece apelul codului, ce va genera ca rezultat prezentarea paginii.
<%@ Page Language="c#" Src="fis.cs"%>
<% // apel cod C# %>
c:\inetpub\wwwroot
<html>
<script runat="server" language="c#"> </script>
<% Response.Output.Write( System.DateTime.Now.ToString()); %>
</html>
10.01.2013
server side, deoarece programul arat alt coninut n funcie de momentul solicitrii paginii; serverul
este responsabil n acest caz, cu extragerea i afiarea orei exacte.
Dac nu dispunem de serverul de web IIS instalat, putem starta serverul de web de sub VS
2008 rulnd o aplicaie oarecare; ct timp serverul de dezvoltare e activ, modificm n linia de adres
din browser doar numele fiierului ce conine pagina (spre ex. default.aspx, cu DataOra.aspx, cu
condiia ca fiierul s fi fost plasat n acelai director cu aplicaia care a startat serverul, cci serverul
vede directorul ca pe unul virtual ).
Observaie.
Save Target as... din browser salveaz pagina aa cum arat ea prelucrat (tradus n html);
astfel fiierul salvat cu Save Target as... la rularea paginii, cu extensia html, n wwwroot, va afia la
un nou apel n browser, mereu aceeai or !
Pentru fiierul iniial, ce conine codul de prelucrare, extensia fiierului trebuie s fie aspx,
pentru a anuna serverul cui s-o paseze pentru prelucrare, deoarece fiierul conine nu forma
prelucrat a paginii, ci instruciunile de prelucrare !
Exemplu DataOraJS.html Dinamicitate client-side
Cu un editor de text se introduce secvena de mai jos, ntr-un fiier DataOraJSP.html plasat
n c:\inetpub\wwwroot ( tipul html ne indic faptul c pagina poate fi prelucrat direct de ctre
browser):
<html>
<script language="javaScript">
document.write( " <b> Dinamicitate client side:
</b>" );
azi = new Date();
document.write( azi.getDate(),"/ ",azi.getMonth()+1,
"/ ", azi.getYear(), " ",azi.getHours(),":",
azi.getMinutes(),":", azi.getSeconds() );
</script>
</html>
Aceast pagin realizeaz aproximativ acelai lucru ca n exemplul anterior, dar responsabil
cu aceast sarcin este de data aceasta browser-ul cu care un client navigheaz pe aceast pagin;
aadar browser-ul clientului interpreteaz script-ul Java i l execut, apoi afieaz rezultatul. Ora
afiat va fi cea de pe calculatorul clientului, nu cea din server; presupunnd c ambele ceasuri arat
bine ora exact, cele dou exemple de mai sus vor afia ore diferite, dac server-ul se afl pe un alt
fus orar dect clientul!
Exemplu functia.aspx
n acest exemplu vom avea ambele categorii de cod: n prima parte se prezint codul unei
funcii, iar n interiorul paginii se pune codul de vizualizare, care apeleaz aceast funcie i afieaz
ptratele rezultate prin ruarea funciei.
<script runat="server">
double Patrate(double nr) { return (nr)*(nr); } </script>
<html>
<h2> Patratele primelor 10 numere naturale </h2>
<table border="2">
<tr>
<th> Numarul </th><th> Patratul </th>
</tr>
<%
for (double i = 1.0; i<=10.0; i++)
{
Response.Output.Write( "<tr><td>{0}</td><td>" +
"{1:f}</td><tr>", i, Patrate(i));
}
10.01.2013
%>
</table>
</html>
= new OleDbCommand(strSql,con);
OleDbDataReader dr = myCmd.ExecuteReader();
while (dr.Read())
10.01.2013
{
mesaje.Text+="\r\n"+dr["codp"]+ " " + dr["denum"]+ " " + dr["pret"];
mesaje.Text+="\r\n";
}
dr.Close(); con.Close();
}
</script>
<html>
<body>
<form id="Form1" method="post" runat="server">
<h4> Interogare BD folosind un obiect DataReader
</h4>
<asp:TextBox id="mesaje" runat="server" TextMode="MultiLine">
</asp:TextBox>
<h4> End Interogare BD </h4>
</form>
</body>
</html>
Se ruleaz dnd n linia de adres a browser-ului http://localhost/bdPage.aspx; trebuie
doar s ne asigurm c exist fiierul C:\prod.mdb coninnd o baz de date Access, cu tabela
produse i cmpurile: codp, denum i pret.
Pregtirea paginii se face tot pe server; o problem care apare aici este cum va cltori
informaia extras de pe server ( spre exemplu, dintr-o baz de date) pn la client, pentru vizualizare
n browser. Putem defini o variabil la nivelul paginii, string strRezultat; ea este recunoscut i
de funcia Render(), dar i pierde coninutul ntre dou cereri succesive. Putem apela la un control
de tip TextBox, care va transporta informaia n proprietatea sa numit Text, folosit drept
container; acesta este mecanismul pentru care s-a optat n exemplul de mai sus, rolul de container
avndu-l TextBox-ul mesaje.
La ncrcarea paginii n server, se lanseaz evenimentul Page_Load, care apeleaz implicit
funcia de tratare cu acelai nume, moment n care se acceseaz baza de date i se adaug informaia,
linie cu linie, n textBox;
n rest, dup cum se poate observa, lucru cu obiecte .NET este cel uzual, chiar cnd e vorba
de obiecte pentru acces la baze de date.
Web Forms controls desemneaz server controls
Crearea unei aplicaii Web folosind Visual Studio 2005
Sub .NET, File / New / Web Sites / ASP.NET Web Site i se alege un nume de aplicaie i ca
localizare se alege File System; pentru a se putea lucra rapid, cel puin pentru faza de realizare i
depanare a aplicaiei este preferabil aceast localizare.
Localizarea site-ului pe care se lucreaz se poate face alegnd una din opiunile:
File System dac se experimenteaz pe un site creat provizoriu ntr- un director local sau de
pe un alt calculator din reea expus ca partajabil (shared). Se poate crea i un director nou,
folosind icon-ul Create New Folder sau pur i simplu adugnd numele noului director, n
finalul unei ci de acces deja selectat. Rularea se face ntr-un server de web de testare, numit
ASP.NET Development Server i folosete un port, ales adhoc, nu pe cel folosit de IIS; avem
avantajul c putem muta directorul, cci el nu e luat n evidena IIS (metabaza IIS) ca director
virtual i nu e accesibil din Internet.
Local IIS dac dorim ca site-ul s se afle ntr-un director virtual recunoscut de server-ul de
web local (IIS). Cu icon-ul din colul dreapta-sus Create New Web Application se poate crea
chiar acum un nou director virtual.
10.01.2013
FTP Site - cnd lucrm pe un site la distan ( sub alt IIS, dect cel local ) i-l accesm prin
FTP, furniznd informaiile de conectare (FTP site, port, director, user, password).
Remote Web Server - cnd lucrm pe un site la distan i-l accesm prin protocolul HTTP,
furniznd URL (uniform resource locator); n acest caz este nevoie s avem instalate extensiile
FrontPage; la conectare vom furniza user i password.
Spre deosebire de Windows Forms, aplicaiile Web au fereastra de vizualizare grafic (Designer)
cu mai multe formate de vizualizare, accesibile prin comutatorii din josul paginii:
- Design View vizualizarea grafic a controalelor din pagin, care permite lucru n regim
grafic; controlele din ToolBox vor fi selectate din tab-ul Web Forms, nu din Windows Forms.
Rularea paginii de sub VS 2005 declanseaz activarea unui ASP Development Server,
folosind cte un port specific pentru comunicare; lansarea paginii din afara mediului Visual Studio
2005 se poate face direct din Internet Explorer sau alt browser, indicnd adresa paginii ( ex.
http://localhost:1966/WebSite3/myPage.aspx) pe care o folosea i mediul cnd rulm sub
mediul integrat (extras din bara de adres) i funcioneaz dac serverul de dezvoltare este inc
activ la acel moment.
Specificarea altor detalii de trasare pagin se poate face folosind foi de stiluri
Consultnd directorul n care a fost creat aplicaia (C:\Inetpub\wwwroot\prima) observm mai
multe fiiere:
10.01.2013
ASP.NET 2.0 folosete pentru dezvoltarea aplicaiei un server web integrat; acesta lucreaz
pe un port distinct de portul pe care lucreaz IIS, prevenind astfel eventualele conflicte ce pot apare.
Server-ul web ncorporat ruleaz o pagin web n numele utilizatorului logat n Windows, deci cu
eventuale privilegii extinse, fa de IIS care rula cu privilegii reduse, din considerente de securitate
sporit.
n scopul prevenirii conflictelor de apartene a unei clase la mai multe namespace-uri, va
trebui dat calificarea complet a clasei; cum aceast ar putea fi prea lung, se poate folosi using
pentru a introduce un alias mai scurt:
using scurt = NumeDeSpatiuLung;
scurt.Cls ex;
Ierarhiile din namespace-uri nu reflect neaparat derivri; la derivare clasele pot aparine unor
namespace-uri diferite.
Namespace-ul nu se confund cu library; o bibliotec dll are un corespondent fizic ( fiier dll ce
conine codul executabil aferent unor clase i funcii ), pe cnd namespace-urile sunt mai degrab
grupri logice ale unor clase i funcii.
10.01.2013
stau
lucrurile
aspnet_wp.exe
10.01.2013
Sintaxa directivelor este unic pentru toate directivele, iar n cazul atributelor multiple acestea
sunt separate cu un spaiu; nu trebuie separat cu spaiu semnul egal (=), de asignare a valorilor
unui atribut:
<%@ Directive_Name attribute="value" [attribute="value"...] %>
n cadrul unui formular web, adic ntre <form id="Form1" method="post" >
putem pune cod C#, declarat ca script:
</form>
Eventualele erori de compilare sunt raportate doar cnd se ruleaz pe aceeai main (
localhost ), dar se poate cere raportarea erorilor i cnd se ruleaz pe un server aflat la distan; n
acest scop n fiierul de configurare web.config, n care se pune n rubrica adecvat codul urmtor:
<compilation
defaultLanguage=c#
debug=true
/>
10
10.01.2013
TextBox; RadioButton;Button
Mai nti se vor aduce din Toolbox controale de tip TextBox, Label, RadioButton i se vor
completa corespunztor proprietile dorite, ca n figura de mai jos.
Se adaug apoi trei textBox-uri cu identificatorii a, b si r i un buton inscriptionat cu +, care la
apsare (evenimentul Click) declaneaz adunarea a dou numere i afiarea rezultatului. Funcia
pus ca tratare a mesajului emis la de buton ar putea arta astfel:
private void btnAduna_Click(object sender, System.EventArgs e)
{
double s = double.Parse(a.Text)+double.Parse(b.Text);
r.Text=s.ToString();
}
DropDownList
Se aduce prin dragare din ToolBox un control DropDownList i se populeaz adugnd cteva
linii n colecia (proprietatea) Items;
i se fixeaz proprietatea AutoPostBack pe true, pentru a anuna serverul de orice schimbare de
selectie;
se trateaz evenimentul SelectedIndexChanged prin funcia:
private void cbModel_SelectedIndexChanged(object sender, System.EventArgs e)
{
tbTip.Text=cbModel.SelectedValue;
}
AddRotator
Fiierul reclama.xml se adaug la proiect cu meniu Project (WebSite) / Add Existing Item...
<?xml version="1.0" encoding="utf-8" ?>
<Advertisements>
<Ad>
<ImageUrl>p29.jpg</ImageUrl>
<NavigateUrl>http://localhost/WebApplication10/</NavigateUrl>
<AlternateText>Doctorat</AlternateText>
<Impressions>40</Impressions>
<Keyword>Curs</Keyword>
11
10.01.2013
Se adaug un control AddRotator care este capabil s afieze aleator, la fiecare schimbare de
pagin, cte o imagine cu text asociat ;
i se pune proprietatea AdvertisementFile pe valoarea reclama.xml;
ne preocupm s existe fiierele imagine citate n reclama.xml.
Calendar
Funcia preia datele selectate din calendar i le pune ntr-un control Label lblMesaj.
12
10.01.2013
Un alt exerciiu care s ne apropie mai mult i de partea de gestiune a datelor, ar putea fi o aplicaie
cu o machet de introducere date, care la Save face mutarea ntr-un textBox multiline sau ntr-un
ListView.
Clasa Page
Ierarhia derivrii:
System.Object
System.Web.UI.Control
System.Web.UI.TemplateControl
System.Web.UI.Page
deci clasa Page este i un control avnd o mulime de proprieti i evenimente pe care le
recunoate. Este i container de controlale, colecia Controls furniznd acces la controalele de pe
pagin.
Aa cum aminteam, etapele crerii paginii sunt semnalate prin evenimente ce pot fi captate i
folosite pentru a plasa cod de utilizator pentru executat legat de acel moment:
- Init generat la crearea unei instane de tip Page; se poate folosi i pentru a ataa dinamic
handlere altor evenimente recunoscute de pagin i declanate ulterior.
-
i arat c acest tip de delegat poate ine referina oricrei funcii ce primete un obiect generic i un
bloc de parametri cu argumentele specifice unui eveniment generic i returneaz void.
Cnd adugm unui eveniment o funcie de tratare, se instaniaz un nou delegat, care prin
constructor primete i referina pe care o va transporta:
this.Load += new EventHandler(tratareLoad);
13
10.01.2013
Atenie cnd textul surs se preia cu Copy / Paste, ghilimelele trebuie s fie cele drepte, nu
"smart" !
se
recomand
folosirea
simultan
a
mecanismelor
delegate
i
deoarece unele din funciile de tratare pot fi apelate de dou ori;
explicaia const n faptul c n cadrul mecanismului AutoEventWireup ASP.NET leag automat la
delegaii corespunztori, metodele cu numele impus, iar cnd programatorul ataeaz metodele cu +=
le leag a doua oar!
AutoEventWireup="true"
Exemplul de mai sus se putea da i ca fiier text, ataabil la un proiect vid, nemaifiind
necesar trimiterea la fiierul cu cod surs Codebehind="WebForm1.aspx.cs", care oricum nu
aducea n plus ceva major.
Mecanismul code-behind separ codul necesar descrierii interfeei utilizator (user interface)
de codul ce detaliaz algoritmii de prelucrare (business logic). Prima categorie se pune n fiierul de
tip .aspx, cea de-a doua n fiierul .cs; astfel este posibil i lucru n echip, designerii ocupndu.se de
proiectarea vizual a paginii, iar programatorii de prelucrri.
14
10.01.2013
Cele dou fiiere sunt legate prin atributul Codebehind din directiva Page; acesta precizeaz fiierul
cu cod surs . Linkeditarea apare astfel ca fiind iniiat din pagina de utilizator.
Directiva Page precizeaz atribute necesare compilrii i vizualizrii paginii Web.
Src- citeaz numele fiierului surs ce conine clasa code-behind care este compilat dinamic la
solicitarea unei pagini Web. Cnd folosimVisual Studio .NET nu este nevoie de acest atribut doarece
clasa code-behind este precompilat.
Inherits furnizeaz numele clasei code-behind ce conine codul paginii ASPX i din care clasa
generat dinamic va moteni prin derivare.
Desi Src furnizeaz aceeai informaie ca atributul Codebehind; ntre ele exist o deosebire
major: Src e necesar cnd compilarea se face la momentul vizualizrii paginii. Visual Studio a
optat pentru precompilarea codului ce nsoete pagina Web. Pentru c mediul Visual Studio separ
i el codul de vizualizare de cel de prelucrare, are totui nevoie la momentul proiectrii aplicaiei de
numele fiierului ce ine codul surs C#, pentru a-l compila din vreme; acesta e indicat prin
Codebehind. Aadar, Codebehind este un atribut neles i folosit numai de VS (nu i de
ASP.NET la execuia paginii) pentru localizarea fiierului surs ce conine definirea claselor folosite
n pagin.
Asocierea Src i Inherits sugereaz o pagin fr compilare prealabil.
Asocierea Codebehind i Inherits sugereaz o pagin cu precompilare
Precompilarea are urmtoarele avantaje:
- ne asigur c am rezovat toate erorile de compilare;
- nu mai trebuie dat beneficiarului codul surs, ci doar dll-urile;
- chiar cnd pe calculatorul beneficarului exist alt versiune de .NET, clasa folosete
versiunea cu care a fost ea creat.
Meniu Project / Show All Files permite vizualizarea n Solution Explorer a tuturor fiierelor
folosite n cadrul unui proiect, altfel implicit sunt vizibile doar o parte dintre ele.
Fiierul de configurare Web.config conine toate clauzele de configurare a proiectului, inclusiv
debug = true, necesar cnd aplicaia nu poate fi rulat n mod depanare, cci ea a fost compilat
fr opiuni de depanare. Punnd-o pe true, ne asigurm c recompilarea se face cu adugarea tuturor
facilitilor de depanare.
Ildasm.exe (Intermediate Language Disassembler) poate vizualiza EXE i DLL ntr-un format
accesibil utilizatorului.
Tipologia controalelor dintr-o aplicaie ASP.NET
HTML Controls preluate din HTML clasic; accesul la informaii este greoi (trebuie analizat
pagina de rspuns).
HTML Server Controls identice cu cele de mai sus, dar prin runat = server devin
accesibile prin program i ruleaz pe server; asigur acces uor la informaii prin intermediul
proprietilor i evenimentelor.
Web Server Controls specifice ASP.NET; acoper toate controalele de mai sus i ceva n
plus; ofer alt model, mai consistent, de programare.
Validation Controls
User Controls, Composite Controls i CustomControls extensii sau adaptri, create de
utilizator
15
10.01.2013
16
10.01.2013
Categorii de controale
tag HTML
Categoria
Nume HTML
Descriere
<input>
Input
HtmlInputButton
HtmlInputCheckBox
HtmlInputFile
HtmlInputHidden
HtmlInputImage
HtmlInputRadioButton
HtmlInputText
<img>
Input
HtmlImage
Image
<textarea>
Input
HtmlTextArea
Text multilinie
<a>
Container
HtmlAnchor
Ancor
<button>
Container
HtmlButton
<form>
Container
HtmlForm
<table>
Container
HtmlTable
<td> <th>
Container
HtmlTableCell
<tr>
Container
HtmlTableRow
Linie de tabel
<select>
Container
HtmlSelect
Meniu pull-down
Container
HtmlGenericControl
17
10.01.2013