Izrada web aplikacija primjenom ASP.NET 4 tehnologije

UNIVERZITET SINERGIJA
DEPARTMAN ZA STUDIJE INFORMATIKE
BIJELJINA
NEMANJA NAKIĆ
IZRADA WEB APLIKACIJA PRIMJENOM ASP.NET 4 TEHNOLOGIJE
DIPLOMSKI RAD
Bijeljina, 2012. godina
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
UNIVERZITET SINERGIJA
DEPARTMAN ZA STUDIJE INFORMATIKE
BIJELJINA
IZRADA WEB APLIKACIJA PRIMJENOM ASP.NET 4 TEHNOLOGIJE
DIPLOMSKI RAD
mentor:
redovan profesor
dr.Dušan Regodić, dipl.inž.
student:
Nemanja Nakić
broj indeksa: 42/07
Bijeljina, 2012. godina.
2
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
UNIVERZITET SINERGIJA
DEPARTMAN ZA STUDIJE INFORMATIKE
Broj:__________/2012
Kandidat: Nemanja Nakić
Broj indeksa: 42/07
Smijer: Poslovna informatika
Tema: IZRADA WEB APLIKACIJA PRIMJENOM ASP.NET 4 TEHNOLOGIJE
Zadatak:
Opisati razvojno okruženje i kroz studiju slučaja demonstrirati rad web prodavnice za pregled i
naručivanje proizvoda.
MENTOR
redovan profesor
dr.Dušan Regodić, dipl.inž.
datum: _______.2012. godina
Bijeljina
DEKAN
redovan profesor
dr.Dušan Regodić, dipl.inž.
3
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
IZVOD
Tokom prethodnih nekoliko godina, ASP.NET je uznapredovao i postao jedan od najpouzdanijih,
stabilnijih i funkcionalnijih okruženja dostupnih za upravljanje HTTP zahtjevima.
ASP.NET zajedno sa Microsoft Visual Studio-m, sadrže mnoge funkcije koje programeru web
aplikacija čine život lakšim. Na primjer, Visual Studio nudi nekoliko projektnih šablona koje možemo
koristiti za izradu sajta. Visual Studio sadrži nekoliko razvojnih cjelina, uključujući Microsoft Internet
Information Services (IIS) za direktno testiranje prilikom razvoja, ugradjen web server, i razvoj sajta
preko FTP konekcije. Pomoću Visual Studio Debugger-a, u mogućnosti smo pokrenuti sajt i zaustaviti
izvršavanje u kritičnom djelu koda, kako bi smo pronašli problem. Pomoću Visual Studio dizajnera,
kreiramo korisnički interfejs prevlačenjem kontrola na radnu površinu, koja automatski prikazuje izgled
kontrola u dizajnu. I na kraju kada smo spremni objaviti aplikaciju, pomoću Visual Studia kreiramo
instalacioni paket.
Ako poredimo sa PHP, Java Scripts i JSP tehnologijama za razvoj web aplikacija, primjetićemo
da ASP.NET nudi više mogućnosti od kojih neke nisu ni dostupne na drugim platformama.
ABSTRACT
During the past few years, ASP.NET has evolved to become one of the most consistent, stable,
and feature-rich frameworks available for managing HTTP requests.
ASP.NET, together with Microsoft Visual Studio, includes a number of features to make your life
as a Web developer easier. For example, Visual Studio offers several project templates that you can use to
develop your site. Visual Studio also supports a number of development modes, including using
Microsoft Internet Information Services (IIS) directly to test your site during development, using a builtin Web server, and developing your site over an FTP connection. With the debugger in Visual Studio, you
can run the site and step through the critical areas of your code to find problems. With the Visual Studio
Designer, you can develop effective user interfaces by dropping control elements onto a canvas to see
how they appear visually. And when you are ready to deploy your application, Visual Studio makes it
easy to create a deployment package.
If you've been using PHP or Java Servlets and JSP for developing web applications, you'll soon
see that ASP.NET offers many features that just aren't available on other platforms.
4
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
SADRŽAJ
1. Uvod ..................................................................................................................................... 7
1.1. Hardverske i softverske komponente web aplikacije ............................................................... 8
1.2. Statičke web stranice .............................................................................................................. 9
1.3. Dinamičke web stranice ........................................................................................................ 10
2. State ................................................................................................................................... 11
2.1. ASP.NET State ..................................................................................................................... 12
2.2. Cookies ................................................................................................................................. 16
2.3. URL kodiranje ...................................................................................................................... 17
3. Razvoj ASP.NET aplikacija .............................................................................................. 18
3.1. Zahtjevi ................................................................................................................................ 18
3.2. Komponente .NET Framework radnog okruženja .................................................................. 19
3.3. Tri okruženja za razvoj ASP.NET aplikacija .......................................................................... 20
3.4. Kompajliranje ASP.NET aplikacija ....................................................................................... 21
3.5. Flow layout ........................................................................................................................... 22
3.6. Kontrole za validaciju korisničkog unosa .............................................................................. 22
3.7. Pregled HTML sadržaja poslanog pretraživaču ...................................................................... 23
3.8. Fajlovi i folderi koji se koriste u aplikaciji za online prodaju ................................................. 24
3.9. Master stranice ...................................................................................................................... 25
3.10. Navigacija sajtom ................................................................................................................ 27
3.10.1. web.sitemap fajl .......................................................................................................... 27
3.11. Teme ................................................................................................................................... 28
3.11.1. Skin fajl ....................................................................................................................... 30
3.11.2. Odabir teme ................................................................................................................. 31
4. Rad sa bazama podataka .................................................................................................. 33
4.1. SQL ...................................................................................................................................... 35
4.2. ADO.NET4 ........................................................................................................................... 37
4.3. Konkurentnost i disconnected data arhitektura ....................................................................... 41
4.4. Rad sa podacima bez korišćenja data adapter-a ...................................................................... 41
4.5. SQL data sources .................................................................................................................. 42
4.5.1. SqlDataSource i ObjectDataSource izvori podataka ....................................................... 49
4.5.2. GridView i FormView kontrole ..................................................................................... 49
5
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
4.6. Troslojne aplikacije i ASP.NET ............................................................................................ 55
5. Profesionalne vještine u ASP.NET ................................................................................... 56
5.1. Zaštita web sajta ................................................................................................................... 56
5.1.1. SSL ............................................................................................................................... 56
5.1.2. Autentifikacija i autorizacija korisnika ........................................................................... 62
5.1.3. Roles ............................................................................................................................. 65
5.1.4. Login kontrole ............................................................................................................... 68
5.2. Email .................................................................................................................................... 72
5.3. Obrada grešaka ..................................................................................................................... 76
5.4. AJAX ................................................................................................................................... 80
5.5. Primjena ASP.NET aplikacije ............................................................................................... 83
6. Zaključak ........................................................................................................................... 85
Literatura .............................................................................................................................. 86
6
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
1. Uvod
Web aplikacija sadrži više web stranica koje se generišu i prikazuju korisniku po zahtjevu. Na
internetu se nalazi više različitih vrsta web aplikaicja kao što suaplikacije za pretraživanje, skladištenje
podataka, trgovinu, vijesti, igre i slično.
Na stranicama se nalaze kontrole kao što su “drop-down list”, “buttons”, “listview” i mnoge
druge, pomoću kojih korisnik komunicira sa stranicom. Stranica koja sadrži pomenute kontrole, zove se
“web form”. ASP.NET aplikacija sadrži samo jednu formu po stranici.
slika br.1 - primjer ASPX web stranice
7
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
slika br.2 – izgled korpe za naručivanje artikala
1.1. Hardverske i softverske komponente web aplikacije
Web aplikacija je vrsta client/server aplikacije, što znači da su djelovi programa rasporedjeni
izmedju klijentskog i serverskog računara. Klijentski i serverski računar su povezani medjusobno preko
Interneta, i medjusobno komuniciraju preko HTTP protokola, iliHypertext Transfer Protocol.
Pristupanje web aplikaciji vrši se preko web pretraživača (web browser) koji se pokreće na klijentskom
računaru. Neki od najpopularnijih web pretraživača su Microsoft Internet Explorer, Mozilla Firefox i
Google Chrome.
Web aplikacija se nalazi na serverskom računaru koji uz pomoć posebnog web server programa
omogućava slanje web stranica web pretraživaču. Postoji više vrsta servera, a najpoznatiji su Microsoft
Internet Information Services (ISS) i Apache HTTP Server poznat pod nazivom Apache. ASP.NET
aplikacije pokreće IIS. Takodje i Apache se može konfigurisati za ASP.NET, ali ne podržava sve funkcije
kao IIS.
S obzirom da većina web aplikacija radi sa podacima koji su smješteni u bazu podataka, na
serveru je aktiviran i database management system (DBMS). Najpopularniji sistemi za upravljanje bazom
podataka Microsoft SQL Server, MySQL i Oracle. Dobra praksa je da se server baze podataka i web
server ne pokreću na istoj serverskoj mašini, kako bi se unapredile performanse aplikacije.
Pored toga za poboljšanje performansi primjenjuju se i napredne tehnike paralelnog programiranja uz
pomoć procesora sa više jezgara.
Klijentski i serverski računari ne moraju biti povezani samo preko Interneta. Ovo nije jedini način
da se klijent poveže sa serverskom web aplikacijom. U koliko su klijent i server u lokalnoj mrežilocal
area network (LAN), mogu se povezati preko intraneta. Intranet koristi isti protokol kao Internet, zbog
čega web aplikacija radi isto preko intraneta kao i preko Interneta.
8
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
slika br.3 – komponente web aplikacije
1.2. Statičke web stranice
Većina stranica na Internetu su statičke, što znači da ne mjenjaju sadržaj prilikom prikaza
korisniku. Ove stranice su HTML dokumenti definisane u Hypertext Markup Language ili HTML jeziku.
Slika br.4 pokazuje kako web server radi sa statičkim web stranicama. Proces započinje na korisnički
zahtjev preko web pretraživača kada korisnik zatraži odredjenu web stranicu. Poziva je tako što unese
adresu na pretraživaču u polje koje se zove URL (Uniform Resource Locator), ili kada klikne na link.
Nakon unosa adrese u URL, pretraživač preko HTTP šalje zahtjev web serveru. HTTP zahtjev u
sebi sadrži informacije o nazivu i adresi zahtjevane stranice, adresu pretraživača koji šalje zahtjev, i
adresu web servera koji obradjuje zahtjev.
Kada web server primi HTTP request (zahtjev) od pretraživača, pronadje HTML fajl na disku, i
šalje ga nazad pretraživaču preko HTTP response. HTTP response sadrži HTML dokument kojeg je
korisnik zatražio zajedno sa adresom pretraživača i web servera. Nakon što pretraživač primi HTTP
response, formatira HTML dokument i prikazuje sadržaj korisniku.
Ako korisnik zatraži drugu stranicu, proces započinje ispočetka.
slika br.4 – obrada statičke web stranice na serveru
9
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
Slika br.5 prikazuje komponente URL. Prva komponenta označava protokol, koji je u ovom
slučaju HTTP. U većini slučajeva pomenuti protokol se podrazumjeva ako se ne navede. Druga
komponenta je naziv domena (domain name) koja identifikuje web site, npr. www.nemanja.info.
Pretraživaču domen pomaže da pronadje server (hosting) na kome je postavljen web sajt. Odmah iza
domena naznačena je lokacija fajla na serveru. Prednje crte služe da odvoje adresu po folderima. Nakon
adrese upisuje se naziv fajla koji se prikazuje na pretraživaču. U ovom slučaju fajl je statička stranica pod
nazivom index.htm.
slika br.5 – komponente HTTP URL adrese
1.3. Dinamičke web stranice
Web aplikacija sadrži jednu ili više web stranica koje nisu statičke, i koje se mogu mijenjati pri
svakom prikazu. Umjesto da su smještene na disku u HTML formatu, ove stranice se dinamički kreiraju
od strane aplikacije. Tako generisane stranice zovu se dynamic web pages.
Jedna od glavnih razlika izmedju statičke i dinamičke web stranice jeste u tome što su dinamičke
stranice web forme koje sadrže jednu ili više kontrola server controls, kao što su polja za unos teksta,
dugmad, prikaz teksta. Korisnik preko ovih kontrola komunicira sa aplikacijom.
Slika br.6 pokazuje proces obrade dinamičkih web stranica. Proces započinje od pretraživača
slanjem HTTP zahtjeva web serveru (IIS) koji sadrži adresu zahtjevane web stranice, zajedno sa
podacima koje je korisnik uneo na formu. Kada IIS primi zahtjev, prepozna sadržaj web forme pomocu
ekstenzije zatražene stranice, a koja se nalazi na listi application mappings. Ova mapa odredjuje koji
program obradjuje koju ekstenziju. Pošto je aspx fajl mapiran sa ASP.NET, web server prosledjuje
zahtjev ASP.NET application server-u za obradu aspx fajla.
http://www.nemanja.info/projekti/default.aspx
slika br.6 –URL adresa do ASP.NET web stranice
ASP.NET obradjuje web formu i podatke koje je korisnik uneo preko kontrola, i nakon toga
generiše HTML dokument. Ako, na primjer, web forma prikazuje podatke iz baze podataka, šalje se SQL
upit kako bi se dobili podaci. Nakon toga ASP.NET generiše stranicu sa informacijama iz baze. Tako
generisanu stranicu, web server šalje pretraživaču preko HTTP response, i pretraživač prikazuje sadržaj.
Cjeli proces od slanja zahtjeva serveru, pa do primanja odgovora klijenta, zove se round trip.
Kada korisnik klikne na kontrolu, aktivira HTTP zahtjev koji se zove postback. Na primjer, na
“Asortiman” formi koja služi za naručivanje artikala, korisnik aktivira postback odabirom vrednosti sa
drop-down liste, ili klikom na dugme “dodaj u korpu”. Tada web forma od “Asortiman” stranice biva
procesuirana zajedno sa novim vrednostima koje je korisnik uneo na stranicu.
10
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
slika br.7 – obrada dinamičke web stranice na serveru
2. State
Nakon što se generiše web stranica, aplikacije se zatvara. Ovo znači da su podaci koje obradjuje
aplikacija, izgubljeni. Drugim rečima, HTTP ne čuva state (stanje) aplikacije. Slika br.8 ilustruje način
rada web aplikacija preko HTTP protokola.
Možemo uočiti da pretraživač zahtjeva stranicu od web servera, koji nakon što je obradi i vrati
pretraživaču, zatvara konekciju. Nakon toga, kada pretraživač šalje nov zahtjev. Server nema načina da
poveže pretraživač sa prošlim zahtjevom. Radi ovoga, HTTP je poznat kao stateless protocol.
slika br.8 – način rada web aplikacija preko HTTP protokola
(zašto je teško sačuvati stanje u web aplikacijama)
11
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
2.1. ASP.NET State
Iako HTTP ne čuva stanje, ASP.NET sadrži nekoliko načina da to uradi.
Prvo, možemo koristiti view state za čuvanje vrednosti serverskih kontrola. Na primjer, view state
se koristi da bi sačuvao tekst kontrole, ili natpis koji je promjenjen, vrednosti liste ili drop-down liste. S
obzirom da ASP.NET ima podrazumjevano implementiran view state, nema potrebe za dodatnim
kodiranjem.
Drugo, možemo koristiti session state za čuvanje podataka izmedju pojedinačnih izvršavanja
aplikacije. Kako bi ovo radilo, ASP.NET kreira objekat session state object koji je zadržan na serveru
dokle god korisnik ne pokrene novu sesiju. Ovaj objekat sadrži jedinstveni broj session ID koji se
razmjenjuje izmedju servera i pretraživača na svaki korisnički zahtjev za stranicom. Na ovaj način
možemo čuvati podatke koji su dostupni pri svakom izvršavanju web forme.
Treće, ako koristimo objekat application state object, podaci su dostupni svim korisnicima
aplikacije. Na primjer, application state je koristan u koliko želimo znati ukupan broj posjetilaca, ili listu
korisnika koji su trenutno prijavljeni na aplikaciju.
Četvrto, profile sadržaj čuva podatke korisnika. Sličan je session state objektu, ali se podaci
čuvaju u bazi podataka. Na primjer, pomoću objekta profile čuvamo zadnja tri artikla koje je korisnik
pregledao u poslednjoj sesiji. Nakon toga, kada korisnik kreira novu sesiju, možemo prikazati ove artikle
kao listu “poslednji pregledani artikli”.
slika br.9 –način na koji ASP.NET čuva stanje
Uobičajeni načini korišćenja session state-a:
-čuvanje informacija o korisniku, kao što su ime i ostali podaci unešeni prilikom prijave.
-čuvanje objekata sa kojima korisnik radi, kao što je korpa.
-čuvanje parametara neke operacije koja je na izvršavanju, npr. čuvanje onoga što je korisnik
završio prilikom naručivanja proizvoda.
12
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
Manipulacija podacima session state-a
Manipulisanje podacima koji se nalaze u session state-u, vršimo preko HttpSessionState klase. Osnovna
svojstva i metode ove klase možemo vidjeti na sledećoj slici.
svojstvo
opis
SessionID
Item(naziv)
Count
Jedinstveni identifikacioni broj sesije.
Vrednost session state zapisa odredjenog naziva. (Ovo je
podrazumjevano svojstvo HttpSessionState klase, tako da možemo
izostaviti naziv prilikom očitavanja vrednosti session state-a.)
Broj zapisa u session state kolekciji.
metoda
opis
Add(naziv, vrednost)
Clear()
Remove(naziv)
Dodavanje vrednosti u session state kolekciju.
Brisanje svih zapisa iz session state kolekcije.
Brisanje zapisa odredjenog naziva iz session state kolekcije.
slika br.10 – osnovna svojstva i metode HttpSessionState klase
Izraz za dodavanje i ažuriranje session state-a:
Session["Korpa"] = korpa;
Drugi način dodavanja i ažuriranja session state-a:
Session.Add("Korpa", korpa);
Izraz za očitavanje vrednosti iz session state-a:
SortedList korpa = (SortedList)Session["Korpa"];
Izraz za uklanjanje vrednosti iz session state-a:
Session.Remove("Korpa");
Izraz koji očitava vrednost iz session state-a, u klasi koja ne nasledjuje System.Web.UI.Page klasu:
SortedList korpa = (SortedList)HttpContext.Current.Session["Korpa"];
Četiri načina za smještanje podataka session state-a
-In-prosess mode (podrazumjevano) čuva session state u IIS server memoriju na istom serveru
kao i ASP.NET aplikacija. Medjutim, čest slučaj jeste da se poseban server koristi za aplikacije.
-State Server mode čuva session state podatke u memoriji koju kontroliše odvojeni servis zvani
ASP.NET state service. Ovom servisu pristupaju drugi IIS serveri, tako da se koristi kada je aplikacija
podjeljena na više IIS servera. U ovom slučaju, svaki zahtjev prema aplikaciji može biti obradjen na
različitom serveru, tako da session state podaci moraju biti dostupni svim serverima.
-SQL Server mode čuva session state podatke u SQL Server bazi podataka. Kao State Server mod,
SQL Server mod se koristi za aplikacije koje obradjuju vise IIS servera. Ovaj mod je sporiji u odnosu na
In-process i State Server mod, ali je pouzdaniji.
-Custom mode omogućava da napisemo vlastiti session state store provider za čitanje i pisanje
session state podataka.
13
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
Dva način aza čuvanje session ID-a
-Podrazumjevano, ASP.NET koristi cookie-based session tracking za čuvanje korisničke sesije.
Ovo ne radi na pretraživačima koji ne podržavaju cookies.
-Kod cookieless session tracking-a, session ID je kodiran kao dio URL-a, tako da ovaj metod radi
na pretraživačima koji ne podržavaju cookies. Medjutim, ovaj način je niskog bezbjednosnog nivoa, s
obzirom da korisnik vidi session ID u URL adresi. Pored toga, ograničen je i kod procedura
Response.Redirect, Response.RedirectPermanent i Server.Transfer kojima se prosledjuje URL. Zbog ovih
razliga, većina programera ne koristi cookiless session.
Primjena View State-a
U većini slučajeva view state radi automatski. Dizajniran je da automatski čuva osobine stranica i
kontrola kroz round trip. Takodje možemo dodavati i svoje podatke u view state. S obzirom da su ovi
podaci sačuvani kao objekat, prije učitavanja prvo se vrši konverzija u odgovarajući tip promjenjive.
View state čuva podatke u HTML stream-u koji se prosledjuje pretraživaču po zahtjevu stranice. Ovi
podaci se smještaju u polje koje se ne vidi u pretraživaču, a koje se zove _VIEWSTATE. Polje se
automatski prosledjuje serveru. View state se koristi za čuvanje svojstava forme i kontrola koje su
promjenjene u kodu. Na primjer, kada jednom popunimo drop-down listu iz koda, svaki sledeći put se
popunjava iz view state-a.
EnableViewState je svojsto stranice koje odredjuje da li koristiti view state, ili ne. Ovo svojstvo
podrazumjevano je uključeno, medjutim može se isključiti po potrebi. Prvo, da bi smo unapredili
performanse, kada view state zauzme previše memorije. Drugo, ako promjenimo vrednost kontrole u
kodu, ali zelimo prilikom inicijalizacije početnu vrednost. Treće, kada stranica ne poziva samu sebe. U
praksi, view state se isključuje kada primjetimo problem sa performansima.
U ranijim verzijama od ASP.NET 4, nije bilo moguće onesposobiti view state za pojedine
kontrole. ASP.NET 4 ovo omogućava primjenom osobine ViewStateMode. Da bi ViewStateMode radio,
potrebno je osposobiti EnableViewState svojstvo stranice.
Treba napomenuti da koristimo session state umjesto view state-a, kako bi smo sačuvali podatke.
Pored toga, view state se koristi za smještanje male količine podataka.
Session state prosledjuje samo sessionID preko pretraživača, tako da ne usporava vreme zahtjeva.
Ovaj objekat koristi memoriju na serveru, što znači da može usporiti performanse na serverskoj strani.
Kako bi smo radili sa podacima u session state-u, koristimo HttpSessionState klasu. Za pristupanje
session state-u iz koda forme, koristimo Session. Da bi smo pristupili iz klase koja nije dio forme,
koristimo HttpContext klasu da dobijemo HttpContext objekat. Nakon toga koristimo Session svojstvo da
dobijemo session state objekat.
Izraz za dodavanje i ažuriranje view state vrednosti:
ViewState.Add("VremenskiPecat", DateTime.Now);
Drugi način za dodavanje i ažuriranje view state vrednosti:
ViewState["VremenskiPecat"] = DateTime.Now;
Izraz za čitanje vrednosti iz view state-a:
DateTime vremenskiPecat = (DateTime)ViewState["VremenskiPecat"];
Izraz za uklanjanje vrednosti iz view state-a:
ViewState.Remove("VremenskiPecat");
14
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
Application state podaci i dogadjaji
Tehnike za dodavanje i očitavanje vrednosti iz application state-a slični su session state-u. Glavna
razlika je u svojstvu Application koje pristupa application state-u iz code-behind fajla, ili uz pomoć
objekta HttpContext koji pristupa application state-u izvan koda stranice.
Kada radimo sa application state podacima, prilikom ažuriranja stanja, potrebno je zaključati
application state. Ovo možemo ilustrovati na primjeru izvršavanja funkcije za brojanje. Application state
je zaključan prije nego funkcija za brojanje očita podatak. Nakon ažuriranja podataka, application state se
otključava. Da bismo smanjili vreme proteklo od zaključvanja do otključavanja stanja, potrebno je
napisati funkciju koja se brzo izvršava.
Ako ne bi zaključali application state prilikom ažuriranja vrednosti, više korisnika bi moglo
očitati vrednost u isto vreme. Da bi smo ilustrovali zašto je ovo problem, vratimo se na funkciju za
brojanje. Pretpostavimo da tri korisnika pozivaju funkciju za brojanje u isto vreme, čija je vrednost npr.
11. Kod svih bi bio isti rezultat 12 umjesto 14, koliko bi trebao izbrojati poslednji izvršilac funkcije.
Četiri glavna dogadjaja aplikacije su: Application_Start, Application_End, Session_Start i
Session_End. Realizaciju navedenih procedura prikazaćemo u sledećem primjeru:
slika br.11 – primjena dogadjaja web aplikacije
15
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
2.2. Cookies
Kao što smo već napomenuli, view state smješten je u nevidljivo polje koje se prosledjuje
pretraživaču. Medjutim, view state je prvi od tri načina upravljanja sa stanjem. Druga dva su cookies i
URL kodiranje.
Cookie se nalazi na klijentskoj strani. Web aplikacije prosledjuju kukije izmedju pretraživača i
servera preko HTTP response/request-a. Da bi smo kreirali cookie, instanciramo objekat iz klase
HttpCookie. Session cookie smješten je u memoriji pretraživača, jer traje koliko i sesija. Izmedju ostalog
služe da čuvaju session Id. Persistent cookies se čuvaju na disku, tako da postoje i po završetku sesije.
Ova vrsta kukija identifikuje svakog korisnika, čuva personalizovane detalje stranice korisnika i sl. Kada
koristimo persistent cookie, potrebno je naznačiti datum do kada će važiti cookie.
Kada koristimo kukije, trebamo voditi računa da korisnici mogu iskljuciti funkciju cookies na
svojim pretraživačima. U ovom slučaju, neće biti sačuvani na računar. ASP.NET ne pruža mogućnost
provjere da li je korisnik onesposobio cookies, tako da je potrebno upozoriti korisnika da ih osposobi.
Primjena
Klasa HttpCookieCollection sadrži niz HttpCookie objekata.
Rad sa cookies realizujemo preko dvije instance klase HttpCookieCollection. Prva sadrži
kolekciju koja se šalje od servera prema klijentu. Pristupamo ovoj kolekciji pomoću Cookies metode iz
HttpRequest objekta. Druga kolekcija koristi Cookies metodu iz HttpResponse objekta.
Pomoću metode Add dodajemo cookie u kolekciju. Očitavanje vrednosti iz cookie, vršimo
pomoću metode Value. Da bi smo izbrisali cookie, kreiramo cookie sa istim imenom, a u Expires svojstvo
unesemo datum iz prošlisti. Na ovaj način pretraživač pregazi postojeći cookie, a sistem detektuje cookie
kojem je datum istekao, te ga izbriše.
svojstvo
opis
Item(naziv)
Count
Cookie odredjenog naziva. (Ovo je podrazumjevano svojstvo
HttpCookieCollection klase, tako da možemo izostaviti naziv
prilikom očitavanja vrednosti cookie-a.)
Broj cookie-a u kolekciji.
metoda
opis
Add(naziv, vrednost)
Clear()
Remove(naziv)
Dodavanje cookie-a u kolekciju.
Brisanje svih cookie-a iz kolekcije.
Brisanje cookie-a odredjenog naziva iz kolekcije.
slika br.12 – osnovna svojstva i metode HttpCookieCollection klase
Procedura za kreiranje kukija i dodavanje istog u HttpResponse objekat:
private void DodajCookie()
{
HttpCookie mojCookie = new HttpCookie("ImeKorisnika", this.txtImeKorisnika.Text);
mojCookie.Expires = DateTime.Now.AddYears(1);
Response.Cookies.Add(mojCookie);
}
16
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
Procedura za očitavanje vrednosti kukija iz HttpRequest objekta:
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
if(Request.Cookies["ImeKorisnika"] != null)
{
lblImeKorisnika.Text = "Dobrodošao" +
Request.Cookies["ImeKorisnika"].Value + ".";
}
}
}
Procedura za brisanje postojećeg kukija:
private void IzbrisiCookie()
{
HttpCookie mojCookie = new HttpCookie("ImeKorisnika");
mojCookie.Expires = DateTime.Now.AddSeconds(-1);
Response.Cookies.Add(mojCookie);
}
2.3. URL kodiranje
URL encoding realizuje drugi način čuvanja stanja. Ovi podaci smješteni su u query string koji se
dodaje na kraj URL-a. Ovaj način je najčešće primjenjivan u sajtovima za pretragu i trgovinu, kao što su
Google (www.google.com), Ebay (www.ebay.com) i Amazon (www.amazon.com).
Sledeći primjer pokazuje dva URL-a koji sadrže parametre.
Dva URLa sa parametrima:
Kupovina.aspx?korisnik=1244
Kupovina.aspx?artikal=423&cijena=35
Kao što vidimo, query string počinje od upitnika (?). Sadrži naziv atributa i koristi znak & (and) ako ima
vise atributa. Nakon znaka jednakosti nalazi se vrednost atributa.
U mnogim slučajevima koristićemo query stringove sa hyperlink-ovima, ancor elementima, za
prosledjivanje podataka prilikom prelaska sa jedne stranice na drugu. U nastavku je prikazano nekoliko
primjera primjene URL adrese sa atributima.
Primjer hyperlink-a sa URL adreskom koja sadrži query string:
<asp:HyperLink ID="HyperLink1" runat="server"
NavigateUrl="~/Korpa.aspx?idartikal=12&amp;cijena=4">dodaj</asp:HyperLink>
Izraz koji očitava vrednosti iz query string-a:
string idArtikal = Request.QueryString["idartikal"];
Primjer koda koji koristi query string pri otvaranju nove stranice:
Response.Redirect("Korpa.aspx?idartikal=" + idArtikal);
Za očitavanje vrednosti iz query stringa, koristimo QueryString metodu iz Request objekta, kao što je
prikazano na gornjem primjeru.
17
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
Različiti pretraživači omogućavaju različit broj karaktera u query stringu i ukupan broj karaktera
u URL-u. Uglavnom ova ograničenja se kreću oko 2000 karaktera.
Primjena jednog načina čuvanja podataka ne isključuje ostale. Često ćemo koristiti više načina u
istoj aplikaciji, zavisno od potrebe.
3. Razvoj ASP.NET aplikacija
3.1. Zahtjevi
Na računaru potrebno je imati instaliran jedan od operativnih sistema kao što su Windows XP, Vista ili
Windows 7, Microsoft .NET Framework 4, i pretraživač kao što je Microsoft Internet Explorer. Pored
navedenoga, potrebno je instalirati i Visual Studio 2010 u koliko želimo koristiti sve prednosti
integrisanog razvojnog okruženja Integrated Development Environment (IDE).
Većina ASP.NET aplikacija koristi bazu podataka, i u tome slučaju potrebno je instalirati
Microsoft SQL Server. Za razvoj na lokalnoj mašini, koristimo SQL Server 2008 Express Edition, koji je
skraćena verzija SQL Server-a, i dolazi u paketu sa Visual Studio 2010. Medjutim, za komercijalnu
upotrebu koristi se SQL Server instaliran na serverskom računaru.
Kada razvijamo komercijalnu aplikaciju, potrebno je instalirati više popularnih pretraživača kao
što su Mozilla, Firefox i Chrome. U ovom slučaju testiramo funkcionalnost aplikacije na različitim
pretraživačima.
Visual Studio takodje sadrži više izdanja. Većina profesionalnih programera koristi Professional
Edition ili Premium Edition. Veliki razvojni timovi kotiste Ultimate Edition, koja uključuje alate
dizajnirane za specijalizovane timove, kao što su arhitekti, istraživači i testeri.
Besplatna alternativa je Express Edition. Ovo izdanje proizvoda namjenjeno je individualnim
programerima, studentima i hobistima.
Klijent
Server
Windows XP ili noviji
Microsoft .NET Framework 4
pretraživač kao Internet Explorer (6.0 ili noviji)
Visual Studio 2010
Windows Server 2003 ili noviji
Microsoft .NET Framework 4
Internet Information Services 6.0 ili noviji
Microsoft SQL Server ili slična baza podataka
slika br.13 – pretpostavke za razvoj ASP.NET 4 aplikacija
izdanje
opis
Visual Web Developer 2010 Express Edition
Besplatna edicija za web razvoj u Visual Basic ili C#.
Sadrži Express izdanje od SQL Server-a koja se zove
SQL Server 2008 Express
Namjenjen pojedinačnim programerima aplikacija kojima
je na raspolaganju široka lepeza solucija: Windows, Web,
Mobile i Office.
Namjenjen pojedincima i timovima za složenije
aplikacije. Sadrži alat za testiranje, razvoj baze podataka,
change-management alat i osnovni alat za lifecycle
management.
Namjenjen timovima i uključuje potpuno testiranje,
modeliranje, baze podataka i lifecycle menadžment.
Visual Studio 2010 Professional Edition
Visual Studio 2010 Premium Edition
Visual Studio 2010 Ultimate Edition
slika br.14 – Visual Studio 2010 izdanja
18
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
3.2. Komponente .NET Framework radnog okruženja
Framework je podjeljen u dvije glavne komponente, .NET Framework Class Library i Common
Language Runtime. Ove komponente sadrže osnovne servise za aplikacije napisane u jednom od .NET
jezika kao što su Visual Basic ili C#.
.NET Framework Class Library sadrži klase koje realizuju osnovne funkcije za razvoj .NET
aplikacija. Na primjer, ASP.NET klase se koriste za razvoj ASP.NET web aplikacija, a Windows Forms
klase se koriste za razvoj standardnih Windows aplikacija. Ostale klase omogućavaju rad sa bazama
podataka, upravljanje bezbjednosti, pristup fajlovima i mnoge druge funkcije.
Klase unutar .NET Framework Class Library su organizovane po hierarhijskoj strukturi. Unutar te
strukture, klase sa sličnim namjenama su rasporedjene u grupe koje se zovu namespaces. Svaki
namespace sadrži klase koje se koriste za odredjenu funkciju. Na primjer, System.Web namespace sadrži
klase koje se koriste kod kreiranja ASP.NET web aplikacije, a System.Data namespace za pristup
podacima iz baze podataka.
Common Language Runtime ili CLR, realizuje servise koji su potrebni za izvršavanje aplikacija
napisanih u .NET jeziku. Na ovaj način, svi .NET jezici se kompajliraju u common Intermediate
Language ili IL. CLR takodje sadrži Common Type System koji definiše tipove podataka korišćenih u
svim .NET jezicima. Na ovaj način koristimo iste tipove podataka bez obzira koji .NET jezik koristimo za
razvoj aplikacije.
Da bi smo pokrenuli ASP.NET aplikaciju, web server mora imati instalirano .NET Framework
radno okruženje. Sa druge strane, klijentov računar koji pristupa web serveru ne mora imati instaliran
.NET Framework. Umjesto toga, klijentov računar koristi bilo koji operativni sistem sa novijom verzijom
web pretraživača.
slika br.15 – .NET Framework radno okruženje
19
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
3.3. Tri okruženja za razvoj ASP.NET aplikacija
Slika br.16 pokazuje tri osnovna načina razvojnog okruženja za kodiranje i testiranje ASP.NET
aplikacija. Svaka instalacija ima svojih prednosti i nedostataka. Okruženje koje ćemo izabrati zavisi od
razvojnih potreba i resursa koji nam stoje na raspolaganju.
Najprostije razvojno okruženje je standalone environment. U ovom slučaju jedan računar je u isto
vreme i klijent i server. Iz tog razloga, potrebno je instalirati operativni sistem koji podržava ASP.NET
razvoj aplikacija, i mora imati instaliran .NET Framework i Visual Studio 2010. VS 2010 sadrži u sebi
development server za lokalno testiranje, zbog čega nije potrebno instalirati IIS kod standalone
environment. Osim navedenog Visual Studio sadrži i SQL Server 2008 Express Edition (SQL Server
Express), te nije potrebna posebna instalacija programa za baze podataka. Studija slučaja koja prati
diplomski rad koristi ovakvo razvojno okruženje.
Druga vrsta razvojnog okruženja sadrži razdvojene klijent-server računare, koji su povezani
lokalnom mrežom local area network. Na klijentovom računaru je instaliran Windows, .NET Framework
i Visual Studio 2010, dok je na serveru Windows Server sa .NET Framework, IIS. IIS sadrži servise
preko kojih Visual Studio komunicira sa web sajtom na udaljenom računaru (remote computer).U ovom
slučaju udaljeni računar je na lokalnoj mreži. Pored navedenoga, server sadrži i SQL Server koji
omogućava pristup bazi podataka. Sa ovakvim radnim okruženjem, više programera može da radi na istoj
aplikaciji, ali u istoj mrežnoj grupi.
Kod trećeg razvojnog okruženja, klijentov računar je povezan sa serverom preko Interneta. Ovo
omogućava rad sa web sajtom koji je podignut na udaljenom serverskom računaru. Ovakvo okruženje
zahtjeva FTP server, koji se koristi za kopiranje fajlova web sajta izmedju klijentskog računara i servera.
FTP server koristi File Transfer Protocol (FTP) da omogući operacije kopiranja, a IIS može se
konfigurisati da radi kao FTP server isto kao i web server. Na ovaj način korisnici sa udaljenih računara
mogu da pristupaju serveru preko FTP-a.
slika br.16 – tri vrste razvojnog okruženja
20
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
3.4. Kompajliranje ASP.NET aplikacija
U narednih pet koraka opisaćemo šta se dogadja kada se pozove ASP.NET stranica:
1. ASP.NET runtime obradjuje .aspx fajl od zatražene stranice i kreira parcijalnu klasu (Korpa)
koja sadrži deklaracije forme i kontrola koje se nalaze u njoj. Pored parcijalne klase, kreira i klasu
(Korpa_aspx) koja sadrži kod koji incijalizuje formu, kreira kontrole i generiše HTML web stranice.
2. C# kompajler kompajlira parcijalnu klasu koja sadrži deklaracije kontrola, zajedno sa
parcijalnom klasom koja sadrži kod forme, u jedan assembly (.dll). Ova biblioteka realizuje sve dogadjaje
koji se nalaze na stranici.
3. C# kompajler kompajlira Korpa_aspx klasu, koja nasledjuje prethodnu kompajliranu klasu
(Korpa), u assembly koji se izvršava prilikom pozivanja stranice.
4. U koliko je potrebno, C# kompajler kompajlira druge klase koje su smještene u App_Code
folderu. Ove klase su kompajlirane u jedan assembly. U našem primjeru, KorpaArtikal, KorpaArtikli,
ArtikalBaza, Artikal i Parametri klase se kompajliraju u jedan assembly.
5. Nakon kompajliranja svih fajlova u jedan assembly, ASP.NET kreira instancu stranice i
izvršava odredjene procedure. Ove procedure kreiraju HTML dokument koji se šalje klijentu.
Prva četiri koraka se izvršavaju samo jednom po pozivu stranice. Ovo iz razloga što ASP.NET
zadržava biblioteke koje se ponovo koriste, tako da nema potrebe za novim kompajliranjem. Samo kada
se izmjeni izvorni kod, tada se vrši automatsko rekompajliranje.
Podrazumjevani naziv web forme koju dodajemo u web sajt jeste Default.aspx, a naziv klase od koda te
stranice jeste _Default.
slika br.17 – kompajliranje ASP.NET aplikacije
21
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
3.5. Flow layout
Flow layout je podrazumjevani način rada web formi u Visual Studio 2010. Ovo znači da su tekst
i kontrole koje se dodaju na formu, složene od lijevo prema desno, i od gore prema dole. Zbog toga,
pozicije kontrola i teksta se mjenjaju u zavisnosti od pretraživača i rezolucije prikaza.Radi lakšeg rada sa
formom u dizajn prikazu, Visual Studio omogućava djeljenje radne površine na više cjelina koje se
definišu div tagovima. Razmak u aspx fajlu se obilježava sa tagom &nbsp, a novi red sa <br /> tagom.
Tekst se upisuje direktno preko dizajnera. Ovako upisani tekst se formatira pomoću palete alata, a
omogućava promjenu fonta, veličine slova, podvlačenje teksta, odredjivanje boje slova i pozadine.
Formatiranjem teksta, Visual Studio kreira klasu style class sa odredjenim nazivom. Na ovaj
način možemo formatirati bilo koju grupu teksta na isti način, referenciranjem style klase.
Da bismo poravnali tekst i kontrole u flow layout-u, koristimo HTML tabelu. U tabeli je moguče
mjenjati širinu, visinu, dodavati ili spajati kolone i redove i slično.
slika br.18 – Toolbar za formatiranje teksta
3.6. Kontrole za validaciju korisničkog unosa
Kontrole za validaciju su tip ASP.NET kontrola koje se koriste da provjere korisnički unos
podataka prije nego što se obradi. Required field validator obično se koristi kod text box kontrola, ali se
može koristiti i kod list kontrola. Range validator provjerava da li je korisnik izvršio unos u
odgovarajucem rangu. Required field se povezuje sa kontrolama koje imaju obavezan unos. Ove kontrole
nisu vidljive u runtime-u. Vidi se samo kontrola za prikaz greške, u koliko greška postoji.
U slučaju koji je prikazan na slici, kod prvog zahtjevanog polja se provjerava da li je vrednost
unešena, da li je vrednost u rangu izmedju 1 i 100. Validacija se izvršava na klijentskoj strani prije nego
se podaci proslede serveru na izvršavanje. To znači da server ne vraća informacije o grešci u polje za
prikaz grešaka, u koliko dodje do greške.
U većini slučajeva, validacija na strani klijenta se izvršava kada se ukloni fokus sa kontrole. Ovo
se dogadja kada korisnik pritisne Tab dugme na tastaturi, klikne mišem na drugu kontrolu ili pritisne
dugme čije je svojstvo CausesValidation = True.
Da bi se mogla izvršiti validacija na klijentskoj strani, potrebno je da pretraživač podržava
Dynamic HTML ili DHTML. Većina pretraživača podržava DHTML. Pored ovoga, validacija se izvršava i
na serveru kada se pozove stranica. ASP.NET obradjuje validaciju odmah po inicijalizaciji stranice.
22
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
slika br.19 – Required i Range kontrole za validaciju
3.7. Pregled HTML sadržaja poslanog pretraživaču
Da bismo vidjeli HTML kod stranice koju prikazuje pretraživač, koristimo dugme Source na
meniju pretraživača. Slika br.20 prikazuje HTML kod poslan pretraživaču nakon odabira vrednosi u dropdown listi, unošenjem vrednosti u text box-ove i odabira Calculate dugmeta. Ovdje možemo vidjeti šta se
dogadja iza scene.
Prvo, kod ne sadrži asp tagove. Ovo iz razloga što su tagovi prevedeni u HTML, kako bi ih
pretraživač mogao prikazati. Na primjer, asp tag od drop-down liste je preveden u HTML select tag.
Drugo, vidimo view state podatke koji su smješteni u nevidljivo polje za unos, koje se zove
_VIEWSTATE. Sadržaj polja je kriptovan, tako da nije čitljiv. S obzirom da se podaci view state-a
prosledjuju od i prema pretraživaču automatski, nema potrebe za prosledjivanjem iz koda.
Treće, možemo vidjeti da je podatak o tome šta je selektovano u drop-down listi prikazan u
HTML-u. Pored ovoga tekst koji je uneo korisnik, takodje se prosledjuje u HTML-u. Iz ovoga možemo
zaključiti da nam nije potreban view state kako bi smo sačuvali podatke korisničkog unosa. Umjesto toga,
view state se koristi da sačuva vrednosti koje su učitane u drop-down listu prvi put po korisničkom
zahtjevu forme.
HTML je generisan automatski od strane ASP.NET, tako da nemoramo brinuti o tome. Uz pomoć
Visual Studio-a razvijamo aplikacije u kojima je dio posla uradjen za nas.
slika br.20 – Slika view state
23
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
slika br.21 – Drop-down list i Selected value
3.8. Fajlovi i folderi koji se koriste u aplikaciji za online prodaju
Visual Studio 2010 podrazumjevano kreira web stranice na izvornom (root) folderu, dok se drugi
fajlovi koje koristi aplikacija, smještaju u posebne foldere. Na slici su pokazani rezervisani folderi. Pored
ovih možemo kreirati i vlastite foldere. Na primjer, obično se kreira Slike folder da bismo smjestili
grafičke fajlove koje koristi aplikacija.
App_Code, App_Data, App_Themes i Bin folderi se koriste za smještanje posebnih tipova fajlova
koje koristi aplikacija. Na primjer, fajlovi klasa (osim klasa web stranica) su smješteni u App_Code
folder, a fajlovi baza podataka su smješteni u App_Data folder. App_Themes folder se koristi za čuvanje
različitih tema sajta. Bin folder se koristi za smještanje kompajliranih biblioteka, kao što su biblioteke
klase koje koristi aplikacija.
Rezervisani folderi nisu dostupni aplikaciji za uobičajene potrebe. Na primjer, ne možemo
smjetiti fajl sliku u App_Data folder a onda je referencirati preko ImageUrl-a. App_Data folder se koristi
isključivo za čuvanje baze podataka.
Pored navedenih fajlova, web.config se dodaje automatski na root i sadrži parametre za cjelu
aplikaciju. Web.config može se nalaziti u svim folderima. Za razliku od fajla na root-u, ostali služe web
formama samo u folderima u kojima se nalaze.
folder
opis
App_Code
App_Data
App_Theme
Bin
Fajlovi klasa koji se kompajliraju u jedan assembly.
Baze podataka.
Teme aplikacije
Kompajliran kod kojeg koristi aplikacija.
slika br.23 – rezervisani folderi koje koristi ASP.NET aplikacija
24
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
slika br.22 – Solution Explorer aplikacije Web prodavnica
3.9. Master stranice
Master page je stranica koja pored svog sadržaja, prikazuje sadržaj iz drugih stranica. Služi za
prikazivanje banner-a, menija i drugih elemenata koji se nalaze na svim stranicama aplikacije.
Slika br.24 prikazuje kako rade master stranice. Kao što vidimo, sadržaj koji se šalje pretraživaču
kombinovan je sa master i content page stranicom. Content stranica sadrži elemente koji su jedinstveni za
svaku stranicu, dok master stranica sadrži elemente koji su zajednički za sve. U našem primjeru master
stranica (Site.master) sadrži banner na vrhu, navigaciju na lijevoj strani i content placeholder koji
prikazuje sadržaj drugih stranica.
Master stranica podrazumjevano sadrži dva placeholder-a. Jedan u head elementu, a drugi u form
elementu. Moguće je dodati više placeholder-a po potrebi uz pomoć kontrole ContentPlaceHolder.
Aplikacija može da sadrži više master stranica. Na svakoj content stranici se pojedinačno
odredjuje kojoj master stranicu pripada. Ovo nam omogućava da aplikacija ima više različitih kategorija
sa različitim izgledom. Na primjer, možemo koristiti jednu master stranicu za svecontent stranice internet
prodavnice, a drugu za korisnički servis. Fajl .aspx za master stranicu ima ekstenziju .master. Prateći
code-behind fajl koristi .master.cs. Naziv content stranice koji se naznači u Title atributu podrazumjevano
pregazi onaj u master stranici. Na ovaj način, svaka stranica ima svoj natpis. Medjutim, u koliko želimo
isti natpis za svaku stranicu, popunimo title atribut u master stranici, a izbrišemo u content stranici.
25
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
slika br.24 – web aplikacija sa master stranicom
Ugnježdene master stranice
U sadržaju content stranice, može da bude još jedna master stranica.
Kod ugradjenih stranica nested master pages, parent master page stranica obično se koristi za prikaz
elemenata koji se nalaze na svim stranicama sajta. Child master pages stranice koriste se za prikaz
elemenata odredjenih grupa sajta.
26
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
Pristup master stranici
Kontrolama na master stranici možemo pristupiti preko content srtranice. Ovo može biti slučaj
kada želimo korisniku prikazati koliko se artikala nalazi u korpi, dok pregleda proizvode. Najlakši način
za rad sa master kontrolom, jeste kreiranje javne funkcije sa get i set metodama.
3.10. Navigacija sajtom
ASP.NET site navigation kontrole za navigaciju sajta omogućavaju korisnicima jednostavno
kretanje kroz stranice. Za implementaciju koristi se SiteMapDataSource kontrola i tri kontrole za
navigaciju: TreeView, Menu i SiteMapPath.
TreeView kontrola prikazuje stranice sajta u obliku drveta, slično onom u Internet Exploreru za
pregled foldera. Korisnik klikom na znak + ili – širi ili skuplja stranice nižeg nivoa. Ova kontrola je
korisna kada želimo dati korisniku na uvid sve stranice sajta.
Menu kontrola kreira dinamički meni koji širi sadržaj prelaskom miša preko odredjene stavke na
meniju.
TreeView i Menu kontrole se koriste zajedno sa SiteMapDataSource kontrolom, koja popunjava
kontrole za navigaciju podacima iz fajla web.sitemap. Ovaj fajl sadrži XML koji definiše strukturu
stranica.
U većini slučajeva kontrole za navigaciju se nalaze u master stranici koja omogućava dostupnost
menija na svim content stranicama. Kod sajtova sa velikim brojem stranica, obično kreiramo podjeljene
Site Map fajlove koji se učitavaju u TreeView kontrolu.
3.10.1. web.sitemap fajl
Da bi smo koristili kontrole za navigaciju sajtom, moramo kreirati web.sitemap fajl na početnom
direktorijumu sajta. Ovaj fajl koristi XML tagove kako bi prikazao hierarhijsku strukturu stranica
aplikacije. Web.sitemap sadrži dva tipa XML elemenata: siteMap i siteMapNode. SiteMap element je
izvorni element XML fajla, i može se pojaviti samo jednom.
Pored ovoga kreiramo siteMapNode za svaku stranicu web sajta koju želimo prikazati u kontroli
za navigaciju. Ovo znači da nije obavezno navesti sve stranice na sajtu, već samo one koje želimo staviti
korisniku na raspolaganje. U siteMapNode elementu odredjujemo URL stranice, title stranice koji se
prikazuje na meniju i description kao opis stranice. siteMapNode elementi moraju da sadrže jedinstveni
URL.
Za prikaz menija po hierarhijskoj strukturi, koristimo siteMapNode elemente. Web.sitemap može
da sadrži samo jedan siteMapNode najvišeg nivoa. Elementi nižeg nivoa nalaze se izmedju početnog i
završnog taga početnog elementa. Tako, na primjer, siteMapNode elementi za Asortiman.aspx,
Korpa.aspx i Narudzba.aspx nalaze se izmedju tagova Kupovina.aspx stranice.
atribut
opis
Url
Adresa stranice. Svaki siteMapNode mora sadržati jedinstvenu
vrednost.
Tekst koji se prikazuje u meniju za stranicu.
Tool tip tekst (opis) stranice
Title
Description
slika br.25 – atributi siteMapNode elementa
27
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
web.sitemap fajl:
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode url="Default.aspx" title="Početna"
description="Početna stranica.">
<siteMapNode url="Asortiman.aspx" title="Asortiman"
description="Pregled svih artikala.">
<siteMapNode url="Korpa.aspx" title="Vaša korpa"
description="Artikli u korpi.">
</siteMapNode>
<siteMapNode url="Onama.aspx" title="O nama"
description="O nama. Kontakt podaci">
</siteMapNode>
</siteMapNode>
</siteMapNode>
</siteMap>
slika br.26 – TreeView kontrola
Aspx kod TreeView kontrole prikazane na slici iznad:
<asp:TreeView ID="TreeView1" runat="server" DataSourceID="SiteMapDataSource1">
</asp:TreeView>
3.11. Teme
Prilikom izrade web sajta, nastojimo zadržati konzistentno formatirnje stranica cjele aplikacije,
tako da stranice imaju sličan izgled. S druge strane, dobra praksa programiranja nam nalaže odvajanje
dizajna od koda, kada god je to moguće. Na ovaj način dizajneri se fokusiraju na izgled sajta, a
programeri na funkcionalnost.
Da bi ovakav način rada bio što jednostavniji, ASP.NET sadrži alat pod nazivom themeskoji
realizuje gore navedeni način formatiranja primjenom cascading style sheets (CSS). Ovaj alat omogućava
izradu više različitih tema za web sajt, i lako prelaženje sa jedne teme na drugu. Po potrebi moguće je iz
koda vršiti prelaz izmedju tema.
Kod rada sa standardnim HTML-om, ustaljena praksa je da se podaci vezani za formatiranje
smjeste u eksterni fajl koji se zove style sheet. Tada možemo dodjeljivati ovaj fajl svim stranicama
aplikacije. Ovakav način funkcioniše za HTML elemente, medjutim malo težeje povezati sa ASP.NET
server kontrolama. Rešenje za ovaj problem jeste u themes, koji omogućava formatiranje HTML
elemenata i server kontrola.
28
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
slika br.27 – Asortiman stranica bez teme
slika br.28 – Asortiman stranica sa odabranom temom
29
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
Da bi smo radili sa temama, u Solution Explorer-u kreiramo folder App_Themes. Ovaj
direktorijum može da sadrži više poddirektorijuma. Svaki poddirektorijum predstavlja zasebnu temu.
Svaki folder može da sadrži fajlove od style sheet (CSS), fajlove koji definišu izgled ASP.NET server
kontrola, slike i ostali fajlovi koji se koriste u formatiranju.
Postoje dvije vrste tema, style sheet themes i customization themes. Razlika je u vremenu učitavanja. Kod
customization theme, stil se učitava posle svih stilova koji se nalaze izvan teme. Zbog ovoga, nije moguće
pregaziti stil definisan customization temom.
Sa druge strane style sheet theme se učitava prije eksternih stilova i onih koji su definisani za
pojedinačnu kontrolu. Ovo znači da je moguće pregaziti stil definisan style sheet temom.
slika br.29 – Struktura teme u App_Themes direktorijumu
3.11.1. Skin fajl
Podrazumjevani skin fajl ne sadrži SkinID atribut, i koriste ga sve kontrole istog tipa, koje
nemaju definisan SkinID. Sa druge strane pojedinim kontrolama možemo definisati SkinID koji upućuje
na skin sa istim ID-om. Komentarisanje u skin fajlu vršimo pomoću <%-- i --%> tagova.
Skin fajl koji definiše podrazumjevani izgled Label-a i Label odredjenog naziva:
<asp:Label
runat="server"
<asp:Label
runat="server"
SkinID="Error" />
ForeColor="#000066" />
ForeColor="#FF0000"
Label kontrola koja koristi podrazumjevani skin:
<asp:Label ID="Label1" runat="server" Text="odaberi artikal:"></asp:Label>
Label kontrola koja koristi odredjeni skin:
<asp:Label ID="lblPoruka" runat="server" SkinID=”Error”></asp:Label>
30
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
Drugi način rada sa skin fajlom
Gore navedeni primjer koristi jedan skin fajl za sve kontrole. Medjutim, moguće ih je podjeliti u
više fajlova. Ovo zavisi od koncepcije i broja skinova koji se koriste u aplikaciji. Ako imamo veliki broj
skinova za različite tipove kontrola, lakše ih je organizovati u različite fajlove, koji će sadržati samo
odredjeni tip kontrole. Na ovaj način lakše je pronaći odredjeni skin, kopirati ga u drugu aplikaciju i sl.Sa
druge strane prevelik broj skinova, može dovesti do poteškoća oko organizovanja fajlova.
slika br.30 – tema sa više .skin fajlova
3.11.2. Odabir teme
Kod customization theme, možemo učitati temu za cjelu aplikaciju, samo za odredjenu stranicu,
ili pojedinačnu kontrolu. Da bi smo dodali temu za cjelu aplikaciju, dodajemo page element u system.web
elementu, web.config fajla kao što je prikazano na šemi ispod.
Izbor teme za sve stranice aplikacije u web.config fajlu:
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0"/>
<pages styleSheetTheme="Tema1"/>
</system.web>
</configuration>
Da bi smo odredili temu samo za odredjenu stranicu, koristimo Theme atribut stranice
Izbor teme u dizajnu (design time):
<%@ Page Language="C#" Theme="Tema1" MasterPageFile="~/Site.master" AutoEventWireup="true"
CodeFile="Asortiman.aspx.cs" Inherits="Asortiman" %>
Izbor teme u izvršnom modu (runtime):
this.Theme = Session["Tema"].ToString();
Kontroli kojoj želimo odrediti temu, dodajemo atribut SkinID, i to:
u dizajnu:
<asp:Label ID="lblMessage" SkinID="Poruka" runat="server" EnableViewState="False"></asp:Label>
31
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
u izvršnom modu:
lblPoruka.SkinID = "mojSkinID";
Odredjivanje tema stranice i kontrole moguće je izvršiti iz koda u runime-u, kao što je prikazano
na šemama iznad. Potrebno je da se kod nalazi u PreInit proceduri koja se izvršava prije kreiranja
kontrola, kako bi se mogle foramtirati.
Kako smo dodali, tako možemo i ukloniti teme na aplikaciji, stranici ili pojedinačnoj kontroli. Za
uklanjanje customization theme iz cjele aplikacije, koristimo prazan string umjesto naziva teme. Isto važi
i za uklanjanje customization theme sa stranice. EnableTheming atribut kontrole se koristi kada želimo
isključiti formatiranje odredjene kontrole, postavljanjem vrednosti na False. Ukljanjanje teme iz runtimea vršimo iz procedure PreInit, kao što je prikazano na sledećoj šemi.
Uklanjanje teme na svim stranicama aplikacije:
u dizajnu:
<pages styleSheetTheme=""/>
Uklanjanje teme na odredjenoj stranici:
u dizajnu:
<%@ Page Language="C#" Theme="" MasterPageFile="~/Site.master" AutoEventWireup="true"
CodeFile="Asortiman.aspx.cs" Inherits="Asortiman" %>
u izvršnom modu:
protected override void OnPreInit(EventArgs e)
{
this.Theme = "";
}
Uklanjanje teme sa odredjene kontrole:
u dizajnu:
<asp:Label ID="lblFakultet" SkinID="" runat="server"
Text="Univerzitet Sinergija - Poslovna informatika"></asp:Label>
u izvršnom modu:
protected override void OnPreInit(EventArgs e)
{
lblFakultet.SkinID = "";
}
32
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
4. Rad sa bazama podataka
Relacione baze podataka koriste tabele za smještanje i manipulaciju podataka. Svaka tabela sadrži
jedan ili više zapisa ili redova (records ili rows) koji sadrže različite podatke. Svaki red sadrži jednu ili
više polja ili kolona (fields ili columns) koje čuvaju po jedan podatak.
Većina tabela sadrži primarni ključ primary key koji jedinstveno označava svaki zapis u tabeli.
Primarni ključ često se sastoji od jedne kolone, ali može da se sastoji i od dvije ili više kolona. Kada
primarni ključ koristi dvije ili više kolona, zove se composite primary key.
Pored primarnog ključa, koji je jedinstven za svaki red, SQL Server sadrži još jednu vrstu koja se
zove non-primary keys. Razlika je u tome što non-primary key može da sadrži Null vrednost, a primary
key ne.
Tabela može da sadrži jedan ili više indeksa index. Služe za brži pronalazak podataka, koji se
traže iz odredjene kolone. Indeksi se automatski kreiraju za svako polje koje ima atribut primary key ili
non-primary key.
slika br.31 – Tabela Artikal u ProdavnicaIgracaka bazi podataka
Povezivanje tabela
Tabele mogu biti povezane sa drugim tabelama preko odredjene kolone. Dvije tabele prikazane
ispod ilustruju ovaj koncept. Svaki zapis iz Kategorija tabele povezan je sa jednim ili više redova iz
Artikal tabele. Ova vrsta relacije se zove one-to-meny relationship.
Veza se uspostavlja preko primarnog ključa jedne tabele i spoljašnjeg ključa druge tabele foreign
key. SQL Server omogućava vezu izmedju unique key i foreign key.
One-to-meny relacija se najčešće koristi. Medjutim, dvije tabele mogu biti povezane i one-to-one
i meny-to-meny relacijama. Kod one-to-one relacije zapisi mogu biti u jednoj tabeli, zbog toga što samo
jedan zapis iz jedne tabele, odgovara samo jednom zapisu iz druge tabele.
33
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
Sa druge strane, meny-to-meny relacija se implementira pomoću srednje dodatne tabele, koja se
zove linking table i povezana je sa druge dvije tabele one-to-meny relacijom. Ovo znači da se relacija
meny-to-meny predstavlja sa dvije one-to-meny relacije.
slika br.32 – Relacije tabela
Kolone u tabeli
Kada kreiramo kolonu u tabeli, definišemo svojstva kolone. Najvažnija svojstva su naziv kolone
koje predstavlja identifikaciono ime kolone, zatim tip podatka koji definiše vrstu podataka koja će biti
smještena u kolonu. SQL Server omogućava izbor sistemskih tipova podataka, ili definisanje vlastitih
tipova poodataka koji se baziraju na sistemskim tipovima. Poželjno je odabrati odgovarajući tip podatka
kako bi smo smanjili iskorišćenost diska i unapredili performanse upita.
Pored navedenog, moramo navesti koja kolona može da sadrži vrednost null value. Null
predstavlja nepoznatu ili nedostupnu vrednost. Na primjer, kolona za sliku sadrži null ako slika nije
unešena.
Možemo takodje naznačiti podrazumjevanu vrednost kolone. Ovo je slučaj kada u SQL upitu ne
definišemo vrednost kolone. Tada se upisuje default vrednost. Ako kolona ne dozvoljava null vrednost, a
nije definisana default vrednost, nastaće greška i DBMS neće izvršiti upit.
Svaka tabela može sadržati numeričku kolonu čija vrednost se generiše automatski od Database
Management System-a DBMS. Ova kolona se obično koristi kao primary key.
Check constraint-om se definišu vrednosti prihvatljive za kolonu. Na primjer, možemo definisati
da cijena proizvoda mora biti veća od nula. Nakon što deklarišemo constraint-e u bazi, njima upravlja
DBMS. Kada, na primjer, korisnik pokuša dodati zapis koji krši pravila constraint-a, DBMS šalje
aplikaciji odgovarajuću poruku o grešci, i prekida dodavanje zapisa u bazu. Nakon toga program
obradjuje grešku. Dobra praksa jeste provjera zapisa iz programa prije nego se proslede serveru. Na ovaj
način povećavamo efikasnost programa.
34
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
slika br.33 – Server Explorer prozor za obradu tabele Artikal u dizajnu
4.1. SQL
SQL je standardni jezik za rad sa bazama podataka. Svaki DBMS ima sopstveni SQL dialekt.
Očitavanje podataka iz baze vršimo pomoću Select izraza, koji rezultat smješta u result table ili result set.
Rezultat može da sadrži izračunate kolone calculated columns, čij rezultat dobijamo iz drugih kolona. U
select izrazu se naznače nazivi kolona čiji rezultat zelimo. Ako želimo sve kolone, onda koristimo
zvjezdicu kao sto je prikazano ispod.
Select * From Products
Sintaksa Select izraza:
35
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
slika br.34 – Rezultat izvršavanja SELECT upita
Komanda join omogućava nam da kombinujemo dvije ili više tabela u jedan result set. Inner join je tip
join komande koja vraća zapise iz obje tabele samo ako su kolone iste.
Sintaksa za očitavanje zapisa iz više tabela:
Dodavanje, promjena i brisanje podataka iz tabele
Na primjeru ispod možemo vidjeti SQL sintaksu za Insert, Update i Delete. Ove izraze koristimo
za dodavanje zapisa u tabelu, izmjenu i brisanje postojećih zapisa.
Dodavati u tabelu možemo jedan ili više zapisa. Kod insert izraza nikad ne upisujemo vrednost u
kolonu za identifikaciju reda, zbog toga sto se upisuje automatski od strane DBMS. U izrazu za ažuriranje
podataka upisujemo naziv tabele, kolone sa vrednostima i uslov kojim sve zapisima vršimo promjenu. Da
bi smo izbrisali zapis iz tabele koristimo naziv tabele i uslov. Uslov je obično jedna ili više kolona koje
zadovoljavaju odredjeni kriterijum.
Sintaksa za dodavanje zapisa:
36
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
Sintaksa za ažuriranje zapisa:
Sintaksa za brisanje zapisa:
4.2. ADO.NET 4
ADO.NET 4 (ActiveX Data Objects) je primarni interfejs za pristup podacima API (Application
Programming Interfaces), u okruženju .NET Framework. Sadrži klase koje se koriste kod razvoja
aplikacija sa bazama podataka.
Šema ispod prikazuje primarni ADO.NET objekat koji se koristi u razvoju aplikacija sa bazom
podataka. Aplikacija koristi podatke preko dataset koji sadrži jednu ili više tabela data tables. Za
učitavanje podataka u tabele koristimo data adapter.
Glavna funkcija data adapter-a jeste upravljanje tokovima podataka izmedju dataset-a i baze
podataka. Ovo vrši pomoću commands koje omogućava izvršavanje SQL komandi. Na primjer, komanda
za očitavanje podataka definisana je Select izrazom. Command se spaja sa bazom podataka pomoću
connection, i prosledjuje Select izraz. Nakon izvršavanja Select komande, rezultat se vraća adapteru data
adapter, koji smješta rezultate u tabelu.
Bitno je napomenuti da su podaci u dataset-u nezavisni od baze podataka od koje učitavaju
podatke. Konekcija se zatvara nakon očitavanja podataka, i otvara ponovo po potrebi. To znači da
aplikacija sve vreme radi sa kopijom podataka smještenih u dataset. Arhitektura koja implementira ovaj
metod obrade podataka zove se disconnected data arhitecture. Ovo je mnogo komplikovanija arhitektura
od connected arhitekture, ali ima niz prednosti.
Jedna od prednosti diskonektovane arhitekture jeste unapredjenje sistemskih performansi. Druga
prednost je u tome što ASP.NET web aplikacije rade na ovaj način.
ADO.NET klase su zadužene za direktnu komunikaciju sa bazom podataka, pomoću.NET data
providers-a. Ovi provajderi sadrže klase koje koristimo za kreiranje data adapter-a, commands-a i
connections-a. .NET Framework sadrži provajdere za SQL Server, Oracle, OLE DB, ODBC i druge.
slika br.35 – osnovni ADO.NET objekti
37
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
ADO.NET klase
U narednom poglavlju biće opisane primarne ADO.NET 4 klase. Kada koristimo SQL data
source, ne koristimo ove klase direktno, već se one koriste u pozadini. Medjutim, ADO.NET se koristi
direktno kada se primjenjuje ObjectDataSource kontrola.
SqlConnection klasa
Prije nego pristupimo podacima iz baze podataka, potrebno je kreirati connection objekat koji
definiše konekciju do baze. Ova klasa zove se SqlConnection.
svojstvo
opis
ConnectionString
Sadrži informacije neophodne za povezivanje sa SQL Server
bazom podataka, a uključuje naziv servera, naziv baze i podatke
za prijavu korisnika.
metoda
opis
Open
Close
Otvori konekciju sa bazom podataka.
Zatvori konekciju sa bazom podataka.
slika br.38 – svojstva i metode SqlConnection klase
Najvažnije svojstvo ove klase je ConnectionString. Connection string jeste tekst koji sadrži informacije
potrebne za povezivanje sa bazom. Odnosno, sadrži informacije kao što su naziv baze, adresa servera,
user-id i lozinku. Dvije metode opisane na šemi iznad omogućavaju otvaranje i zatvaranje konekcije.
Konekcija se zatvara nakon ažuriranja ili očitavanja podataka. Kada koristimo data adapter, konekcija se
otvara i zatvara za nas, tako da nije potrebno koristiti ove metode.
SqlCommand klasa
Za izvršavanje SQL komandi na SQL Server bazi podataka, kreiramo objekat SqlCommand koji
sadrži SQL izraz. Connection svojstvu klase dodjeljujemo SqlConnection objekat, a CommandText
svojstvo sadrži SQL izraz koji će se izvršiti.
CommandType svojstvo odredjuje kako će se izvršiti CommandText svojstvo. Umjesto SQL izraza, u
CommandText svojstvo možemo upisati i naziv procedure stored procedure, koja sadrži jedan ili više
SQL izraza kompajliranih i smještenih u bazi.
Već smo napomenuli da data adapter izvršava objekat command. Medjutim, možemo izvršiti
objekat direktno primjenom jedne od tri metode. Na primjer, ako koristimo ExecuteReader za Select
izraz, rezultat se vraća kao objekat DataReader. Ako koristimo ExecuteScalar, samo se vraća vrednost
prve kolone i reda.
Kada command sadrži Insert, Update ili Delete izraze, koristimo ExecuteNonQuery motodu za
izvršavanje. Ova metoda vraća cjelobrojnu vrednost koja znači koliko je izvršeno redova ovom
komandom. Ako na primjer, comanda Delete briše samo jedan zapis, ExecuteNoNQuery metoda vraća
vrednost 1.
38
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
svojstvo
opis
Connection
CommandText
CommandType
Parameters
SqlConnection objekat za povezivanje sa bazom podataka.
Tekst SQL izraza ili procedure.
Izbor tipa komande, kojim odredjujemo da li se radi o SQL
izrazu (tekst), ili proceduri (StoredProcedure).
Kolekcija parametara koje koristi CommandText.
metoda
opis
ExecuteReader
ExecuteNonQuery
Izvršava upit i vraća rezultat u obliku SqlDataReader objekta.
Izvršava upit i vraća cjelobrojnu vrednost koja predstavlja broj
obradjenih redova.
Izvršava upit i vraća rezultat prve kolone u prvom zapisu.
ExecuteScalar
slika br.39 – svojstva i metode SqlCommand klase
SqlParameter klasa
Klasa SqlParameter prikazana na šemi ispod, omogućava prosledjivanje vrednosti SQL komandi.
Parametri se obično koriste za ograničavanje učitanog broja redova Select izraza. Na primjer, možemo
očitati odredjeni artikal iz Artikal tabele, prosledjivanjem IdArtikal parametra. Možemo očitati sve
proizvode odredjene kategorije, prosledjivanjem IdKategorija parametra. Pored navedenoga, parametri se
koriste i u Insert, Update i Delete izrazima, prosledjivanjem vrednosti kolona.
metoda
opis
ParameterNeme
Value
SqlDbType
Naziv parametra.
Vrednost dodjeljena parametru.
SQL tip podatka parametra.
slika br.40 – svojstva SqlParameter klase
SqlDataReader klasa
Šema ispod pokazuje najvažnija svojstva i metode klase. Koristimo klasu za kreiranje objekta
data reader, koji omogućava efikasno čitanje redova iz result set-a napunjenog upitom iz baze. U stvari,
kada koristimo data adapter za učitavanje podataka, data adapter prethodno koristi data reader za čitanje
redova iz result set-a, i smješta ih u dataset.
svojstvo
opis
Item
Pristup vrednosti kolone odredjen indeksom ili nazivom
odredjenog reda.
Vraća Boolean vrednost koja pokazuje da li je DataReader
zatvoren.
IsClosed
39
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
metoda
opis
Read
Close
Čita sledeći red. Vraća True ako ima još zapisa.
Izvršava upit I vraća cjelobrojnu vrednost koja predstavlja broj
Zatvaranje DataReader-a.
slika br.41 – svojstva i metode SqlDataReader klase
SqlDataAdapter klasa
Svrha data adaptera jeste povezivanje baze sa dataset-om. Četiri svojstva SqlDataAdapter klase
prikazanih na šemi ispod, predstavljaju četiri SQL komande koje data adapter koristi za prenost podataka
iz baze u dataset i obrnuto. Svojstvo SelectCommand predstavlja command objekat koji služi za
učitavanje podataka iz baze. Svojstva DeleteCommand, InsertCommand i UpdateCommand predstavljaju
komande koje se koriste za ažuriranje baze, zasnovane na izmjenama u dataset-u.
Za izvršavanje komande naznačene u SelectCommand svojstvu, koristimo Fill metodu, i podaci
se smjeste u dataset. Tada aplikacija radi sa podacima u dataset-u bez baze podataka. Ako aplikacija
napravi izmjene u dataset-u, klasa data adapter preko metode Update izvršava komande definisane u
svojstvima DeleteCommand, InsertCommand i UpdateCommand. Na ovaj način se ažurira i baza
podataka.
svojstvo
opis
SelectCommand
SqlCommand objekat koji predstavlja Select izraz za očitavanje
podataka iz baze.
SqlCommand objekat koji predstavlja Delete izraz za brisanje
zapisa iz baze.
SqlCommand objekat koji predstavlja Insert izraz za dodavanje
zapisa u bazu.
SqlCommand objekat koji predstavlja Update izraz za ažuriranje
zapisa u bazi.
DeleteCommand
InsertCommand
UpdateCommand
metoda
opis
Fill
Izvršava komandu definisanu u SelectCommand svojstvu, I
učitava rezultat u dataset objekat.
Izvršava komandu definisanu u DeleteCommand,
InsertCommand I UpdateCommand svojstvima, za svaki zapis u
dataset-u, koji je dodan, izbrisan ili ažuriran.
Update
slika br.42 – svojstva i metode SqlDataAdapter klase
40
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
4.3. Konkurentnost i disconnected data arhitektura
Disconnected data arhitektura ima svoje prednosti ali i nedostatke. Jedan od nedostataka jeste
kada dva ili više korisnika učita i mijenja podatke na istom zapisu u tabeli.Ovo se zove concurrency
problem, a dešava se iz razloga što program učitava podatke iz baze podataka, i nakon toga prekida
konekciju. DBMS ne može kontrolisati ovakav vid ažuriranja.
Šema ispod objašnjava nastali slučaj, u kojem imamo dva korisnika Artikli tabele u isto vreme.
Ovi korisnici mogu pristupati Artikli tabeli sa iste ili različitih web sajtova ili stranica. Pretpostavimo da
korisnik 1 mijenja cijenu proizvoda na zapisu koji se nalazi u Products tabeli baze podataka. Sa druge
strane korisnik 2 mijenja opis proizvoda na istom zapisu kao korisnik 1, i pokušava ažurirati Products
tabelu u bazi. Šta će se desiti zavisi od kontrole concurrency control koju koristi program.
Kod ADO.NET-a možemo izabrati jednu od dvije vrste concurrency kontrola. Program
podrazumjevano koristi optimistic concurrency, koji provjerava da li je bilo izmjena na zapisu prije nego
ga očita. U koliko ima izmjena, komande Update i Delete se prekidaju i prikazuje se poruka o grešci.
Sa druge strane „last in wins“ tehnika nema provjere ažuriranja, već poslednji korisnik koji
upisuje podatak pregazi postojeći. Na primjer, ako korisnik 2 poslednji ažurira zapis, pregaziće podatke
od korisnika 1, što znači da će opis biti tačan, ali cijena proizvoda netačna. Pošto ovakva greška oštećuje
podatke u bazi, optimistička konkurencija je više zastupljena.
Ako znamo da bi nam konkurentnost predstavljalo problem, možemo koristiti neke od tehnika
programiranja kako bi smo smanjili mogućnost nastanka grešaka. Ako program koristi dataset, jedna od
metoda jeste ažuriranje baze frekventno, tako da drugi korisnici mogu primiti ispravne podatke.
Drugi način izbjegavanja greške (concurrency exceptions) jeste očitavanje i rad samo sajednim
redom. Na ovaj način malo je vjerovatno da će dva korisnika ažurirati isti zapis u isto vreme.
U većini aplikacija, konkurentna greška retko nastaje.
slika br.36 – dva korisnika koji rade na kopijama istih podataka
4.4. Rad sa podacima bez korišćenja data adapter-a
Kada želimo raditi sa dva ili više zapisa iz baze podataka u isto vreme, koristimo data adapter za
očitavanje zapisa i smještanje u dataset. Medjutim moguće je raditi sa podacima i bez data adapter-a. Na
sledećoj šemi možemo viditi kako.
Kao što vidimo, i dalje koristimo objekte command i connection za pristup bazi. Umjesto da
koristimo data adapter za izvršavanje komandi, to radimo direktno. Tada obično iz koda očitavamo
rezultat. Ako prosledimo komande koje sadrže Insert. Update ili Delete, rezultat je cjelobrojna vrednost
koja pokazuje koliko je zapisa obradjeno ovom operacijom. U isto vreme možemo koristiti ovu
informaciju da odredimo da li je operacija uspješno izvršena.
41
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
Ako izvršavamo komandu koja sadrži Select izraz, rezultat je result set koji sadrži zahtjevane
zapise. Za očitavanje ovih zapisa koristimo objekat data reader. Data reader predstavlja efikasan način za
čitanje zapisa u result set-u. Ne možemo ga koristiti za izmjenu podataka, već samo za čitanje i to
unapred. Jednom kada očitamo red, prošli red je nedostupan. Zbog ovoga, obično koristimo data reader za
učitavanje i rad samo sa jednim zapisom. Iz tog razloga šanse za konkurentnu grešku su smanjene.
slika br.37 – ADO.NET komponente za direktan pristup bazi podataka
4.5. SQL data sources
U ovom poglavlju biće opisan SqlDataSource kontrola, koja omogućava pristup podacima u SQL
Server bazi podataka sa malo ili bez potrebe programiranja.
Šlika ispod prikazuje web aplikaciju sa dvije kontrole SqlDataSource-a, preko kojih učitava
kategoriju i artikle iz SQL Server baze podataka, i učitava ih u odgovarajuće kontrole. Drop-down lista
prikazuje kategorije artikala preko prve data source kontrole. DataList kontrola očitava podatke preko
druge data source kontrole, i prikazuje artikle, prethodno odabrane kategorije iz drop-down liste. U ovom
primjeru nije korišćen C# kod.
42
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
slika br.43 – Prikaz liste artikala u pretraživaču
Kreiranje SqlDataSource kontrole
Na sledećoj slici možemo vidjeti način kreiranja SqlDataSource kontrole.Proces je sličan kao
kod AccessDataSource kontrole.
Data source kontrola je vidljiva samo dok je aplikacija u dizajnu, tako da nije bitno gdje je
pozicioniramo na formi. Medjutim, dobra praksa jeste smjestiti kontrolu blizu one koja je koristi.Na
kontroli izabiremo komandu Configure Data Source, gdje nam se prikazuje početni pomoćni obrazac za
podešavanje parametara ove kontrole. Osim na SqlDataSource kontroli, možemo je naći i na drugim
kontrolama koje mogu da koriste data source.
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:MojConnectionString %>"
DeleteCommand="DELETE FROM Narudzba WHERE (Id = @Id)"
InsertCommand="INSERT INTO Narudzba(Datum, Realizovano, NazivKorisnika) VALUES (@Datum, @Realizovano,
@NazivKorisnika)"
SelectCommand="SELECT Id, Datum, Realizovano, NazivKorisnika FROM Narudzba ORDER BY Datum DESC"
UpdateCommand="UPDATE Narudzba SET Realizovano = @Realizovano WHERE (Id = @Id)">
<DeleteParameters>
<asp:Parameter Name="Id" />
</DeleteParameters>
<InsertParameters>
<asp:Parameter Name="Datum" />
<asp:Parameter Name="Realizovano" />
<asp:Parameter Name="NazivKorisnika" />
</InsertParameters>
<UpdateParameters>
<asp:Parameter Name="Realizovano" />
<asp:Parameter Name="Id" />
</UpdateParameters>
</asp:SqlDataSource>
43
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
svojstvo
opis
ID
Runat
ConnectionString
ProviderName
Identifikacioni broj za SqlDataSource controlu.
Obavezno naznačiti “Server”, što znači da se izvršava na serveru.
Parametri konekcije.
Naziv provajdera koji se koristi za pristup bazi podataka. Dozvoljene
vrednosti mogu biti: System.Data.Odbc, System.Data.OleDb,
System.Data.OracleClient ili System.Data.SqlClient. Podrazumjevano se
koristi SqlClient.
SQL Select izraz koji se izvršava od strane data source za očitavanje
podataka.
SelectCommand
slika br.44 – osnvni atributi SqlDataSource kontrole
Kreiranje konekcije
Prvi korak u konfigurisanju SqlDataSource kontrole jeste kreiranje konekcije preko obrasca
prikazanog na slici ispod. Ovaj obrazac nam omogućava izbor već postojeće konekcije od drugog
projekta, ili kreiranje nove. Upisujemo podatke koji su potrebni za pristup bazi podataka. To su naziv
servera koji sadrži bazu, korisničko ime i lozinka, naziv baze kojoj želimo pristupati.
Ako koristimo SQL Server Express na lokalnoj mašini, upisujemo localhost\sqlexpress za naziv
servera, ili odabiremo naziv servera sa drop-down liste, npr. NEMANJA_DESKTOP\SQLEXPRESS. Za
logovanje koristimo opciju Windows Authentication. Tada SQL Server koristi login name i password.Na
kraju odabiremo naziv baze.
slika br.45 – Obrazac za kreiranje konekcije
44
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
Način čuvanja parametara konekcije
Umjesto da hard-kodujemo parametre konekcije u programu, bolja varijanta jeste čuvanje u
web.config fajlu. Na ovaj način izbjećemo kompajliranje aplikacije prilikom promjene parametara
konekcije, jednostavnim modifikovanjem web.config fajla.
Slika ispod pokazuje mogućnost da ASP.NET sačuva konekciju u web.config fajl automatski,
klikom na opciju “Yes, save this connection as”.
slika br.46 - Obrazac za snimanje stringa konekcije u web.config fajl
Obrazac za generisanje Select izraza
Sledeća slika prikazuje obrazac preko kojeg možemo lako kreirati Select izraz za učitavanje
podataka iz odredjene tabele. Najbrži način jeste da odaberemo tabelu, i naznačimo koje kolone želimo
učitati. Osim ovoga, moguće je zapise sortirati odredjenim redosledom klikom na dugme ORDER BY.
Ako već imamo sintaksu možemo ručno uneti odabirom opcije “Specify a custom SQL statement
or stored procedure”. Kao što sam naziv kaže, unosimo SQL izraz ili pozivamo odredjenu proceduru
smještenu na SQL Serveru.
45
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
slika br.47 - Obrazac za generisanje Select izraza
Pored toga, u koliko ima potrebe, postavljamo jedan ili više uslova preko dugmeta WHERE.
Ovde ograničavamo broj redova koji će se očitati prilikom izvršavanja Select izraza. Obrazac nam
omogućava poredjenje odredjene kolone iz tabele sa vrednostima kontrola na formi, URL-u ili cookie-u i
sl. Postavljeni uslovi se prikazuju na listi u dnu obrasca kao što se može vidjeti na slici ispod.
slika br.48 - Obrazac za dodavanje Where klauzule
46
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
I na kraju, čarobnjak za nas generiše aspx kod.
Aspx kod SqlDataSource kontrole koja sadrži Select i Delete parametre:
<asp:SqlDataSource ID="SqlDataSource2" runat="server"
ConnectionString="<%$ ConnectionStrings:MojConnectionString %>"
DeleteCommand="DELETE FROM NarudzbaDetalj WHERE (Id = @Id)"
SelectCommand="SELECT NarudzbaDetalj.Id, NarudzbaDetalj.IdNarudzba, NarudzbaDetalj.IdArtikal,
NarudzbaDetalj.Cijena, NarudzbaDetalj.Kolicina, Artikal.Naziv AS NazivArtikla FROM NarudzbaDetalj INNER
JOIN Artikal ON NarudzbaDetalj.IdArtikal = Artikal.Id WHERE (NarudzbaDetalj.IdNarudzba = @IdNarudzba)">
<DeleteParameters>
<asp:Parameter Name="Id" />
</DeleteParameters>
<SelectParameters>
<asp:ControlParameter ControlID="GridViewNarudzba" Name="IdNarudzba"
PropertyName="SelectedValue" />
</SelectParameters>
</asp:SqlDataSource>
Custom statements
Kada koristimo opciju custom statements, Visual Studio ne generiše izraze za nas, već ručno
upisujemo Select, Update, Insert i Delete izraze u odgovarajuća polja. Medjutim, i tada imamo mogućnost
automatskog generisanja koda uz pomoć Query Builder-a.
slika br.49 - Obrazac za proizvoljan unos Select upita
Query Builder
Query Builder omogućava kreiranje SQL izraza bez poznavanja sintakse. Čak i ako dobro
poznajemo sintaksu, primjena Query Builder-a jeste brža i jednostavnija opcija.
Diagram panel prikazuje tabele koje se nalaze u bazi podataka. Dodajemo one tabele koje želimo
korisitit u upitu. Ako u ovaj panel dodamo dvije ili više tabela, builder će ih automatski povezati
odgovarajućim relacijama.
47
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
U Grid panelu odabiremo kolone koje želimo koristiti u upitu. Kolone odabiremo klikom na
check box polje u diagram panelu za odgovarajuću tabelu. Na ovom mjestu možemo kreirati nove
privremene kolone koje sadrže rezultat drugih kolona. Svaka kolona može imati drugačijinaziv od onog
definisanog u tabeli upisivanjem naziva u alias polje. Takodje, možemo vršiti sortiranja po kolonama i
grupisanja. Filter u ovom panelu predstavlja uslov za odredjenu kolonu. Na primjer, ako koloni
IdKategorija u filter upišemo parametar @IdKategorija, to znači da će rezultat upita biti artikli definisani
prosledjenim parametrom, odnosno artikli odredjene kategorije. Ova kolona nema selektovanu vrednost
Output, što znači da ista neće biti uključena u rezultat upita.
Nakon što smo odabrali tabele, i odredili koja polja želimo koristiti u upitu, Query Builder je za
nas sastavio SQL sintaksu u SQL panelu.
Rezultat sastavljenog upita se prikazuje u result panelu, nakon što kliknemo na dugme Execute
Query. Ako upit sadrži parametre, prije prikazivanja rezultata upita, zatražiće unos vrednosti parametara
preko pomoćnog obrasca.
slika br.50 - Query Builder
Definisanje parametara upita
Ako upit sadrži jedan ili više parametara, Query Builder preko pomoćnog obrasca omogućava
definisanje izvora za svakog od definisanih parametara. Lijeva strana predstavlja definisane parametre
kreirane u Query Builderu. Izvore ovih parametara definišemo na listi sa desne strane.
48
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
Data binding
Nakon što konfigurišemo data source kontrolu, možemo je dodjeliti web form kontroli za
automatski prikaz podataka iz data source-a na stranicu.
Data source možemo dodjeliti svim kontrolama koje nasledjuju klasu ListControl. U ovu grupu
ubrajamo list box kontrolu, drop-down, check box, radio button list i bulleted list kontrolu. Svaka od ovih
kontrola sadrži Data Source Configuration Wizard pomoću kojeg odabiremo data source za list kontrolu,
data field za prikaz vrednosti na listi i data value za vraćanje selektovane vrednosti. Formatiranje
vrednosti za prikaz na listu vršimo preko svojstva DataTextFormatString. Ovo obično znači fiksni tekst u
prefiksu.
4.5.1. SqlDataSource i ObjectDataSource izvori podataka
SqlDataSource
Glavna prednost SQL data source-a jeste u mogućnosti kombinovanja sa kontrolama za rad sa
podacima. Tu spadaju sledeće kontrole: GridView, DetailsView, FormView i ListView.
Medjutim, SQL data source ima i svoju manu, a to je način čuvanja SQL izraza za prikaz i
ažuriranje podataka. Ovaj način narušava glavne principe dobrog programiranja, što znači da kod koji
služi za pristup bazi podataka i realizovanje poslovne logike, treba biti odvojen od interfejsa. Kada
koristimo SqlDataSource kontrolu, kod za rad sa bazom podataka je pomješan sa prezentacionim kodom.
Pomoću ASP.NET-a možemo na nekoliko načina smanjiti ili eliminisati ovaj problem. Kao prvo,
SqlDataSource kontrola može da koristi stored procedure umjesto SQL izraza. Na ovaj način SQL izrazi
za pristup i ažuriranje su smješteni u samu bazu podataka, odvojeno od prezentacionog koda.
Drugo, koristeći kontrolu ObjectDataSource umjesto SqlDataSource, kreiramo odvojenu klasu za
pristup bazi podataka, tako da se ovaj kod ne nalazi u aspx fajlu pomješan sa ostalim kodom.
Osim navedena dva načina, možemo koristiti LinqDataSource i EntityDataSource kontrole. Kada
koristimo neku od ovih kontrola, ne pišemo kod za pristup bazi. Umjesto toga, SQL izrazi su generisani i
izvršeni za nas, na osnovu object modela koji mapira bazu.
Object Data Sources
Object data sources je sličan Access i SQL data sources-u, uz prednost primjene troslojne
arhitekture. Ovo znači da se kod za pristup podacima nalazi u data access klasi, što nam omogućava
odvajanje koda za prezentacioni dio, od onog za pristup podacima.
4.5.2. GridView i FormView kontrole
GridView kontrola jeste jedna od najvažnijih kontrola koje sadrži ASP.NET 4. Sadrži mnoštvo
opcija za prilagodjavanje izgleda i dogadjaja.
Slika ispod sadrži GridView kontrolu koja prikazuje podatke formatirane u redove i kolone, preko
HTML tabele sa Tr i Td elementima. U tabeli na slici prve tri kolone prikazuju podatke iz tabele.
Druge dvije kolone prikazuju dugmad za izmjenu i brisanje zapisa. Klikom na dugme za izmjenu,
red se prebacuje u edit mod. U ovom modu label-i se zamjenjuju text box-ovima koji omogućavaju
izmjenu zapisa, a dugme edit u Update i Cancel dugmad. Takodje, dugme Delete se u ovom modu ne vidi.
Veći dio aspx koda GridView kontrole je kreiran automatski od strane Visual Studia, odma po
prevlačenju kontrole sa palete alata na formu, preko obrasca za konfiguraciju kontrole.
49
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
slika br.51 - GridView kontrola koja omogućava vršenje izmjena na tabeli
Aspx kod GridView kontrole:
<asp:GridView ID="GridViewNarudzba" runat="server"
AutoGenerateColumns="False" DataKeyNames="Id"
DataSourceID="SqlDataSource1"
Width="514px" AllowPaging="True" PageSize="5" BackColor="#DEBA84"
BorderColor="#DEBA84" BorderStyle="None" BorderWidth="1px" CellPadding="3"
CellSpacing="2">
<Columns>
<asp:BoundField DataField="Id" HeaderText="Id" Visible="False"
InsertVisible="False" ReadOnly="True" SortExpression="Id" />
<asp:BoundField DataField="NazivKorisnika" HeaderText="korisnik"
SortExpression="NazivKorisnika" ReadOnly="True" />
<asp:BoundField DataField="Datum" HeaderText="datum" SortExpression="Datum"
ReadOnly="True" DataFormatString="{0:dd.MM.yyyy}" />
<asp:CheckBoxField DataField="Realizovano" HeaderText="realizovano"
SortExpression="Realizovano" />
<asp:TemplateField ShowHeader="False">
<EditItemTemplate>
<asp:Button ID="LinkButton1" runat="server" CausesValidation="True"
CommandName="Update" Text="sačuvaj"></asp:Button>
&nbsp;<asp:Button ID="LinkButton2" runat="server" CausesValidation="False"
CommandName="Cancel" Text="odustani"></asp:Button>
</EditItemTemplate>
<ItemTemplate>
<asp:Button ID="LinkButton5" runat="server" CausesValidation="False"
CommandName="Select" Text="odaberi"></asp:Button>
<asp:Button ID="LinkButton4" runat="server" CausesValidation="False"
CommandName="Edit" Text="ažuriraj"></asp:Button>
<asp:Button ID="LinkButton6" runat="server" CausesValidation="False"
CommandName="Delete"
OnClientClick="return confirm('Da li ste sigurni?');" Text="izbriši"></asp:Button>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<FooterStyle BackColor="#F7DFB5" ForeColor="#8C4510" />
<HeaderStyle BackColor="#A55129" Font-Bold="True" ForeColor="White" />
<PagerStyle ForeColor="#8C4510" HorizontalAlign="Center" />
<RowStyle BackColor="#FFF7E7" ForeColor="#8C4510" />
<SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="White" />
<SortedAscendingCellStyle BackColor="#FFF1D4" />
<SortedAscendingHeaderStyle BackColor="#B95C30" />
<SortedDescendingCellStyle BackColor="#F1E5CE" />
<SortedDescendingHeaderStyle BackColor="#93451F" />
</asp:GridView>
50
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
atributi
opis
ID
Runat
DataSourceID
DataKeyNames
AutoGenerateColumns
SelectedIndex
identifikacioni broj kontrole
Obavezno upisati „server“, jer se komanda izvrsava na serveru.
ID izvora podataka.
Naziv polja sa primarnim ključem.
U koliko se kolone kreiraju automatski.
Predstavlja red koji je selektovan.
slika br.52 – atributi GridView kontrole
Sortiranje
GridView kontrola omogućava korisnicima sortiranje odredjenih kolona iz runtime-a. Na slici
ispod prikazana je kontrola sa kolonama koje korisnik može sortirati. Sortiranje omogućavamo preko
atributa AllowSorting za svaku kolonu pojedinačno. Kada jednom kliknemo na link za sortiranje, podaci
se sortiraju u rastućem redosledu, a drugi put u opadajućem.
Paging
Na slici br.53 vidimo GridView kontrolu sa paging prikazom, jednostavnim dodjeljivanjem True
vrednosti AllowPaging svojstvu kontrole. Uključivanjem ovog svojstva, na dnu kontrole se prikažu
brojevi stranica.
slika br.53 - Realizacija sortiranja i grupisanja u stranice na GridView kontroli
Aspx kod GridView kontrole sa omogućenim sortiranjem i grupisanjem u stranice:
<asp:GridView ID="GridViewNarudzba" runat="server"
AutoGenerateColumns="False" DataKeyNames="Id"
DataSourceID="SqlDataSource1"
Width="514px" AllowPaging="True" PageSize="5" BackColor="#DEBA84"
BorderColor="#DEBA84" BorderStyle="None" BorderWidth="1px" CellPadding="3"
CellSpacing="2" AllowSorting="True">
51
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
Dogadjaji GridView kontrole
Iako GridView kontrola realizuje mnogo funkcija automatski, i dalje imamo potrebu za pisanjem
koda za obradu grešaka, kao što su validacija podataka, greške baze podataka i konkurentnost.
Ako pogledamo spisak dogadjaja kontrole, primjetićemo nekoliko povezanih dogadjaja GridView
kontrole. Jedna vrsta dogadjaja izršava se prije, a druga posle izvršavanja odredjene radnje. Na primjer,
kada korisnik klikne na dugme Delete, izvršiće se dva dogadjaja. RowDeleting dogadjaj izvršava se prije
brisanja zapisa, a RowDeleted posle brisanja zapisa.
Osnovni razlog ovakvog načina rada jeste validacija podataka kod dogadjaja koji se izvršavaju
prije glavne operacije. Na primjer, kada korisnik klikne na Update dugme, koristimo RowUpdating
dogadjaj za provjeru korisničkog unosa. Ako korisnik nije uneo ispravan podatak, svojstvu Cancel
dodjeljujemo vrednost True za prekid izvršavanja glavne operacije.
Sa druge strane, dogadjaj koji se izvršava posle glavne operacije provjerava da li se glavna
operacija izvršila ispravno. U većini aplikacija provjeravamo dva slučaja. Prvo, da li je nastala greška u
bazi, pomoću Exception svojstva e argumenta. Ako ovo svojstvo sadrži ispravan objekat, greška je
nastala, i potrebno je obavjestiti korisnika odgovarajućom porukom.
Drugo. kod slučaja u kojem se primjenjuje konkurentnost, provjeravamo da li je nastala ova vrsta
greške, pomoću svojstva AffectedRows e argumenta. Prazan rezultat znači da je nastala greška, i da
trebamo obavjetiti korisnika odgovarajućom porukom.
Kada primjenjujemo optimističku konkurentnost, Where komanda u Update ili Delete izrazu
pokušava pronaći zapis sa istim vrednostima koji su bili kada je učitan zapis. Ako se ovakav zapis ne
može pronaći, što znači da je drugi korisnik već izmjenio sadržaj barem jedne kolone, ili je izbrisao red,
izraz nije prihvaćen.
Pored navedenog, jedan od češćih razloga nastanka greške jeste upisivanje null vrednosti koloni
koja ovakav vid podatka ne prihvata. U ovom slučaju prikazujemo odgovarajuću grešku korisniku i
dodjeljujemo True vrednost ExceptionHandled svojstvu e argumenta, radi dalje obrade izuzetaka.
Možemo takodje upisati vrednost True svojstvu KeepInEditMode, kako bi GridView kontrola ostala u
modu za izmjenu podataka.
dogadjaj
vreme izvršavanja
RowCancelingEdit
RowDataBound
RowDeleted
RowDeleting
RowEditing
RowUpdated
RowUpdating
SelectedIndexChanged
SelectedIndexChanging
Prije otkazivanja edit moda.
Nakon učitavanja zapisa.
Posle brisanja zapisa.
Prije brisanja zapisa.
Prije editovanja zapisa.
Nakon ažuriranja zapisa.
Nakon selektovanja zapisa.
Preije selektovanja zapisa.
slika br.54 – dogadjaji GridView kontrole
Procedura za realizaciju RowUpdated dogadjaja:
protectedvoid GridView1_RowUpdated(object sender, GridViewUpdatedEventArgs e)
{
if (e.Exception != null)
{
Label1.Text = "Nastala je greska u bazi - " + e.Exception.Message.ToString();
52
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
e.ExceptionHandled = true;
e.KeepInEditMode = true;
}
elseif (e.AffectedRows == 0)
{
Label1.Text = "Neko je vec nesta izmjenio - " + e.Exception.Message.ToString();
}
}
Dodavanje zapisa
GridView kontrola ne podržava Insert operaciju. Medjutim, možemo koristiti data source
GridView kontrole za dodavanje zapisa u bazu podataka. Na ovaj način, novi red biće automatski dodan u
GridView kontrolu. Za realizaciju dodavanja potrebne su nam text box kontrole za unos podataka i dugme
preko kojeg korisnik može dodati zapis.
Svojstvu DataValue SqlDataSource kontrole dodjeljujemo vrednosti, a nakon toga pozivamo
metodu Insert. Slika ispod pokazuje primjer koda za dodavanje zapisa preko SqlDataSource kontrole, a uz
pomoć text box kontrola i jednog dugmeta.
slika br.55 - FormView kontrola za dodavanje zapisa u tabelu
U proceduri Inserted, ne provjerava se svojstvo AffectedRows zato što ne može doći do konkurentske
greškre prilikom dodavanja novog zapisa. Kada se ažuriraju podaci u DetailView, potrebno je osvježiti i
zavisnu kontrolu, u ovom slučaju GridView, preko funkcije DataBound.
Procedura za realizaciju ItemInserted dogadjaja:
protected void DetailsView1_ItemInserted(object sender, DetailsViewInsertedEventArgs e)
{
GridView1.DataBind();
if (e.Exception != null)
{
lblError.Text = "Nastala je greška u bazi podataka.<br /><br />" +
e.Exception.Message;
if (e.Exception.InnerException != null)
lblError.Text += "<br />poruka: "
+ e.Exception.InnerException.Message;
e.ExceptionHandled = true;
}
}
53
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
GridView Template
slika br.56 - DetailsView kontrola u modu za izmjenu, sa i bez templejta
Aspx kod za prilagodjeni template:
<asp:TemplateField HeaderText="slika:">
<EditItemTemplate>
<asp:DropDownList ID="TextBox2" runat="server" Text='<%# Bind("Slika") %>'></asp:DropDownList>
</EditItemTemplate>
<InsertItemTemplate>
<asp:DropDownList ID="TextBox2" runat="server" Text='<%# Bind("Slika") %>'
Width="100"></asp:DropDownList>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("Slika") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
FormView
Informacije o artiklu su prikazane na FormView kontroli, a Item template koristi CSS za prikaz
slike poravnate na desnu stranu od teksta. Ovo demonstrira layout fleksibilnost FormView kontrole. Sa
DetailsView kontrolom, ne bi bio moguć prikaz slike poravnate sa desne strane od teksta, zato što
DetailsView kontrola prikazuje svaku kolonu data source-a u posebnom redu tabele.
54
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
slika br.57 - “Asortiman” stranica “ProdavnicaIgracaka” aplikacije za naručivanje proizvoda
4.6. Troslojne aplikacije i ASP.NET
Kao što znamo, preporučljivo je korištenje troslojne arhitekture za izradu web aplikacija.U tri
komponente spadaju prezentacioni dio, poslovna logika i pristup podacima.Prezentacioni sloj
presentation layer predstavlja web stranicu, kontrole za prikazivanje podataka i ObjectDataSource
objekat za popunjavanje kontrola podacima. Srednji sloj middle layer sadrži data access klase koje
upravljaju podacima, a takodje i klase koje implementiraju poslovnu logiku. Sloj baze podatakadatabase
layer predstavlja bazu sa podacima. Idealno bi bilo čuvanje SQL izraza u bazi podataka u obliku
procedura, ali su SQL izrazi često smješteni u data access klasama.
ObjectDataSource kontrola opslužuje data-bound kontrole u prezentacionom sloju, i data access
klase u srednjem sloju. Kada koristimo kontrolu ObjectDataSource, moramo kreirati data access klasu za
preuzimanje podataka sa kontrola. Ova klasa sadrži najmanje jednu metodu za prosledjivanje podataka iz
baze u formu. Takodje, sadrži metode za dodavanje, ažuriranje i brisanje podataka. Data access klasa
treba da bude sačuvana u App_Code folderu.
Često se koristi 3-slojna arhitektura kako bi se tri sloja smjestila na fizički odvojenim mašinama,
ali to nije obavezno.
55
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
slika br.58 – troslojna arhitektura u ASP.NET
5. Profesionalne vještine u ASP.NET
U ovom djelu su opisane ASP.NET vještine koje se koriste u profesionalnim web aplikacijama, i
to prije svega, zaštićena konekcija, autentifikacija, autorizacija, korišćenje email-a i stranica za
prikazivanje grešaka. Takodje, tu su i vještine koje se primjenjuju u aplikacijama za elektronsko
poslovanje. Na kraju, WCF je postao standard za razvoj web servisa.
5.1. Zaštita web sajta
Sigurnost je jedan od najvažnijih cjelina svakog programera web sajta za elektronsko poslovanje.
Kako bi smo zaštitili web sajt, moramo osigurati privatnost podataka prosledjenih izmedju klijenta i
servera. Ovo se realizuje prmjenom posebnog Internet protokola koji se zove SSL.
5.1.1. SSL
Kako bi smo sprečili neovlašćeno čitanje podataka koji se šalju putem interneta, koristimo Secure
Sockets Layer ili SSL. SSL je internet protokol koji nam omogućava slanje kriptovanih podataka preko
interneta.
56
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
Na sledećoj slici možemo vidjeti web stranicu koja koristi zaštićenu konekciju secure connection.
Provjerom URL adrese u pretraživaču prepoznajemo zaštićenu vrstu konekcije. URL zaštićene konekcije
počinje sa HTTPS umjesto sa HTTP.
Sa uobičajenim protokolom HTTP, podaci se šalju u obliku ne kriptovanog teksta. Kao rezultat,
omogućavamo hakerima da čitaju podatke. Kod zaštićene konekcije, ovi podaci su kriptovani. I dalje
hakeri imaju mogućnost pristupa podacima, ali podaci više nisu čitljivi bez dekodiranja enkripcije.
Pomoću SSL-a, pretraživač kriptuje podatke i šalje serveru, i dekriptuje podatke primljene od servera. Isti
proces se dogadja i sa druge strane.
Pomoću SSL-a možemo prepoznati da li su podaci izmjenjeni tokom prenosa.
slika br.59 - Stranica koja zahtjeva zaštićenu konekciju
Digital secure certificates
Da bi koristili SSL za prenos podataka, klijent i server koriste digitalni sigurnosni certifikat
digital secure certificates. Certifikat ima dvije svrhe. Prvo, potvrdjuje identitet servera ili klijenta. Drugo,
obezbjedjuje informacije potrebne za kriptovanje podataka prije slanja.
Pretraživači su podrazumjevano konfigurisani da prihvataju certifikat od povjerljivih izvora. Ako
pretraživač ne prepozna zaštićenu konekciju, informiše korisnika. Nakon što korisnik prihvaticertifikat,
uspostavlja se zaštićena konekcija.
Ponekad, server može zahtjevati od klijenta da potvrdi autentifikaciju preko SSL client
authentication-a. Ovo nije uobičajeni slučaj kao što je to SSL server authentication. Na primjer, banka
može zahtjevati SSL client authentication kako bi se uvjerila da se povjerljiveinformacije, kao što su broj
i stanje računa, prosledjuju ovlašćenoj osobi. Za implementaciju ove vrste autentifikacije, certifikat mora
biti instaliran na klijentskoj strani.
57
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
slika br.60 - Obrazac za prikazivanje detalja certifikata od digital secure certificate
certifikat
opis
Server certifikat
Izdaje se pouzdanim serverima, tako da se klijentov računar
može povezati korišćenjem zaštićene konekcije.
Izdaje se pouzdanim klijentima, tako da server može potvrditi
njihov identitet.
Client certifikat
slika br.61 – Tipovi digitalnih certifikata (Digital secure certificate)
Dobijanje certifikata
Prije nego što razvijemo ASP.NET aplikaciju koja koristi SSL, potrebno je nabaviti certifikat
digital secure certificate od povjerljivih izvora kao što su neki prikazani na listi ispod. Ovi izvori se zovu
certification authorities ili CAs, koji potvrdjuju da je osoba ili firma validna, i provjerena od registration
authority ili RA. Da bi smo dobili certifikat, moramo obezbjediti registration authority sa informacijama o
sebi ili firmi. Nakon što se registrujemo, CA nam može izdati certifikat.
Digital secure certificate od povjerljivog izvora nije besplatan, a cjena zavisi od više faktora,
uključujući i nivo sigurnosti. Većina certifikata koji se mogu kupiti, obezbjedjuju 128-bitnu SSL jačinu
zaštite. Skoro je nemoguće provaliti ovu vrstu enkripcije koju obezbjedjuje SSL, a većina pretraživača je
podržava. Medjutim, ako pretraživač ne podržava ovaj nivo enkripcije, koristiće najviši nivo koji pdržava.
Obično je to 40-bitna ili 56-bitna enkripcija. Većina CA izdavača prodaje certifikate koji omogućavaju
256-bitnu SSL jačinu, ali ova jačina nije podržana od IIS-a.
58
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
Glavni izdavači digital secure certifikata:
www.verisign.com
www.entrust.com
www.geotrust.com
www.thawte.com
jačina
opis
40-bitna
Većina pretraživača podržava, ali je lako provaliti kriptovani
kod.
Hiljadu puta jača od 40-bitne enkripcije. Takodje većina
pretraživača podržava ovu enkripciju.
Nekoliko miliona puta jača od 40-bitne, koju je veoma teško
provaliti, ali nije podržana kod svih pretraživača.
Mnogo jača od 128-bitne enkripcije, ali mali broj pretraživača je
podržava.
56-bitna
128-bitna
256-bitna
slika br.62 – SSL nivoi zaštite
Upotreba certifikata korišćenjem IIS 7
Na sledećoj slici možemo vidjeti način primjene certifikata pomoću IIS 7, verzije koja se nalazi u
paketu sa Windows 7, Vista i Windows Server 2008. Na obrascu se vidi da je instaliran self-signed
certifikat pod nazivom MojSSLCertifikat.
self-signed certificate je certifikat kojeg kreira IIS za lokalnu upotrebu, namjenjenu razvoju web
aplikacije koja koristi zaštićenu konekciju. Kada objavimo sajt na server koji nama instaliran digital
secure certificate, potrebno je zatražiti certifikat od izdavača i instalirati ga preko IIS 7 administratora.Za
razliku od IIS 7, starije verzije ne podržavaju ovu vrstu certifikata, već je potrebno registrovati se kod
izdavača CA i zatražiti certifikat. Većina CA izdaju probni certifikat sa trajanjem od 14 do 30 dana.
Nakon isteka probnog perioda, ASP.NET ne može raditi sa takvim certifikatom, već je potrebno kupiti
novi.
Za korišćenje HTTPS protokola preko IIS 7, mora postojati binding za protokol. Binding definiše
na koji način se pristupa web sajtu. Ova opcija je podešena za HTTP protokol podrazumjevano.
slika br.63 - IIS Manager obrazac za kreiranje self-signed certifikata
59
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
Kreiranje i instalacija certifikata:



