1 Programování v prostředí.net 9 Přednáška 9. Přednáška ASP.NET2 Outline Anatomie ASP.NET Page, HTML Controls, Web Controls Common look and feel (Mast...
Programování v prostředí .NET 9 Přednáška 9. ASP .NET
O tli Outline y Anatomie ASP.NET ASP NET
y Page, HTML Controls, Web Controls y Common look and feel
y (Master pages, Skins, Themes, Personalization)
y State St t Management M t
y (Control State, View State, Session State,
Application State)
y Bezpečnost
y Konfigurace K fi
2
D Dynamický i ký web b y Stránka je tvořena strojově před odesláním
klientovi y Webové aplikace
y Výměna informací s uživatelem y Light weight klient
y Data driven web y Spolupráce p p s databází
y Systémy pro tvorbu dynamických webů y PHP, JSP, ASP .NET HTTP Response (HTML)
3
HTTP Request (ASPX, PHP ...)
WWW Server dynamicky generuje HTML podle kódu v ASPX, PHP...
ASP .NET NET y Server má k dispozici .NET class library
y K programování lze použít libovolný jazyk .NET –
C# y Stránka se kompiluje!
y Popis se naparsuje a přeloží do assembly y Po P mírné í é prodlevě, dl ě pěkný ěk ý ffofr f
y Separace kódu od vzhledu – code behind/beside y WebForms
y Unifikace rozhraní kontrolek y Množství hotových ý kontrolek y Tvorba uživatelských kontrolek
y Další výhody... 4
P ž d k na ASP Požadavky ASP. NET y Web server
y Vývoj y IIS 5.0 (Win 2000, Win XP prof.) y VS 2005 – vlastní web server y Nasazení y IIS 6.0 (Win Server 2003)
y .NET Framework
y aspnet_regiis.exe -i
5
ASP .NET, NET IIS, IIS ISAPI a spol. l y IIS – obsluha požadavku na html y Obsluha požadavků na jiný typ
y Internet te et Se Server e Application pp cat o Programming og a g
Interface extensions y Win32 DLL knihovny
y aspnet_isapi.dll – aspx, ascx ....
y Spolupráce IIS s aspnet_isapi.dll y IIS 5.0 – aspnet_wp.exe y IIS 6.0 – přímo aspnet_isapi.dll y Vyšší integrace y Vyšší rychlost
6
Z Zpracování á í požadavku ž d k ASP .NET NET
7
S t System.Web.HttpContext W b Htt C t t y Obsahuje veškerá data požadavku y HttpRequest Request y HttpResponse p p Response p y HttpSessionState Session y HttpApplicationState Application y IHttpHandler Handler y IDictionary Items
y Je snadno d přístupná ří á
y Metoda ProcessRequest rozhraní IHttpHandler y Property P t Context C t t v třídách třídá h Page P a
HttpApplication
8
S t System.Web.HttpApplication W b Htt A li ti y Umožňuje zásah do HTTP roury reagováním
na její události y Lze oddědit novou
y Global.asax y Applikační soubor ASP .NET y Obsahuje definici aplikace y Je naparsován a je vytvořen potomek třídy HttpApplication y Dobrovolný
y Při modifikaci je běžící aplikace restartována
9
S t System.Web.IHttpHandler W b IHtt H dl void ProcessRequest(HttpContext context); bool IsReusable {get;}
y Uživatelské handlery y
y Široké možnosti uživatelského rozšíření
y Důležitý ý implementátor p rozhraní jje Page g y Obsluha aspx
y Obsluha daného typu se přiřazuje v
konfiguraci web.config v sekci httpHandlers p
10
S t System.Web.IHttpModule W b IHtt M d l void Init(HttpApplication context); void Dispose(); y Umožňují další způsob úpravy http roury y Koexistují s http aplikací y Vytváří se s aplikací y Ruší se s aplikací
y V metodě Init se zaregistrují k příslušným y událostem
y Obvykle Ob kl se využívají ží jí pro pre- nebo b post-
processing požadavku, případně pro filtraci
11
Page y Základ WebForms y Obsah stánky
y Direktivy e t y <%@ %@ Page age % %> y Markup stránky (HTML, CSS, JavaScript) y Bloky server side kódu y <script runat=“server”> y <% %>, <%= %> y Komentáře y <%-- --%>,
y Atribut runat
y Tag s runat=“server” je zpracováván na
serveru
12
Příkl d Příklad <%––Direktiva––%> <%@ Page language="C#" %> <%––Markup––%> Inline code test <%––Blok server side kódu––%> <script runat="server"> private void ButtonClick(object sender, EventArgs e) { Response.Write("HelloWorld."); }
13
Z Zpracování á í APSX y Soubor aspx se naparsuje, přeloží do potomka
Page a uloží do assembly
y Skriptové bloky s atributem runat=server se vloží
přímo do definice třídy
y Bloky mohou obsahovat pouze metody a definice
atributů y Bloků ů může ůž být ý více í jak jeden
y Bloky <% %> se vloží spolu s HTML do metody,
při renderování stránky y která se volá p
y protected virtual void Render(HtmlTextWriter);
y S každou serverovou kontrolkou je do třídy přidán
atribut příslušného typu
y Poté se volá metoda ProcessRequest 14
O Organizace i stránky t á k y Code Inline
y Prezentační i business logika v jednom souboru y Nepřehledné p
y Code Behind – ASP .NET 1.x
y Oddělení kódu stránky do spec. souboru aspx.cs <%@ Page Language="C#" Inherits="className" Src="fileName"%>
y Code Beside – ASP .NET NET 2 2.0 0
y Oddělení generovaného kódu od uživatelského <%@ Page g Language="C#" g g Inherits="className" CodeF ile="fileName"%>
y Lze použí i pro ostatní typy – asax, ascx, master 15
P Page - detaily d t il y Dědí od System.Web.UI.Page y Velké množství vlastností
y Základní á ad p prvky y – reference e e e ce na a instance sta ce
důležitých tříd
y Application, Cache, Request, Response,
Server Session Server, Session, Trace Trace, User
y Další důležité vlastnosti y IsPostBack–rozlišení zda je stránka zpracovávaná poprvé nebo jako reakce na odeslání z klienta y Controls – kolekce všech server side uživatelských prvků na stránce y ErrorPage – stránka, na kterou je zpracování přesměrováno v případě neošetřené výjimky 16
Ži t í cyklus Životní kl stránky t á k y Události y y y y y y y y y y y
PreInit Init – před obnovením stavu InitComplete PreLoad Load – po obnovení stavu LoadComplete Zpracování událostí ovládacích prvků PreRender PreRenderComplete SaveStateComplete Unload
y Implicitní přiřazení obsluh událostí
y <%@ Page AutoEventWireup="true"…%> y Obsluhy v metodách Page_XXX
17
P Page - formulář f lář y Server side formulář
y Téměř všechny server side ovládací prvky musí být
definovány uvnitř server side formuláře y … y Single Form model
y Každá ASP.NET stránka - maximálně jeden server
side formulář y Lze mít další klasické HTML formuláře
y PostBack = odeslání formuláře zpět jeho stránce y První zobrazení (např. (např přes odkaz) není PostBack y Rozlišení vlastností IsPostBack
18
K t lk fformuláře Kontrolky lář y Kontrolky označené atributem
runat=server existují i na serveru y Každé kontrolce přísluší proměnná – název lze určit atributem id y Každý element HTML může mít runat=server atribut
19
VIEWSTATE y Elementy, Elementy jejichž hodnoty se neukládají jako
proměnné při POST se serializují do VIEWSTATE y Skrytý y ý element input
y
y value obsahuje úložný prostor, prostor ze kterého se čte
hodnota kontrolek
y Hodnoty se obnovují po události Page.Init a
před událostí Page.Load y bool EnableViewState {g {get; ; set;} ;}
y U všech kontrolek lze určit, zda se budou do
VIEWSTATE serializovat
20
Udál i serverových Události ý h kontrolek k l k y Serverové kontrolky mohou generovat události y Přenos informací o událostech - obdoba
VIEWSTATE
y Obsah je plněn java skriptem, který je generován
APS .NET y Události Udál i jsou j obslouženy b l ž po události dál i Page.Load a před událostí Page.Prerender 21
K t lk ASP .NET Kontrolky NET
y Základem třída System.Web.UI.Control y y Více typů ovládacích prvků
y Stránky y HtmlControls Ht lC t l y Server side verze HTML tagů y WebControls y Rozšiřitelná š ř l á sada d různorodých ů dý h uživatelských ž l ký h prvků ků y ValidationControls y Speciální typ WebControl, provádí validaci uživatelského vstupu y WebParts y Speciální typ WebControl, součást portálového f frameworku k y LiteralControl y Reprezentuje text stránky, který nemá runat atribut
22
Tříd C Třída Control t l y Některé vlastnosti y Controls, EnableTheming, EnableViewState,
Page, Parent, SkinID, Visible y ID
y Odpovídá ID atributu kontrolky v markupu
y Pokud není přiřazen, vygeneruje ASP.NET vlastní
y UniqueID y Skutečný server side identifikátor ovládacího prvku y Řeší problém více instancí prvku se stejným ID (např. (např u kontrolek definovaných šablonou)
y Události
y Init, Load, PreRender, Unload, y DataBinding, Disposed 23
Ht lC t l HtmlControls y Jmenný prostor System.Web.UI.HtmlControls y Potomci třídy HtmlControl
y Vlastnosti y Attributes, Disabled, Style, TagName
y Každý HTML tag lze převést na server side
ovládací prvek Æ atribut runat="server" y Ke každému takovému tagu je vytvořen příslušný typ yp y Těsně kopíruje jeho vlastnosti y Kopíruje také jejich heterogenní interface y ASP .NET NET naštěstí š ě í definuje d fi j ucelenější l ější set kontrolek: k l k
Web kontrolky
24
W bC t l WebControls y Jmenný prostor System.Web.UI.WebControls y Ucelenější systém kontrolek y Unifikovaný ý interface
y Existence několika komplexních kontrolek y Calendar y DataGrid y DataList
y Systém vázání dat
y Možnost vytvářet vlastní kontrolky
y Kontrolky se se většinou renderují jako jeden či
více HMTL kontrolek – odstíněno od uživatele
25
Uži t l ké kontrolky Uživatelské k t lk y Dědí od
y Control y Základní funkčnost y Žádné specifické UI y Pro kontrolky vzniklé agregací y WebControl y Podpora UI
y Mohou implementovat
y System.Web.UI.INamingContainer y Repeater y System.Web.UI.IPostBackDataHandler y TextBox y System.Web.UI.IPostBackEventHandler y Button
26
J d d há k Jednoduchá kontrolka t lk y Oddědit od Control nebo WebControl y Přidat data a logiku kontrolky y Překrýt metodu Render R d
y Kompilovat do assembly
y Nakopírovat k í assembly bl d do adresáře d ář bin y Zaregistrovat kontrolku
y <%@ Register TagPrefix="Custom"
Namespace="CustomControls" Assembly = "C t C t l " %> "CustomControls"
27
K Komponovaná á kontrolka k t lk y Celá stránka lze převést na uživatelskou y y y y y
y
28
kontrolku Odstranit html,, body y a form tagy gy @Page na @Control Definovat atribut className Změnit příponu na ascx <%@ @ Register g TagPrefix=“Acme” g TagName=“Login” Src=“~\controls\login1.ascx” %> Při použití techniky code-beside dědit od UserControl
C Common look l k and d ffeell y Zajišťuje konzistenci vzhledu stránek celé
aplikace y Konzistence struktury – Master Pages y Konzistence vzhledu – Themes a Skins y Themes – styly pro výsledné stránky
y Skins – jednotný vzhled pro WebConstrols
y Perzistentní uživatelské nastavení –
Personalisation
y Silně typový přístup
y Ukládáno do databáze – neomezená životnost 29
M t P Master Page y Soubor .master
y Výsledná třída potomkem
System.Web.UI.MasterPage y Jediným rozdílem od běžného .aspx aspx souboru je direktiva Master a WebControl ContentPlaceHolder
y Direktiva <%@ Master %>
y Atribut MasterPageFile pro hierarchii
y Obsahuje alespoň jeden ContentPlaceHolder y ContentPlaceHolder je nahrazen obsahem
definovaným v tzv. ContentPage (.aspx souboru) y Musí mít id
30
<%--obsah který se zobrazí, pokud se nepodaří nahrazení--%>
M t P Master Page – Content C t tP Page y Nastavení MasterPage g p pro stránky y
y Pro jeden .aspx soubor <%@ Page MasterPageFile="file.master"Title="Pagetitle"%> y Pro celou aplikaci – web.config <pagesmaster="file.master" /> y Dynamicky (programově) pro jednu stránku y V obsluze události PreInit nastavit MasterPageFile
y Veškerý V šk ý obsah b h ContentPage C t tP musíí být uzavřen ř v nějakém ěj ké
bloku Content
<%--obsah <% obsah pro daný ContentPlaceHolder ContentPlaceHolder--%> %>
y ContentPlaceHolderID svazuje obsah s konkrétním
ContentPlaceHolder v Master Page
y Každý Content musí odkazovat na jiný ContentPlaceHolder y Odkazovaný ContentPlaceHolder musí existovat
y •Přístup k Master Page – vlastnost Master 31
y P Pro silné il é typování á í direktiva di k i <%@ %@ MasterType%> M T % <%@ MasterType VirtualPath="file.master"%>
Themes Th y Theme je skupina souborů, které řídí vzhled
stránek (skin, CSS styly, obrázky), y Každé Theme má vlastní adresář v App_Themes y Název adresáře Theme jednoznačně identifikuje
y Nastavení theme
y P Pro jeden j d .aspxs oubor b <%@ Page Theme="ThemeDirectoryName"%> <%@ Page StyleSheetTheme="ThemeDirectoryName"%> y Pro celou aplikaci –web.config <pagestheme="ThemeDirectoryName" /> <pagesstyleSheetTheme="ThemeDirectoryName" <pagesstyleSheetTheme= ThemeDirectoryName /> y Dynamicky (programově) pro jednu stránku y V obsluze události PreInit nastavit Theme nebo St l Sh tTh StyleSheetTheme
32
Skins Ski y Skin -.skin soubor = styl y p pro ovládací p prvky y
y Obsahuje vizuální nastavení kontrolek a šablon, např. y V kódu stránky y y Centralizované nastavení vlastností pro stejné prvky y Při více různých skinech pro stejný ovládací prvek nutné
odlišit atributem SkinID
y SkinID je vlastnost definovaná ve třídě Control y Možno nastavit v obsluze události PreInit
y V Ve skinu ki l nastavit lze i jen j některé ěk é vlastnosti l i y Pro některé kontrolky skin vůbec nastavit nejde
y Skiny lze potlačit
33
y Vlastnost EnableTheming definovaná ve třídě Control y Ovlivňuje jen skiny, neovlivňuje CSS styly v Theme y Hodnota false potlačí používání skinů na ovládacím prvku a všech jeho vnořených ovládacích prvcích y Lze nastavit pro celou stránku (programově nebo direktivou) <%@ Page EnableTheming="false"%>
P Personalisation li ti y Vestavěný mechanismus pro perzistentní uložení uživatelských
dat
y Není třeba vytvářet vlastní back-end, používá se systém
poskytovatelů (Provider)
y Potomek oto e ttřídy dy Syste System.Web.Profile.ProfileProvider . eb. o e. o e o de y Výchozí nastavení je AspNetSqlProvider Æ soubor aspnetdb.mdfv adresáři
App_Data
y Podpora ověřených i anonymních uživatelů
y Definování struktury uchovávaných informaci ve web.config web config <profile> <providers /><% nastavení providera%> <properties> <% definice vlastností a skupin vlastností profilu %>
y ASP.NET se stará o p parsování a dynamické y vytvoření y třídy, y, která
je potomkem ProfileBase y Přístup z instancí tříd HttpContext nebo Page vlastností Profile 34
P Personalisation li ti y Definice vlastnosti
y Přístup Profile.MyProperty y Některé další atributy y allowAnonymous – ukládání hodnoty pro anonymní uživatele (výchozí hodnota: false) – musíbýt povolen anonymní přístup y defaultValue – počátečníhodnota vlastnosti y type – plné jméno, assembly(výchozí hodnota: String) y readOnly – vlastnost je jen pro čtení (výchozí hodnota: false) y serializeAs – způsob uložení, možnosti: Xml, Binary, String a ProviderSpecific (výchozí hodnota: String)
y Definice skupiny vlastností
y Přístup ří Profile.MyGroup.MyProperty 35
Ukládá í stavové Ukládání t é iinformace f y Důležitý prvek dynamiky webu
y Umožňuje, aby web ineragoval s uživatelem y ASP .NET NET zavádí zobecnění a kateforizaci
stavu
y Stav aplikace (Application state state, Cache) y Stav realce (Session state)
y Stav zobrazení (View state)
y Stav koláčků (Cookie state)
36
Htt A li ti St t HttpApplicationState y Základní způsob p uchování stavu aplikace p y Stav aplikace = globální proměnné
y y y y
Dostupná např. přes vlastnost stránky Application Name Value kolekce Name-Value Přístup do ApplicationState přes indexer Důležité metody y Add, Clear, Get, Set, Remove y Jednotlivé metody jsou thread-safe y Lock, UnLock y Ošetření synchronizace pro kombinace volání Application.Lock(); MyObjectobj = (MyObject)Application["MyKey"]; obj.ChangeMyObject(); bj Ch M Obj t() Application["MyKey"] = obj; Application.UnLock();
37
S t System.Web.Caching.Cache W b C hi C h y Vlastnost Cache stránky nebo instance
HttpContext y Přístup pp přes indexer - Name-Value y Čtení z Cache a zápis do Cache jsou threadsafe y Pro sled operací nutno řešit synchronizaci
y Důležité metody Cache y Add, Insert, Remove
y Konstanty Cache
y NoAbsoluteExpiration,
NoSlidingExpiration
38
Htt S HttpSessionState i St t y Property Session třídy Page y Indexery y string y int
y bool IsCookieLess (read only)
y bool IsNewSession (read ( d only) l ) y int Timeout (read/write, v minutách) 39
Session State Management y Načítání a ukládání stavu je náročné y Ne každá stránka ho potřebuje
y Atribut EnableSessionState E bl S i St t direktivy Page P y False = nenačte se, nezapíše se
y Readonly Readonl = načte se, se nezapíše se
y True = načte se, zapíše se, implicitní hodnota
y Stav relace je možno ukládat i mimo proces
serveru (důležité pro server farmy etc etc.)) y Příslušný provider – SQL Server
40
C ki Cookies y Cookie reprezentuje p j Name-Value dvojici j (p (pouze
string) y Cookies jsou posílány při každém požadavku na server y Request.Cookies
y V odpovědi může server poslat stejná cookie s
novými parametry nebo přidat nová y Response.Cookies
y Mohou se uchovávat v prohlížeči y Mohou M h být v prohlížeči hlíž či vypnuty t y Třída System.Web.HttpCookie
y Mezi základní vlastnosti p patří Expiress p y Nastavuje počet dní, po které se máCookie v prohlížeči uchovávat
41
Vi View State St t y Status zobrazení
y Týká se vždy jen po sobě následujících
požadavků na tutéž stránku y Realizováno jako skrytá položka všech formulářů na stránce, která obsahuje serializovanou stavovou informaci y Obsahuje stavové informace o všech serverových kontrolkách y Reprezentován třídou System.Web.UI.StateBag y Dostupný přes vlastnost ViewState y Name-Value kolekce
y View State lze zakázat 42
C t l St Control State t y Novinka v ASP.NET 2.0 y Součást běžného ViewState, kterou nelze vypnout y Uchování stavu nezbytného ke správné funkčnosti
ovládacích prvků y Obecné pravidlo: Všechny private nebo protected vlastnosti, které je třeba mezi požadavky uložit by měly být v Control State y Implementace ponechána na programátorovi nového ovládacího prvku y Serializace S i li a deserializace d i li ukládaných klád ý h hodnot h d t y Přepsání metod LoadControlState a
SaveControlState y Načtení Control State nutné volat manuálně y V obsluze události Init volat metodu
RegisterRequiresControlState
43
B Bezpečnost č t Ne každý je tím kým se býti zdá y Uživatel by se měl přesvědčit o identitě
serveru y Server by se měl přesvědčit o identitě uživatele
y Přidělit některým uživatelům některá práva
(authorization) y Zkontrolovat identitu uživatelů (authentication) 44
B Bezpečnost č t - autentikace t tik y Windows autentikace
y Ověření ponecháno na IIS y Intranetové aplikace
y Impersonalizace /
y Forms ověření
y V IIS S naveno na Anonymous y
y Internetové aplikace 45
y Třída Tříd FormsAuthentication h i i
B Bezpečnost č t - autorizace t i
y Po ověření jje nutné zjistit j zda má uživatel
oprávnění požadovat daná data/stránky y Sekce authorization ve web.config
y Povolení nebo zakázání nějakého přístupu <deny …/>
y Atributy y users – uživatelská jména oddělená čárkou y ? - anonymní uživatel, * - vše y roles l – uživatelské ži t l ké role l oddělené dděl é čárkou čá k y verbs – na jaký typ přístupu pravidlo platí
46
<deny verb="POST" users="*"/> <deny users="?"/>
M b hi a R Membership Roles l M Management y Doplněk k třídě FromsAuthetnication y Membership
y Správa uživatelů
y Statická třída Membership
y Roles Mangament y Správa rolí
y Statická třída Roles
y Princip poskytovatelů y MembershipProvider M b hi P id y RoleProvider 47
M b hi Mebership y Některé statické metody y y y y y
EnablePasswordRetrieval MaxInvalidPasswordAttemps PasswordAttempWindow Mi R MinRequiredPasswordLength i dP dL th UserIsOnlineTimeWindow RequiresQuestionAndAnswer
y Některé statické vlastnosti
y Vlastnosti Vl i lze l také ké nastavovat ve web.config y Atributy přidávaného poskytovatele
48
R l Roles y Některé statické metody y AddUserToRole, RemoveUserFromRole y CreateRole, CreateRole DeleteRole, DeleteRole RoleExists y GetRolesForUser, GetUsersInRole y IsUserInRole
y Některé statické vlastnosti y Enabled
y Ve web.confige lement
49
P d ů é webové Podpůrné b ék kontrolky t lk y y y < L i St t /> y y y y
50
K fi Konfigurace y Hierarchická struktura konfiguračních XML
souborů *.config y Kořenový soubor machine.config machine config y Každý adresář webu – web.config
y Přidává nebo modifikuje nadřazenou
konfiguraci
y Konfigurační soubory jsou monitorovány y Jakákoliv změna se okamžitě projeví y Web aplikace se restartuje
51
ASP .NET NET Configuration C fi ti y Webová aplikace pro konfiguraci webových
aplikací y VS – Web Site – ASP .NET NET Configuration