IIS 7 omogućava kreiranje self-signed certificate u svrhu testiranja. Ovo vršimo preko Server
Certificates obrasca. Nakon toga odabiremo Create Self-Signed Certificate u Action panelu, i
pratimo korake na novootvorenom obrascu.
Za kreiranje certifikat fajla pomoću kojeg tražimo certifikat od izdavača, odabiremo Create
Certificate Request u Actions panelu, i pratimo korake na novootvorenom obrascu.
Da bi smo instalirali certifikat kojeg dobijemo od izdavača, odabiremo Complete Certificate
Request u Actions panelu, i pratimo korake na novootvorenom obrascu.
Kreiranje binding-a za HTTPS protocol:

Prije nego počnemo koristiti HTTPS protokol, moramo kreirati binding za isti. Da bi smo ovo
postigli, odabiremo Default Web Site node u Connections panelu, kliknemo na Bindings u
Actions panelu, zatim Add dugme na novootvorenom obrascu.Nakon toga, odabiremo https u
Type drop-down listi, i certifikat u SSL Certificate drop-down listi. Na kraju sa OK dugmetom,
završavamo ovu operaciju.
slika br.64 - Dodavanje Site Binding-a
Zahtjevanje zaštićene konekcije
Da bi smo podrazumjevano otvorili zaštićenu konekciju u ASP.NET aplikaciji, koristimo
Response.Redirect metodu. U URL adresi zamjenimo HTTP sa HTTPS protokolom. Ako koristimo selfsigned ili probni certifikat, pretraživač će prikazati upozorenje o riziku pristupanja sajtu.
Kada se poziva zaštićena konekcija koja koristi HTTPS protokol, potrebno je navesti apsolutnu
adresu URL. Ovo znači da URL mora sadržati kompletnu adresu do aplikacije, što uključuje naziv
domena, direktorijum i protokol.
Umjesto da hard-kodujemo apsolutnu adresu, koristićemo element AppSettings u web.config
fajlu za čuvanje adrese. U ovom slučaju primjenjujemo klasu ConfigurationManager za očitavanje
vrednosti iz elementa koji sadrži adresu. Na ovaj način omogućeno je jednostavno mjenjanje adrese po
potrebi i onda kada se sajt objavi, bez potrebe rekompajliranja.
Jednom kada se otvori zaštićena konekcija, možemo koristiti relativneURL adrese, koje će
zadržati istu. Da bi smo zatvorili zaštićenu konekciju, aplikacija mora pozvati drugu stranicu preko
apsolutne URL adrese sa HTTP protokolom umjesto HTTPS.
60
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
slika br.65 – upozorenje prilikom pristupanja sajtu koji ne sadrži certifikat ovlašćenog izdavača
Pozivanjem sajta koji nije certifikovan kod ovlašćenog izdavača, pretraživač prikazuje upozorenje o
riziku pristupanja sajtu.
URL adresa koja zahtjeva zaštićenu konekciju:
https://localhost/login.aspx?ReturnUrl=/Asortiman.aspx
Procedura za prebacivanje iz nezaštićene u zaštićenu konekciju, i obrnuto:
public static void KonekcijaSSL(bool zasticena)
{
if (zasticena)
{
if (!HttpContext.Current.Request.IsSecureConnection)
{
string url = HttpContext.Current.Request.Url.ToString().Replace("http:", "https:");
HttpContext.Current.Response.Redirect(url);
}
}
else
{
if (HttpContext.Current.Request.IsSecureConnection)
{
string url = HttpContext.Current.Request.Url.ToString().Replace("https:", "http:");
HttpContext.Current.Response.Redirect(url);
}
}
}
protected void Page_Load(object sender, EventArgs e)
{
Parametri.KonekcijaSSL(true);
}
Pozivanje stranice sa zaštićenom konekcijom:
protected void btnCheckOut_Click(object sender, EventArgs e)
{
string url = "https:" + ConfigurationManager.AppSettings["AdresaAplikacije"] + "Login.aspx";
Response.Redirect(url);
}
Web aplikacija obično sadrži navigaciju kao što su meni ili hyperlinks koji vode korisnika od
stranice do stranice. Medjutim, može se desiti da korisnik zaobidje navigaciju i pristupi stranici direktno.
Ovo je slučaj kada se npr. sačuva stranica u bookmark, ili kada se upise adresa u URL polje pretraživača.
Neki to rade slučajno, a neki kako bi pokušali zaobići zaštitu.
61
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
Iz tog razloga, stranica koja koristi SSL za slanje i primanje povjerljivih informacija, trebala bi da
projeri da li je otvorena zaštićena konekcija. Ovo je moguće izvršiti pomoću HttpRequest klase prikazane
na slici br.66.
Svojstvo IsSecureConnection nam omogućava da provjerimo postojanje zaštićene konekcije. Ako
nije zastićena, uz pomoć Url svojstva očitavamo adresu i mjenjamo protokol u HTTPS. Nakon toga,
Redirect metodi prosledjujemo izmjenjenu adresu za otvaranje stranice. Kod za provjeru i izmjenu adrese
treba biti smješten u Load proceduri stranice. Na ovaj način smo sigurni da se drugi kod neće izvršiti dok
se ne uspostavi zaštićena konekcija.
svojstvo
opis
IsSecureConnection
Url
Vraća True ako je zaštićena konekcija. U suprotnom, False.
URL zahtjeva.
slika br.66 – svojstva HttpRequest klase za rad sa zaštićenom konekcijom
U ovom djelu diplomskog rada smo predstavili SSL enkripciju kao zaštitu prenosa podataka
izmedju klijenta i servera. Ovo je jedan dio zaštite koju koristi aplikacija. Drugi dio omogućava
autorizaciju korisnika, kako bi se uvjerili da samo ovlašćene osobe koriste aplikaciju.
5.1.2. Autentifikacija i autorizacija korisnika
Pomenuli smo SSL zaštitu podataka kao veoma bitnu cjelinu u izradi web aplikacija. Drugi dio
zaštite odnosi se na ovlašćenja i prava pristupa samo odredjenoj vrsti korisnika. U narednom tekstu biće
opisano kako ograničiti pristup nekim stranicama aplikacije, ali ovlastiti odredjene korisnike da pristupaju
tim stranicama. Za realizovanje ove funkcionalnosti bez pisanja koda, koristimo alat za administraciju
sajta Web Site Administration Tool i login kontrole
Autentifikacija
Ako želimo ograničiti pristup cjeloj ili samo djelu ASP.NET aplikacije, koristimo authentication
za identifikaciju korisnika. Jednom kada identifikujemo korisnika, koristimo authorizarion za provjeru
privilegija za pristupanje stranicama. Na ovaj način sprečavamo neovlašćene korisnike da pristupaju
odredjenim stanicama.
Tri tipa autentifikacije:
Postoje tri tipa autentifikacije koje možemo koristiti u ASP.NET aplikacijama. Prva se zove
Windows-based authentication, koja radi sa korisnicima kreiranim u Windows-u. Tada se koristi
standardna Windows sigurnost za ograničavanje pristupa cjeloj ili dijelu aplikacije. Korisnici se
prijavljuju preko Windows account-a.
Kod form-based authentication dodajemo obrazac za prijavu u aplikaciju preko koje korisnik
unosi ime i lozinku. Tada ASP.NET automatski prikazuje stranicu za prijavu, kada korisnik pokuša da
pristupi zaštićenoj stranici. ASP.NET automatski kreira bazu podataka u kojoj smješta imena korisnika sa
njihovim lozinkama. Sa druge strane login kontrole komuniciraju sa bazom tako što upisuju i čitaju
podatke iz iste.
62
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
Windows Live ID authentication, prethodno zvana Passport authentication, zasnovana je na
Windows Live ID servisu za autentifikaciju korisnika. Windows Live ID je centralizovani servis za
upravljanje korisnicima, koji omogućava pristupanje različitim web aplikacijama sa istim korisničkim
nalogom. Ovaj nalog se otvara registrovanjem na Microsoft-ovoj stranici.
Form-based autentifikacija
Da bi smo razumjeli kako funkcioniše form-based autentifikacija, slika ispod prikazuje uobičajeni
način razmjene podataka izmedju pretraživača i servera kada korisnik pokuša pristupiti stranici koja je
zaštićena form-based autentifikacijom. Proces autentifikacije započinje korisničkim zahtjevom zaštićene
stranice. Server po prijemu zahtjeva provjerava da li je korisnik već prijavljen, očitavanjem
autentifikacijskog naloga authentication ticket u cookie-ju. Ako cookie ne sadrži ticket, server
preusmjerava pretraživač na login stranicu.
Kada korisnik unese ime i lozinku koji se nalaze u bazi, što znači da su validni, server kreira
autentifikacijski nalog i preusmjerava pretraživač na originalnu stranicu.Prilikom prosledjivanja
redirekcije pretraživaču, server šalje i authentication ticket preko cookie-a. Na ovaj način, pretraživač će
po slanju zahtjeva za originalnom stranicom proslediti i cookie serveru. Ovog puta server će pronaći
nalog i vratiti zahtjevanu stranicu.
Prosledjivanje autehtifikacionog naloga podrazumjevano se odvija preko session cookie-a, što
znači da je korisnik prijavljen sve dok traje sesija. Medjutim, ovaj nalog može biti prosledjen preko
stalnog cookie-a. Tada će korisnik automatski biti ulogovan u narednom periodu sve dok ne istekne
vreme trajanja cookie-a.
slika br.67 – HTTP zahtjevi i odgovori preko forms zasnovane autentifikacije
63
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
Podešavanje autentifikacije i autorizacije
Web stranicama mogu pristupati svi korisnici podrazumjevano, bez obzira da li bili prijavljeni ili
ne. Da bi smo ograničili pristup stranicama, moramo konfigurisati autentifikaciju i autorizaciju. Najlakši
način da ovo uradimo uz pomoć ASP.NET Administracijskog alata Web Site Administration Tool, kao
što je prikazano na sledećoj slici.
Preko Administration Tool-a odredjujemo pravila i dodjeljujemo im ovlašćenja. Takodje možemo
vršiti administraciju korisničkih naloga.
slika br.68 - Security tab Web Site Administration alata
Web sajt podrazumjevano koristi Windows autentifikaciju. Ako korisnici pristupaju u lokalnoj
mreži putem intranet-a, ovaj način je lako implementirati, zato što koristi ugradjene Windows dijaloge
koji omogućavaju prijavu.
Ako korisnici pristupaju web sajtu preko Interneta, neophodno je koristiti forms-based
authentication. Ovaj način rada se uključuje preko obrasca prikazanog na slici ispod, a koji je dio
Administration Tool-a.
slika br.69 - Odabir Form zasnovane autentifikacijom
64
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
5.1.3. Roles
Roles omogućavaju kreiranje istih prava pristupa grupi korisnika. Jednom korisniku može biti
pridruženo više prava. Da bi koristili Roles, koji je podrazumjevano isključen, moramo ih uključiti
klikom na link Enable Roles u Security tabu. Kada osposobimo ovu opciju, možemo koristiti Create i
Manage Roles linkove koji se takodje nalaze u Security tabu. Na istom mjestu vršimo i brisanje.
slika br.70 - Kreiranje i upravljanje pravima pristupa
Kreiranje i administracija korisničkih naloga
Preko obrasca za kreiranje korisnika unosimo ime, lozinku, email adresu i sigurnosno pitanje sa
odgovorom. Dodjeljivanje prava korisniku vršimo preko check box-a. Podrazumjevano ASP.NET
zahtjeva unos najmanje sedam karaktera lozinke, što je moguće promjeniti naknadno. Korisnika je
moguće isključiti preko opcije Active, tako da ne bude važeći, ali da i dalje ostane u bazi podataka. Na
ovaj način moguće je eventualno aktiviranje istog korisnika.
Ako imamo veliki broj korisnika u bazi podataka, možemo ih lako pronaći preko Search kontrole.
Ova kontrola omogućava pretragu po imenu ili email adresi. U koliko ne znamo tačno ime korisnika ili
emaila, koristimo zvjezdicu (*) umjestio više karaktera, ili upitnik (?) umjestojednog karaktera.
slika br.71 - Kreiranje novog korisnika
65
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
slika br.72 - Upravljanje korisnicima
Kreiranje i upravljanje pravima pristupa Rules
Na sledećoj slici možemo vidjeti formu za kreiranje access role koji ograničava pristup svim ili
djelu web aplikacije. Kada želimo dodjeliti pravo koje će važiti na nivou cjele aplikacije, odabiremo
izvorni root direktorijum web aplikacije, i dodjeljujemo pravo. Tada će se ovo pravo primjeniti na svim
poddirektorijumima. Obično ostavljamo mogućnost svim korisnicima da vide našu početnu stranicu, a
ograničavamo pravo pristupa odredjenim poddirektorijumima. Na primjer, na slici ispod možemo vidjeti
kako se kreira pravilo za administracija direktorijum, i onemogućava pristup svim korisnicima.
Na drugoj slici vidimo kako se upravlja pristupima. Kada kliknemo na folder, prikažu nam se sva
prava koja su dodjeljena istom. Možemo mjenjati prava ili ih brisati. Medjutim za svaki folder može ostati
najmanje jedno pravo kojeg ne možemo izbrisati, i koje omogućava pristup svim korisnicima.Prava koja
se dodaju ispod osnovnog, imaju prednost kod primjene.
slika br.73 - Kreiranje prava pristupa stranicama foldera
66
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
slika br.74 - Upravljanje pravima pristupa
Membership i role provajder
Dodavanje prava i korisnika vršimo preko klase data provider koja sadrži kod za čitanje i pisanje
podataka iz users i roles tabela. Data provider koji omogućava rad sa članovima zove se membership
provider, a provajder koji omogućava rad sa pravima zove se role provider. Data provider koji se zove
AspNetSqlProvider, koristi se za rad sa podacima članovi i prava u SQL Server Express bazi podataka
koja se zove AspNetDb.mdf. Ova baza nalazi se u App_Data folderu web sajta, i kreira se automatski.
Pored podrazumjevanog načina smještanja podataka od korisnika i prava, data provider
arhitektura omogućava korišćenje različitih provajdera po potrebi. Na primjer, ako želimo podatke i prava
članova sačuvati u Oracle, ili MySQL bazu podataka, kreiraćemo custom membership provider.
Custom membership provajder jeste klasa koja nasledjuje MembershipProvider klasu.Pored ove,
role provajder klasa nasledjuje RoleProvider klasu. Nakon što implementiramo sve neophodne metode i
svojstva klase, u web.config fajlu dodajemo provajder kojeg će koristiti cjela aplikacija. Primjer je
prikazan na sledećoj šemi.
Prilagodjavanje podrazumjevanih parametara kod verifikacije u web.config fajlu:
<add name="AccessMembershipProvider"
type="Samples.AccessProviders.AccessMembershipProvider, SampleAccessProviders"
connectionStringName="AccessFileName"
enablePasswordRetrieval="false"
enablePasswordReset="false"
requiresUniqueEmail="false"
requiresQuestionAndAnswer="false"
minRequiredPasswordLength="1"
minRequiredNonalphanumericCharacters="0"
applicationName="SampleSite"
hashAlgorithmType="SHA1"
passwordFormat="Hashed"/>
67
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
5.1.4. Login kontrole
Nakon što ograničimo pristup odredjenim stranicama sajta, potrebno je omogućiti ovlašćenim
korisnicima logovanje i pristupanje zaštićenim stranicama. Nadalje tu su i druge funkcije kao što su
odjava (log out), omogućavanje korisnicima da se registruju samostalno, obnova ili promjena lozinke.
Kontrole koje se nalaze u Login grupi Toolbox-a, omogućavaju ovu funkcionalnost.
Login kontrola
Slika ispod prikazuje način kreiranja login stranice koja sadrži Login kontrolu. Login stranicu
potrebno je nazvati Login.aspx, iz razloga što ASP.NET poziva stranicu sa datim imenom kada pokuša da
autentifikuje korisnika.
Nakon što kreiramo stranicu Login.aspx, svu funkcionalnost logovanja realizujemo dodavanjem
Login kontrole koja se nalazi u Login grupi Toolbar-a. Login kontrola sadrži dva text box-a koji
omogućavaju korisniku unos imena i lozinke. Check box koji se takodje nalazi na Login kontrolu, pruža
mogućnost automatskog logovanja korisnika prilikom ulaska na web aplikaciju. Ako korisnik izabere ovu
opciju, aplikacija kreira trajni cookie koji sadrži autentifikacioni nalog authentification ticket.
Klikom na Log In dugme, provjerava se autentičnost korisnika, provjerom podataka u
membership bazi podataka. Nako što se pronadje korisnik u bazi, očitavaju se prava korisnika kako bi se
potvrdila autorizacija za traženom stranicom. U koliko je korisnik autentifikovan i autorizovan, kod
prosledjuje redirekciju na traženu stranicu.
Login stranica trebala bi uvjek da poziva stranicu preko HTTPS zaštićenog protokola, kako bise
osigurala privatnost podataka.
slika br.75 - Login kontrola u Web Forms dizajneru
Aspx kod Login kontrole:
<asp:Login ID="Login1" runat="server"
LoginButtonText="prijava" PasswordLabelText="lozinka:"
RememberMeText="Zapamti korisnika." TitleText="prijavi se"
UserNameLabelText="naziv:" Width="231px" onloggedin="Login1_LoggedIn">
</asp:Login>
atributi
opis
DisplayRememberMe
Odredjuje da li će biti prikazan RememberMe check box.
Podrazumjevano je prikazan.
Tekst u labelu od check boxa.
Odredjuje da li je selektovan RememberMe check box.
Tekst koji se prikazuje nakon pogrešnog unosa podataka.
RememberMeText
RememberMeSet
FailureText
slika br.76 – osnovni atributi Login kontrole
68
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
LoginStatus i LoginName kontrole
Slika ispod prikazuje kako se koriste LoginStatus i LoginName kontrole. Vidimo kako
LoginName kontrola prikazuje ime ulogovanog korisnika. LoginStatus sadrži Login link ako korisnik nije
ulogovan, i Logout ako je korisnik ulogovan.
Ove kontrole se primjenjuju jednostavnim prevlačenjem sa palete alata. Nako toga mjenjamo
svojstva kontrola po potrebi. Svojstva LoginText i LogoutText, LoginStatus kontrole služe za promjenju
teksta za prikaz na kontroli.
Kada korisnik klikne na Login link, LoginStatus kontrola preusmjerava korisnika na stranicu za
unos imena i lozinke. Klikom na Logout link, otvara se stranica za prijavu (Login.aspx).
Ako je korisnik ulogovan, LoginName kontrola će prikazati ime korisnika. Inače ova kontrola ne
prikazuje ništa, sve dok se korisnik ne uloguje. Medjutim, moguće je dodati tekst na ovu kontrolu.
slika br.77 - LoginName i LoginStatus kontrole prikazane u pretraživaču
Aspx kod LoginName i LoginStatus kontrole:
<asp:LoginView ID="LoginView1" runat="server">
<LoggedInTemplate>
Dobrodošao<br>
<asp:LoginName ID="LoginName1" runat="server" />
</LoggedInTemplate>
</asp:LoginView>
<asp:LoginStatus ID="LoginStatus1" runat="server" LoginText="prijavi se"
LogoutText="odjavi se" onloggedout="LoginStatus1_LoggedOut" />
69
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
atribut
opis
FormatString
tekst koji se prikazuje zajedno sa nazivom korisnika. Tekst koristi „{0}“
parametar koji se zamjeni sa nazivom korisnika, a proizvoljan tekst
možemo dodavati prije i posle ovog parametra.
slika br.78 – osnovni atrinuti LoginName kontrole
atribut
opis
LoginText
LogoutText
Tekst koji se prikazuje kada nije korisnik ulogovan.
Tekst koji se prikazuje kada je korisnik ulogovan.
slika br.79 – osnovni atributi LoginStatus kontrole
CreateUserWizard kontrola
Ako imamo samo nekoliko korisnika aplikacije, možemo koristiti Web Site Administration Tool
za kreiranje i upravljanje korisnicima, kao što je opisano ranije u tekstu. Nakon toga koristimo kontrole za
prijavu i odjavu. Medjutim, često se javlja potreba da se korisnici samostalno registruju na aplikaciju.
Ovu funkcionalnost realizujemo pomoću CreateUserWizard kontrole, kao što je prikazano na sledećoj
slici.
slika br.80 - CreateUserWizard kontrola sa uključenim smart tag menijem
70
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
PasswordRecovery kontrola
Može se desiti da korisnik zaboravi lozinku. PasswordRecovery kontrola rešava ovaj problem
automatizovanjem procesa obnove lozinke. Ovaj proces je opisan na slici ispod, a koristi se kada imamo
veliki broj korisnika sajta.
Kada koristimo ovu kontrolu, lozinka se prosledjuje korisniku putem email-a. Ovo znači da je
potrebno prethodno konfigurisati server da šalje mailove. Podrazumjevano, aplikacija će pokušati slati
mail putem SMTP servera lokalno on portu 25. MailDefinition elementom odredjujemo sadržaj mail-a.
slika br.81 - PasswordRecovery kontrola u Web Forms dizajneru
Aspx kod PasswordRecovery kontrole:
<asp:PasswordRecovery ID="PasswordRecovery1" runat="server">
</asp:PasswordRecovery>
ChangePassword kontrola
Ova kontrola koristi dva prikaza. Prvi za unos lozinke, a drugi za obavještenje o izvršenoj
promjeni. U prvo prikazu unosimo staru lozinku, i novu sa potvrdom. Ako je tačna stara lozinka, i nova
dva puta napisana jednako, lozinka će biti zamjenjena. Preko Url atributa odredjujemo stranicu kojaće se
otvoriti nakon klika na dugmad continue ili cancel.
slika br.82 - ChangePassword kontrola u Web Forms dizajneru
Aspx kod ChangePassword kontrole:
<asp:ChangePassword ID="ChangePassword1" runat="server">
</asp:ChangePassword>
71
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
LoginView kontrola
Kod primjene autentifikacije, potrebno je prikazati koji je korisnik ulogovan.Kontrola
LoginView prikazuje ime ulogovanog kortisnika. Ako korisnik nije ulogovan, prikazuje se link Log In.
To znači da kontrola sadrži dva prikaza, od kojih se prvi priazuje nepoznatim korisnicima (anonymous
users), a drugi prikazuje ime ulogovanog korisnika (authenticated user).
slika br.83 - LoginView kontrola u Web Forms dizajneru
Aspx kod LoginView kontrole:
<asp:LoginView ID="LoginView1" runat="server">
<LoggedInTemplate>
Dobrodošao<br>
<asp:LoginName ID="LoginName1" runat="server" />
</LoggedInTemplate>
</asp:LoginView>
Kombinovanje SSL-a i form-based authentication dobijamo kompletnu zaštitu koja je neophodna za ecommerce aplikacije.
5.2. Email
Kod web aplikacija često se javlja potreba za slanjem email-a. Na primjer, nakon izvršene
kupovine na e-commerce sajtu, aplikacija obično šalje email kupcu, da potvrdi naružbu. Ili, ako nastane
greška, aplikacija šalje email sa opisom greške korisničkoj podršci. Pored navedenog, korisnik koristi
mail, kako bi primio zaboravljenu lozinku.
Poznato nam je nekoliko klijentskih programa, kao što su Microsoft Outlook ili Outlook Express
koji omogućavaju slanje i primanje email poruka. Zapravo, ova vrsta aplikacija komunicira samail
server-om koji šalje i prima email poruke.
Na sledećem dijagramu možemo vidjeti način funkcionisanja email-a. Postoje dva protokola
preko kojih se vrši prenos mailova, a zovu se SMTP i POP. Kada pošaljemo email, poruka je poslana od
aplikacije na klijentovoj strani, prema mail serveru, koristeći SMTP protokol. Tada mail server koristi
SMTP protokol kako bi prosledio poruku mail serveru primaoca. Klijent koristi POP protokol za primanje
mail-ova sa client mail server-a.
Treća vrsta protokola zove se MIME Multipurpose Internet Mail Extension. Za razliku od SMTP i
POP, MIME se ne koristi za prenos email poruka. Umjesto toga, definiše na koji način je formatiran
sadržaj i fajlovi email poruke.
72
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
slika br.84 – kako funkcioniše email
metoda opis
SMTP
POP
Simple Mail Transfer Protocol koristi se za slanje mail poruka od jednog servera na drugi.
Post Office Protocol koristi se sa klijenta za preuzimanje mailova od servera. POP verzije
3, poznat kao POP3, najprimjenjivija je verzija, ali postoji i POP4.
Multipurpose Internet Mail Extension odredjujemo tip sadržaja koji se može poslati
preko poruke u obliku attachment-a.
MIME
slika br.85 – tri email protokola
Kreiranje email poruke
Sledi primjer kreiranja poruke koja će biti poslana na dvije adrese:
MailMessage mojMail = new MailMessage();
mojMail.From = new MailAddress("[email protected]");
mojMail.To.Add(new MailAddress("[email protected]"));
mojMail.To.Add(new MailAddress("[email protected]"));
konstruktor
opis
MailMessage()
MailMessage (od, prema)
MailMessage (od, prema,
predmet, tijelo_poruke)
Kreiranje prazne poruke.
Kreiranje e-mail poruke sa definisanim adresama pošiljaoca i
primaoca u obliku stringa ili MailAddress objekta.
Kreiranje mail poruke sa definisanim adresama posiljaoca,
primaoca, naslovom i tijelom poruke u obliku stringa.
svojstvo
opis
From
To
Subject
Body
IsBodyHtml
MailAddress objekat pošiljaoca poruke.
Kolekcija MailAddress objekata za primanje poruke.
Zaslov poruke u jednom redu.
Tijelo poruke.
Boolean vrednost koja pokazuje da li poruka sadrži HTML.
Podrazumjevana vrednost je False.
Kolekcija Attachment objekata.
Attachments
slika br.86 – konstruktori i svojstva MailMessage klase
73
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
metoda
opis
MailAddress(adresa)
MailAddress(adresa, ime)
Kreiranje odredjene email adrese.
Kreiranje odredjene email adrese sa imenom pošiljaoca.
slika br.87 – konstruktori MailAddress klase
Primjer koda za kreiranje email poruke sa carbon kopijom:
private void PosaljiEmailPorukuCC(string adresaPosiljaoca,
string imePosiljaoca, string adresaPrimaoca, string naslov,
string tijeloPoruke, string ccAdresa)
{
MailAddress dodajPosiljalac = new MailAddress(adresaPosiljaoca, imePosiljaoca);
MailAddress dodajPrimalac = new MailAddress(adresaPrimaoca);
MailAddress dodajCcAdresa = new MailAddress(ccAdresa);
MailMessage msg = new MailMessage(dodajPosiljalac, dodajPrimalac);
msg.Subject = naslov;
msg.Body = tijeloPoruke;
msg.CC.Add(dodajCcAdresa);
}
Drugi način kreiranja poruke:
MailMessage poruka = new MailMessage(adresaPosiljaoca, adresaPrimaoca, naslov, tijeloPoruke);
poruka.CC.Add(new MailAddress(ccAdresa));
slika br.88 – podešavanje SMTP parametara
74
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
Primjer koda za slanje poruke korišćenjem podataka iz web.confog fajla:
SmtpClient klijent = new SmtpClient();
klijent.Send(poruka);
Primjer koda za kreiranje i slanje poruke odredjenom serveru:
SmtpClient klijent = new SmtpClient("localhost");
klijent.Send(adresaPosiljaoca,adresaPrimaoca, naslov, tijeloPoruke);
konstruktor
opis
SmtpClient()
Kreiranje klijenta za slanje email-a primjenom parametara u
web.config fajlu.
Kreiranje klijenta za slanje email-a sa odredjenog SMTP servera.
Kreiranje klijenta za slanje email-a sa odredjenog SMTP servera
i porta.
SmtpClient(name)
SmtpClient(name, port)
metoda
opis
Send(message)
Send(od, kome, predmet,
tijelo_poruke)
Slanje odredjenog MailMessage objekta.
Kreiranje i slanje email poruke korišćenjem parametara od koga
šaljemo, kome, predmet i tijelo poruke.
slika br.89 – konstruktori i metode SmtpClient klase
Attachment u email poruci
Attachment je fajl koji se šalje sa email porukom. Uobičajeni tipovi atačmenta su tekstualni
fajlovi, word dokumenti, excel dokumenti, slike, zvuk i video fajlovi. Na šemi ispod možemo vidjeti
način kreiranja atačmenta i dodavanje u email poruku. Nakon što kreiramo objekat koristeći attachment
klasu, dodajemo isti u prostor za attachments mail poruke.
SMTP protokol je dizajniran za slanje tekstualnih poruka. Email atačment za binary fajl mora se
konvertovati u tekstualni format prije nego što se pošalje. Tada se tako tekstualni attachment konvertuje u
binarni, po primanju poruke. Osnovni formati za konvertovanje binarnih fajlova u tekst i obrnuto, zove se
UUEncode, i koristi se podrazumjevano. Pored ovoga, postoji i Base64 format za konvertovanje binarnih
fajlova.
Sintaksa za kreiranje attachment-a:
new Attachment(nazivFajla);
Prvi način kreiranja atačmenta i njegovo dodavanje u poruku:
MailMessage poruka = new MailMessage(adresaPosiljaoca, adresaPrimaoca, naslov, tijeloPoruke);
string adresaFajla = "C:\\Nemanja.pdf";
Attachment dokumenti = new Attachment(adresaFajla);
poruka.Attachments.Add(dokumenti);
Drugi način kreiranja atačmenta i njegovo dodavanje u poruku:
MailMessage poruka = new MailMessage(adresaPosiljaoca, adresaPrimaoca, naslov, tijeloPoruke);
string adresaFajla = "C:\\Nemanja.pdf";
poruka.Attachments.Add(new Attachment(adresaFajla));
75
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
HTML poruke
Email poruka podrazumjevano sadrži tekst bez formatiranja. Medjutim, možemo formatirati test
po potrebi, korišćenjem HTML preko MIME tipa. Kada dodjelimo vrednost True svojstvu IsBodyHtml
objekta MailMessage, omogućeno je korišćenje HTML tagova za formatiranje tjela poruke.
Primjer koji je prikazan na sledećoj slici poziva privatnu funkciju ConfirmationMessage koja
formatira HTML za poruku o potvrdi kupovine. Ova funkcija koristi osnovne HTML tagove za kreiranje
poruke sa slikom i tekstom. Potrebno je napomenuti to da se u slučaju dodavanja slike preko <img>
tagova, moramo dodati istu u attachment, kao što je prikazano na sledećem primjeru, inače slika neće biti
prikazana.
U studiji slučaja se po završetku narudžbe šalje mail naručiocu u kojem su detalji narudžbe.
Procedure za kreiranje i slanje jednostavne HTML poruke:
private void PosaljiPotvrdu(string adresaPrimaoca)
{
MailMessage poruka = new MailMessage("[email protected]", adresaPrimaoca);
poruka.Subject = "Detalji narudžbe";
poruka.Body = "Uspješno ste završili narudžbu!";
poruka.IsBodyHtml = true;
string adresaFajla = "C:\\Nemanja.pdf";
poruka.Attachments.Add(new Attachment(adresaFajla));
SmtpClient klijent = new SmtpClient("localhost");
klijent.Send(poruka);
}
private string PorukaPotvrdaNarudzbe(string adresaPrimaoca)
{
string poruka = "";
poruka = "<html><head><title>Potvrda narudžbe</title></head>" +
"<body><img src='banner.jpg' alt='Prodavnica Igracaka' />" +
"<br /><br /><h3>Završili ste narudžbu!</h3>" +
"</body></html>";
return poruka;
}
5.3. Obrada grešaka
Kada prilikom izvršavanja ASP.NET aplikacije dodje do greške, poziva se exception (izuzetak).
Ako exception nije obradjen od strane aplikacije, ASP.NET otvara stranicu za prikaz grešaka. Ova
stranica sadrži poruku o grešci, dio koda na kojem je greška nastala i druge informacije potrebne za brže
otklanjanje grešaka. Medjutim, ovu stranicu nije poželjno prikazivati korisnicima, već je potrebno
prikazati vlastitu stranicu za prikaz grešaka, koja će usmjeriti korisnika na pravu adresu, i dati potrebne
inforamcije. ASP.NET stranica za prikaz grešaka nam služi u razvoju aplikacije.
Četiri tehnike koje se mogu koristiti za obradu grešaka;
Prvi način podrazumjeva smještanje koda izmedju Try i Catch blokova. Tada možemo izvršiti
redirekciju na našu stranicu za prikaz grešaka.
Druga tehnika podrazumjeva smještanje koda u Page_Error proceduri koja se nalazi u kodu
stranice. Ova procedura se poziva kada nastane neobradjena greška na stranici. Sa ovog mjesta takodje
pozivamo našu stranicu za prikaz grešaka.
Kod treće tehnike smještamo kod u Application_Error proceduru koja se nalazi u global.asax
fajlu. Ova procedura se poziva ako ni jedna od dvije prethodne metode ne obrade grešku. Nakon toga
izvršavamo redirekciju na našu stranicu za obradu grešaka.
76
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
Poslednja tehnika hvatanja grešaka koristi customErrors element u web.config fajlu.Ova tehnika
se koristi kod hvatanja HTTP grešaka kao što su 404 – Not Found (nije pronadjena).
Back-button problem
Kada korisnik klikne na Back dugme na pretraživaču, za povratak na prethodnu stranicu,
pretraživač prikazuje lokalnu kopiju koja se nalazi u kešu, bez obavještavanja servera. Kao rezultat
dobijamo nesinhronizovane podatke izmedju session state-a i podataka na stranici pretraživača. Ovu vrstu
problema nazivamo back-button problem.
Na sledećoj slici je ilustrovan back-button problem aplikacije za elektronsku trgovinu. U ovom
slučaju, sadržaj korpe smješten je u session state, i prikazan na stranici. Pretpostavimo da korisnik izbriše
jedan od dva artikla, sto automatski mjenja podatke i u session state-u. Nakon toga, korisnik se predomisli
i klikne Back dugme kako bi vratio artikal u korpu, a session state i dalje sadrži samo jedan artikal.
Ako korisnik klikne na završetak kupovine, prikazaće se predračun samo sa jednim artiklom.
Medjutim, ovo zavisi kako je aplikacija kodirana. U najlošijem slučaju, back-button problem može
prouzrokovati rušenje aplikacije. U najboljem slučaju, Back dugme neće napraviti problem.
U suštini, postoje dva načina obrade back-button problema. Prvi način je onemogućavanje
vraćanja stranice iz keša (cache) koji koristi pretraživač. U ovom slučaju kada korisnik klikne na Back
dugme, stara srtranica neće biti prikazana, a umjesto nje biće poslan novi zahtjev serveru za stranicom.
Na ovakav način neće raditi aplikacija ako klijentov pretraživač ignoriše parametre stranice keša preko
response.
Drugi način rešavanja problema jeste kodiranje web stranice visokog nivoa sigurnosti koja će
prepoznati neodgovarajući zahtjev. Ovaj način se realizuje pomoću vremenskog pečata (timestamps), ili
slučajnog broja, kako bi se označila stranica. Zbog toga što ne postoji siguran način sprečavanja
prikazivanja stranice iz keša klikom na Back dugme, poželjno je korišćenje druge metode kada god je to
moguće.
Primjer back-button problema u Korpa.aspx stranici od ProdavnicaIgracaka web aplikacije:
1. Korisnik dodaje tri artikla u korpu. Podaci korpe smješteni su u session state, i sadrže artikle:
Automobil, Motor i Rubikon. Korpa u pretraživaču izgleda kao na slici ispod:
2. Korisnik odabire artikal Automobil i klikne na izbriši artikal dugme, kako bi izbrisao artikal iz
korpe. Artikal je izbrisan iz korpe u session state-u, a ažurirana stranica vraćena pretraživaču.
77
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
3. Korisnik se predomisli i klikne na back dugme na pretraživaču, smatrajući da će ovako vratiti
izbrisani artikal u korpu. Medjutim, pretraživač prikazuje prošlu stranicu iz lokalnog keša.
Na izgled, sve je u redu. Stranica prikazuje sve tri artikla, ali izbrisani artikal nije vraćen u session state.
Kako isključiti lokalni keš stranice u pretraživaču
Na sledećoj tabeli prikazane su četiri ASP.NET metode za sprečavanje pretraživača da lokalno
čuva stranice. Sve metode rade po principu slanja komandi preko HTTP zajedno sa stranicom. Medjutim,
može se desiti da neki pretraživači ignorišu ove komande, tako da ove metode nisu garant da će se
pretraživač tako i ponašati.
metoda
opis
Response.Cache.SetCacheability Odredjuje način na koji će stranica koristiti cache. NoCache
izbacuje caching.
Response.Cache.SetExpires
Odredjuje do kada cache stranice traje. -1 znači da je
istekao.
Response.Cache.SetNoStore
Odredjuje pretraživaču da ne koristi cache.
Response.AppendHeader
Dodaje header u objektu prilikom HTTP odgovora.
slika br.90 – metode koje podešavaju caching opcije
78
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
Kod za isključivanje caching-a stranice:
Response.Cache.GetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.Now.AddSeconds(-1));
Response.Cache.SetNoStore();
Response.AppendHeader("Pragma", "no-cache");
Korišćenje vremenskog pečata za zaobilaženje back-button problema
Na sledećem primjeru prikazan je najpouzdaniji način zaobilaženja back-button problema. U
kodu se koristi timestemp za odredjivanje validnosti stranice. Ova vrednost se čuva na dva mjesta, i to: u
view state i session state. View state se prosledjuje pretraživaču zajedno sa ostalim sadržajem stranice, a
session state se čuva na serveru.
Sledeći put kada korisnik zatraži stranicu, iz Page_Load procedure se poziva funkcija koja se
zove IstekloVreme. Ova funkcija očitava vremenski pečat iz view state i session state i uporedjuje
podatke. Ako su podaci identični, funkcija vraća vrednost False. Ako su različiti podaci, što znaci da je
korisnik vratio stranicu iz keša lokalne memorije preko Back dugmeta, funkcija vraća vrednost True.
Nakon toga, Page_Load procedura otvara posebnu stranicu na kojoj obavještava korisnika da je stranica
zastarila, i da ne može biti prikazana.
Procedure koje koriste vremenski pečat za izbjegavanje back-button problema:
protected void Page_Load(object sender, EventArgs e)
{
if (!IstekloVreme())
{
this.SacuvajVremenskiPecat();
}
}
protected void ObjectDataSource1_Inserting(object sender, ObjectDataSourceMethodEventArgs e)
{
if (IstekloVreme())
{
e.Cancel = true;
}
else
{
this.SacuvajVremenskiPecat();
}
}
private bool IstekloVreme()
{
if (Session[Parametri.VPSession] == null)
{
return false;
}
else if (ViewState[Parametri.VPViewState] == null)
{
return false;
}
else if (ViewState[Parametri.VPViewState].ToString() ==
Session[Parametri.VPSession].ToString())
{
return false;
}
else
{
return true;
}
}
79
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
private void SacuvajVremenskiPecat()
{
DateTime dateTime = DateTime.Now;
ViewState.Add(Parametri.VPViewState, dateTime);
Session.Add(Parametri.VPSession, dateTime);
}
Većina aplikacija visokog rizika igorišu back-button problem iz razloga što se podrazumjeva da
korisnik mora biti toliko upućen da samostalno izbjegne ovaj problem. Iz tog razloga mnogi e-commerce
sajtovi sadrže ovaj problem.
5.4. AJAX
Tokom nekoliko poslednjih godina web sajtovi su se promjenili, počevši od kolekcije statičkih
stranica, pa sve do kompleksnih i dinamičkih web aplikacija. Današnje web aplikacije po funkcionalnosti
sliče tradicionalnim desktop aplikacijama. Rich Internet application (RIA) su web aplikacije koje
omogućavaju korisnicima slično iskustvo po pitanju interfejsa, naprednih funkcionalnosti i brzog odziva,
kao desktop aplikacije.
Postoji više razvojnih okruženja koje možemo koristiti u izradi RIA, a tu spadaju Java applets,
Adobe Flash player i Microsoft Silverlight. Medjutim za svaki od navedenih razvojnih okruženja,
korisnik mora imati instaliran dodatak plug-in na web pretraživaču. Pored ovih, postoji jedno okruženje
koje je ugradjeno u sve moderne web pretraživače, a zove seAsynchronous JavaScript and XML (AJAX).
AJAX koncept
AJAX nije tehnologija za sebe. To je niz tehnologija koje zajedno omogućavaju programerima da
kreiraju RIA. Ove tehnologije omogućavaju stranici komuniciranje sa serverom za ažuriranjem stranice,
bez učitavanja cjelog sadržaja stranice.
Kao sto smo pomenuli ranije, web pretraživač šalje HTTP zahtjev, a server vraća sadržaj stranice.
Bez obzira da li stranica bila statička ili dinamička, po učitavanju stranice konekcija se zatvara. HTTP
zahtjev i odgovor obuhvata sadržaj cjele stranice. Ovo je ilustrovano na primjeru koji sledi.
Sa druge strane, ako stranica sadrži AJAX djelove, moguće je ažurirati web stranicu bez slanja
cjelog sadržaja prko HTTP. Ovo je ilustrovano u drugom primjeru. Na ovaj način AJAX prosledjuje samo
podatke koji su potrebni serveru. Tu spadaju informacije o dogadjaju, kao i sadržaj odredjenih kontrola.
Kada pretraživač primi odgovor od servera, dobijene podatke koristi kako bi ažurirao sadržaj djela web
stranice.
AJAX zahtjevi mogu se izvršavati neograničen broj puta. Medjutim, ako se ažuriraju djelovi
stranice koji nisu AJAX, potrebno je proslediti cjeli sadržaj.
slika br.91 – standardni request – response tok
80
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
slika br.92 – AJAX request – response tok
ASP.NET AJAX server kontrole
Na slici br.93 možemo vidjeti pet ASP.NET AJAX server kontrola koje koristimo za upravljanje
asinhronim osvježavanjem stranice. Ove kontrole omogućavaju ostalim kontrolama da budu dio
asinhronog postback-a, a nalaze se na paleti alata u AJAX Extensions grupi u Visual Studio-u.
ScriptManager kontrola je osnovna kontrola koja omogućava asinhroni rad stranice, te se zbog
toga mora nalaziti na stranici. AJAX kontrole mogu se nalaziti kako na content stranicama, tako i na
Master stranicama. Ako se postavi u Master stranicu, sve ostale stranice koje nasledjuju Master stranicu
mogu koristiti AJAX kontrole.
Potrebno je naglasiti da je moguće postavljanje samo jednog ScriptManager-a na stranici.
ScriptManagerProxy kontrola omogućava učitavanje JavaScript fajlova ili pozivanje servisa koje koriste
kontrole na stranici. Proxy je objekat kreiran na klijentskoj strani, i koji omogućava pristup servisima
pokrenutim na serveru. Kod primjene ScriptManagerProxy kontrole, proxy je kreiran automatski.
Nakon što dodamo ScriptManager kontrolu na stranicu, koristimo UpdatePanel kontrolu u koju
smještmo standardne ASP.NET server kontrole. Ove kontrole se ažuriraju kada god se aktivira asinhroni
postback. Omogućeno je imati više UpdatePanel-a na jednoj stranici. Pored ovoga možemo dodavati
kontrole i izvan UpdatePanel-a. Medjutim ako se aktivira dogadjaj na jednoj od ovih kontrola, osvježava
se cjela stranica.
Asinhroni postback se brže izvršava od full postpack-a. Može se desiti da je za osvježavanje,
asinhronom postback-u potrebno nekoliko sekundi za izvršenje. U tom slučaju koristimo vizualni
indikator koji pokazuje da je postback u procesu izvršavanja. Ovu mogućnost vršimo preko
UpdatePreogress kontrole.
Ako želimo aktivirati asinhroni postback u intervalu, koristimo Timer kontrolu.Prečesto
pozivanje asinhronog postback-a, može dramatično smanjiti performanse servera.
svojstvo
opis
ScriptManager
Omogućava korišćenje ASP.NET AJAX kontrola, učitava ASP.NET AJAX
client-side framework, i upravlja client-side JavaScript kod.
Proširuje scripting servis ScriptManager kontrole.
Sadrži server kontrole koje se ažuriraju preko asinhronog postback-a.
Vizuelno prikazuje da je asinhroni postback u procesu izvršavanja.
U odredjenom intervalu poziva asinhroni postback za ažuriranje
UpdatePanel-a sa kontrolama.
ScriptManagerProxy
UpdatePanel
UpdateProgress
Timer
slika br.93 – ASP.NET AJAX server kontrole
81
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
ScriptManager kontrola
- možemo koristiti samo jedau ScriptManager kontrolu po stranici. Ovo uključuje master i content
stranicu. Ako ScriptManager smjestimo u master stranicu, možemo je korisitit u content stranicama
koje nasledjuju master stranicu. Ako se nadje više od jednoe ScriptManager kontrole na stranici,
nastaje izuzetak Invalid Operation.
- ScriptManager kontrola se takodje može koristiti za učitavanje i upravljanje JavaScript fajlovima, za
registrovanje web servisa web services ili WCF services, tako da im mogu pristupati JavaScript kod
na klijentskoj strani.
ScriptManagerProxy kontrola
- ScriptManagerProxy kontrola omogućava učitavanje JavaScript fajlova i registrovanje WCF servisa
ili web servisa. Može se primjeniti na content stranici ako master stranica već sadrži ScriptManager
kontrolu.
UpdatePanel kontrola
- UpdatePanel kontrola jeste kontejner za smještanje drugih serverskih kontrola koje se ažuriraju tokom
asinhronog osvježavanja stranice (asynchronous postback). Sve kontrole unutar UpdatePanel kontrole
će se ažurirati u isto vreme. Jedna stranica može sadržati više UpdatePanel kontrola, svaka sa
odvojenom grupom kontrola.
UpdateProgress kontrola
- UpdateProgress kontrola realizuje indikator koji znači da je asinhroni postback u izvršavanju. Na ovaj
način korisnik zna da treba čekati dok se proces ne završi prije nego bilo šta uradi na stranici.
Timer kontrola
- Kada jedna ili više UpdatePanel kontrola treba da se ažurira automatski, koristimo Timer kontrolu
koja koja periodično osvježava djelove stranice.
ASP.NET AJAX Control Toolkit
Primjena ASP.NET AJAX Control Toolkit čini stranicu više dinamičnom, i vizuelno uljepava
izgled kontrola. Ovo nije obavezna komponenta ASP.NET AJAX-a, i nije ugradjena u Visual Studio
2010. Umjesto toga, ove kontrole su dio open source projekta koji je dostupan na Microsoft-ovom
Codeplex web sajtu. Preuzimanje i upotreba su besplatni.
Na sledećoj tabeli su prikazane neke od osnovnih kontrola u toolkit-u. Ove kontrole proširuju
funkcionalnost postojećih ASP.NET kontrola. Na primjer, Calendar kontrola proširuje funkcionalnost
TextBox kontrole.
Toolkit sadrži preko četrdeset kontrola. Detaljan opis ovih kontrola možemo pronaći na prvom
linku prikazanom ispod. Za preuzimanje kontrola, koristimo drugi link.
ASP.NET AJAX Control Toolkit je razvijen od strane volontera, i nije podržan od Microsoft-a. Iz
tog razloga, razvijaoci ovog alata su odgovorni za izdavanje sigurnosnih zakrpa. Ako imamo već
objavljen sajt koji koristi neke od ovih alata koji sadrže sigurnosne slabosti, potrebno je preuzeti zakrpu i
prekompajlirati sajt. Iz tog razloga poželjno je vremenom posjećivati navedene stranice u potrezi za
eventualnim ispravkama bagova.
Web sajt sa primjerima primjene toolkit-a:
http://www.asp.net/ajax/ajaxcontroltoolkit/samples/
Web sajt za preuzimanje toolkit-a:
http://www.ajaxcontroltoolkit.codeplex.com/
82
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
kontrola
opis
Accordion
Sadrzi više panela sa sadržajem, ali samo jedan može biti
prikazan.
Služi za mjenjanje pozicije, veličine, prozirnosti i boje kontrole.
Koristi se za kreiranje dinamičkih efekata.
Prikazuje kalendar u pop-up prozoru, za lagan unos datuma.
Klikom prikazuje/sakriva kontrole.
Omogućava korisniku pomjeranje panela sa kontrolama.
Prikazuje meni prevlačenjem miša preko kontrole.
Prikazuje gore i dole strelice text box kontroli, za mjenjanje
numeričkih vrednsti.
Unos vrednosti povlačenjem klizača.
Prikazuje više slika u jednom image tagu. Slike se mjenjaju
automatski, ili na korisnikov klik napred i nazad.
Prikazuje više panela u obliku taba.
Prikazuje poruku u praznoj text box kontroli. Tekst poruka
nestaje kada korisnik klikne na tekst box.
Mjenja check box sa dvije slike koje predstavljaju stanje
odabran ili ne.
Animation
Calendar
CollapsiblePanel
DragPanel
HoverMenu
NumericUpDown
Slider
SlideShow
TabContainer
TextBoxWatermark
ToggleButton
slika br.94 – osnovne ASP.NET AJAX kontrole sa toolkit-a
5.5. Primjena ASP.NET aplikacije
Deployment predstavlja proces kopiranja ASP.NET web aplikacije sa razvojnog okuriženja na
javni web server, na kojem će raditi aplikacija. ASP.NET omogućava nekoliko načina objavljivanja web
aplikacije.
Tri načina primjene ASP.NET aplikacije
Na sledećoj tabeli prikazana su tri osnovan načina primjene ASP.NET aplikacije. Prvi se zove xCopy
deployment iz razloga što se ovom metodom jednostavno kopiraju fajlovi koje koristi aplikacija, na javni
server. Da bi smo kopirali fajlove, koristimo DOS komandu XCopy ili Copy Web Site komandu iz Visual
Studio-a.
Drugi način primjene web sajta zove se precompiled deployment. Ovaj način primjene prvo
kompajlira stranice aplikacije prije nego ih objavi na serveru. Nakon toga sledi kopiranje. Komanda za
ovu vrstu primjene nalazi se u Visual Studio-u, a zove se Publish Web Site. Pored ovog načina,
kompajlirati stranice možemo i uz pomoć aspnet_compiler komande iz command prompt-a.
Treći način prmjene web aplikacije podrazumjeva kreiranje Web Setup projekta, koji kreira
Windows Setup program aplikacije. Ovako kreiran Setup pokrećemo na javnom serveru, i instaliramo
aplikacije.
Koji od ovih vrsta primjene web aplikacija je najbolji, zavisi od potreba svake aplikacije. XCopy
deployment je najjednostavniji, i često se koristi za kopiranje aplikacije na različite servere radi testiranja.
Isto tako, XCopy je najbolje rešenje kod primjene malih aplikacija.
83
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
Precompiled deployment ima nekoliko prednosti u odnosu na XCopy deployment.Na primjer,
prekompajliranjem obezbjedjujemo bolje performanse prvim korisnicima koji pristupaju sajtu.Sa druge
strane, obezbjedjuje veću sigurnost, zato što ne kopira izvorni kod aplikacije na web server.
Za aplikacije koje objavljujemo na jedan ili više servera, precompiled deployment je najbolje
rešenje. Medjutim, ako distribuiramo aplikaciju na više različitih sefvera, bolje je koristiti Setup program.
slika br.95 - Obrazac za kopiranje web sajta
slika br.96 - Objava web sajta
84
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
6. Zaključak
U radu smo se bazirali na ASP.NET Web Form razvoj koji ima prednosti i nedostataka. Microsoft
je pokušao napraviti Windows Form model za razvoj web aplikacija. Ovakav model naročito je privlačan
VB 6.0 programerima, od kojih je većina prešla na ASP.NET Web Form razvoj bez poznavanja osnova
HTTP i web-a. Kako bi realizovao Windows Form model, Web Form sadrži event-driven pristup,
Viewstate i Postback. Viewstate i Postback su napravili mnogo problema i dodatno zakomplikovali
strukturu Web Form aplikacija. Mnoge web stranice sadrže hiljade kilobajta ViewState-a koji može
znatno da smanji performanse.
Drugi problem je što se preko iste klase prikazuju podaci, i očitava korisnički unos, zbog čega
primjena Unit Testing-a je skoro nemoguća. Unit testing je veoma važan kod razvoja savremenih
aplikacija.
Prednosti Web Form razvoja su sledeće:
- omogućava RAD (Rapid application development) razvoj
- jednostavan model za razvoj data-driven LOB (Line of business) aplikacija
- Sadrži rich kontrole
- poznat model za windows form programere
85
Izrada web aplikacija primjenom ASP.NET 4 tehnologije
Nemanja Nakić
Literatura
[1.] Microsoft Press: Microsoft ASP.NET 4 Step by Step, Washington 2010
[2.] Mike Murach & Associates, Inc.: ASP.NET 4 Web programming with C#, United States 2011
[3.] Person Education Inc.: Sams Teach Yourself ASP.NET 4 in 24 Hours, United States 2010






http://msdn.microsoft.com/en-us/library/e468hxky.aspx (01.03.2012)
http://msdn.microsoft.com/en-us/library/ms178329.aspx (03.03.2012)
http://msdn.microsoft.com/en-us/library/yh26yfzy.aspx (04.03.2012)
http://msdn.microsoft.com/en-us/library/t32yf0a9.aspx (12.03.2012)
http://msdn.microsoft.com/en-us/library/ykzx33wh.aspx (20.03.2012)
http://blogs.msdn.com/b/santhoshonline/archive/2009/05/15/ssl-redirection-using-asp-net.aspx
(21.03.2012)
86