Realizacja Aplikacji Internetowych 2013 laboratorium cz. 2 K.M. Ocetkiewicz



Podobne dokumenty
Walidacja po stronie serwera Walidacja po stronie klienta:

Analizując żądania za pomocą narzędzi developerskich można odczytać listę preferowanych języków, jak na poniższym przykładzie.

ASP.NET MVC. Podstawy. Zaawansowane programowanie internetowe Instrukcja nr 3

Modele danych walidacja widoki zorientowane na model

Microsoft.NET: ASP.NET MVC + Entity Framework (Code First)

Walidacja danych w ASP.NET MVC

5 AS SP.NET MVC. Walidacja danych. Zaawansowane programowanie internetowe Instrukcja nr 5

Poznaj ASP.NET MVC. Kamil Cieślak Microsoft Student Partner

4 AS SP.NET MVC. Widok. Zaawansowane programowanie internetowe Instrukcja nr 4

Ćwiczenie 8. Kontrolki serwerowe

PHP: bloki kodu, tablice, obiekty i formularze

Podstawy wzorca MVC MODEL KON- TROLER WIDOK. Odpowiada za wyświetlenie danych użytkownikowi. Zawiera dane aplikacji oraz jej logikę.

Microsoft.NET: ASP.NET MVC + Entity Framework (Model First)

Laboratorium 1 - Programowanie proceduralne i obiektowe

Przykład programu w PHP. Wykład10.PHP ciągdalszy,str.1

Systemy internetowe. Wykład 3 PHP. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science

Programowanie komponentowe. Przykład 1 Bezpieczeństwo wg The Java EE 5 Tutorial Autor: Zofia Kruczkiewicz

Tworzenie i wykorzystanie usług sieciowych

Tworzenie witryn internetowych PHP/Java. (mgr inż. Marek Downar)

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

Nowy projekt: - ASP.NET MVC 3 Web Application - [Other Languages] Visual C# Web ASP.NET MVC 3 Web Application - okno dialogowe:

Plan wykładu. Tworzenie programów dla platformy.net. Kontrolki list. Kontrolki weryfikujące. Wiązanie danych. Dostęp do danych

Microsoft.NET: ASP.NET MVC + Entity Framework (Code First)

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Leszek Stasiak Zastosowanie technologii LINQ w

Serwery aplikacji. dr Radosław Matusik. radmat

Wykład 5 Okna MDI i SDI, dziedziczenie

Wykład 5: PHP: praca z bazą danych MySQL

Dokumentacja interfejsu HTTPD. Platforma BSMS.PL Instrukcja podłączenia po przez http

Instrukcja laboratoryjna

Laboratorium 7 Blog: dodawanie i edycja wpisów

Wykład 12. Programowanie serwera MS SQL 2005 w C#

Laboratorium 1. Wzorce oprogramowania lab1, Zofia Kruczkiewicz

Realizacja Aplikacji Internetowych 2012 laboratorium K. M. Ocetkiewicz

A Zasady współpracy. Ocena rozwiązań punktów punktów punktów punktów punktów

1 LINQ. Zaawansowane programowanie internetowe Instrukcja nr 1

Aktualizacja SMSFall v Data publikacji:

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Programowanie w Sieci Internet Blok 2 - PHP. Kraków, 09 listopada 2012 mgr Piotr Rytko Wydział Matematyki i Informatyki

Zaawansowane aplikacje internetowe - laboratorium

Gatesms.eu Mobilne Rozwiązania dla biznesu

Infrastruktura aplikacji WWW

Klasy i obiekty cz II

Dane - pobieranie, przekazywanie i przechowywanie. dr Beata Kuźmińska-Sołśnia

Budowa aplikacji wielowarstwowych zastosowanie szablonów. Laboratorium 2 Programowanie komponentowe Zofia Kruczkiewicz

Podstawy JavaScript ćwiczenia

Bazy Danych i Usługi Sieciowe

Smarty PHP. Leksykon kieszonkowy

Zaawansowane aplikacje internetowe laboratorium REST

Spis treści INTERFEJS (WEBSERVICES) - DOKUMENTACJA TECHNICZNA 1

MVC w praktyce tworzymy system artykułów. cz. 2

Architektura MVC w ASP.NET. Autor wykładu: Marek Wojciechowski

XML-RPC: Zdalne wykonywanie procedur

Wykład 4: Klasy i Metody

Przykłady tworzenia aplikacji komponentowych w technologii JavaServer Faces 2.1 na podstawie

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Bezpieczeństwo frameworków WEBowych Java na przykładzie ataku CSRF

Zaawansowane aplikacje internetowe

Tworzenie stron internetowych z wykorzystaniem HTM5, JavaScript, CSS3 i jquery. Łukasz Bartczuk

Technologie internetowe ASP.NET Core. Paweł Rajba

Dokumentacja smsapi wersja 1.4

Komunikacja między klientem, a skryptem PHP, oraz operacje na plikach

Katalog książek cz. 3: Web Service

Instrukcja 10 Laboratorium 13 Testy akceptacyjne z wykorzystaniem narzędzia FitNesse

Realizacja Aplikacji Internetowych 2013 laboratorium K. M. Ocetkiewicz

Zajęcia 4 - Wprowadzenie do Javascript

Technologie internetowe

Aplikacje WWW - laboratorium

Materiały oryginalne: ZAWWW-2st1.2-l11.tresc-1.0kolor.pdf. Materiały poprawione

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Wykład 3 Inżynieria oprogramowania. Przykład 1 Bezpieczeństwo(2) wg The Java EE 5 Tutorial Autor: Zofia Kruczkiewicz

Systemy internetowe Wykład 3 PHP

Jak widzisz w powyższym przykładzie, mimo że operacja nie powiodła się (otrzymaliśmy status Błąd ), serwer zwrócił nam kod 200 OK.

Politechnika Gdańska Katedra Optoelektroniki i Systemów Elektronicznych

BEAN VALIDATION. Waldemar Korłub. Narzędzia i aplikacje Java EE KASK ETI Politechnika Gdańska

Aplikacja Sieciowa wątki po stronie klienta

Tworzenie Stron Internetowych. odcinek 10

Języki skryptowe - PHP. PHP i bazy danych. Paweł Kasprowski. pawel@kasprowski.pl. vl07

Autor: Joanna Karwowska

Dokumentacja systemu NTP rekrut. Autor: Sławomir Miller

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 4

Programowanie obiektowe

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

LK1: Wprowadzenie do MS Access Zakładanie bazy danych i tworzenie interfejsu użytkownika

Instrukcja implementacji sterownika wirtualnego portu szeregowego dla systemu Android. Opracowanie: Elzab Soft sp. z o.o.

Tworzenie stron internetowych z wykorzystaniem HTM5, JavaScript, CSS3 i jquery. Łukasz Bartczuk

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Wybrane działy Informatyki Stosowanej

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

Klasy i obiekty cz I Klasy, obiekty, podstawy używania obiektów

Dokumentacja Skryptu Mapy ver.1.1

ASP.NET MVC. Autor wykładu: Marek Wojciechowski

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych:

Transkrypt:

Realizacja Aplikacji Internetowych 2013 laboratorium cz. 2 K.M. Ocetkiewicz Walidacja po stronie klienta: - w MVC 3 i 4 domyślnie jest włączona także walidacja po stronie klienta - wykorzystuje ona JavaScript automatycznie dołączany do widoku (UWAGA: nie jest on dołączony do pustego projektu) - jeżeli jakiekolwiek pole będzie niepoprawne, formularz nie zostanie wysłany - walidacją sterujemy dodając atrybuty do pól modelu - [Required] mówi, że pole jest wymagane - [StringLength(max)] ustawia maksymalną długość napisu - [StringLength(max, MinimumLength=min)] ustawia minimalną i maksymalną długość - [Range(a, b)] ustawia zakres liczbowy - [RegularExpression(regex)] wymaga spełnienia wyrażenia regularnego - do każdego z tych atrybutów można dodać parametr ErrorMessage, którego wartością jest komunikat o błędzie - np. (klasa modelu): using System.Web.MVC; using System.Web.UI; public class Test [Required(ErrorMessage = "pole wymagane")] public string imie get; set; [RegularExpression(@"[A-Z][a-z]+", ErrorMessage="zły format")] public string nazwisko get; set; [StringLength(9, MinimumLength=4, ErrorMessage="len=4..9")] public string login get; set; [Required] [Range(0, 100)] public int wiek get; set; Zdalna walidacja (wykorzystująca AJAX): - możemy także walidować pola zdalnie - formularz wysyła zapytanie do serwera z wartością pola, serwer odpowiada obiektem true (jeżeli jest poprawne) lub komunikatem o błędzie (string) - należy dodać do web.config (w MVC 4 już to jest dodane): <appsettings> <add key="clientvalidationenabled" value="true" /> <add key="unobtrusivejavascriptenabled" value="true" /> </appsettings> 662BD5F6-0D63-4080-8769-62B3BA33A4501662BD5F6-0D63-4080-8769-62B3BA33A450

- w modelu nadajemy właściwości atrybut Remote z parametrami Controller i Action, które wskazują na kontroler i akcję, która dokonuje walidacji: [Remote( nazwa akcji, nazwa kontrolera )] - walidację wykonuje zwykła akcja (UWAGA: należy pamiętać, aby parametr akcji nazywał się tak samo jak pole w formularzu): - np.: class Model [Remote( ValidateStr2, Kontroler )] string str2; ; public JsonResult ValidateStr2(string str2) if(str2[0] == 'a' && str2[1] == 'b') // OK return Json(true, JsonRequestBehavior.AllowGet); else // błąd walidacji return Json("error message", JsonRequestBehavior.AllowGet); - w kontrolerze zawierającym tę akcję warto wyłączyć cacheowanie, dodając do kontrolera atrybut (więcej o cacheowaniu pod koniec instrukcji): [OutputCache(Location=OutputCacheLocation.None, NoStore=true)] atrybut HiddenInput (System.Web.Mvc) - parametr DisplayValue = true: w silnie typowanych widokach tylko prezentujących dane wyświetlana etykieta i wartość - parametr DisplayValue = false: w silnie typowanych widokach tylko prezentujących dane jako pole hidden - w silnie typowanych widokach pozwalających na edycję danych pole występuje jako pole hidden public class ProductViewModel [HiddenInput] // equivalent to [HiddenInput(DisplayValue=true)] public int Id get; set; public string Name get; set; [HiddenInput(DisplayValue=false)] public byte[] TimeStamp get; set; Obiekt Request - obiekt Request w akcji reprezentuje zapytanie - posiada między innymi pola: - HttpMethod, RequestType reprezentują metodę HTTP ( GET, POST itp.) - QueryString kolekcja parametrów zapytania (parametry typu GET) 662BD5F6-0D63-4080-8769-62B3BA33A4502662BD5F6-0D63-4080-8769-62B3BA33A450

- Form kolekcja parametrów zapytania (parametry typu POST) - Files kolekcja załączonych plików (nazwa obiekt pliku, z polami/metodami ContentType, ContentLength, FileName, SaveAs, InputStream) - Cookies kolekcja zawierający ciasteczka - ServerVariables kolekcja zmiennych serwera - Url adres zapytania (uwzględnia adres serwera) - RawUrl adres zapytania (nie uwzględnia adresu serwera) - Params połączone kolekcje Form, QueryString, Cookies i ServerVariables (może zawierać duplikaty) - UserAgent opis przeglądarki klienta - UserHostAddress adres klienta - UserLanguages uporządkowana tablica preferowanych języków Helpery - metody z przestrzeni nazw Html, które generują odpowiedni kod HTMLowy (zwracają napis), np.: <div class="editor-label"> @Html.LabelFor(model => model.name) </div> <div class="editor-field"> @Html.EditorFor(model => model.name) @Html.ValidationMessageFor(model => model.name) </div> - Html.ActionLink( tekst, akcja, [ kontroler, [new parametry, null]]) - Html.RouteLink( tekst, new controller =, action =, parametry=/*parametry*/ ) - Html.Encode() poprawnie formatuje napis do wyświetlenia w HTML (< na < itp.; Razor wykonuje to domyślnie) Formularze - Sposób 1 - Stworzyć obiekt zawierający pola, które są nam potrzebne (koniecznie jako właściwości) - Napisać akcję np.: public ActionResult Form() return View(); - Prawym add view strongly typed view ustawić klasę i elementy strongly typed view definiuje typ obiektu Model - Ewentualnie uzupełnić formularz (nazwy pól muszą być takie jak właściwości obiektu) - Napisać akcję: [HttpPost] public ActionResult Form(NazwaObiektu value) //i tu w value mamy zwartość pól formularza 662BD5F6-0D63-4080-8769-62B3BA33A4503662BD5F6-0D63-4080-8769-62B3BA33A450

- Sposób 2 - stworzyć formularz w widoku, - dodać akcję, która obsługuje dane z formularza (z atrybutem [HttpPost]), - skorzystać z obiektu Request.Form do odczytania danych Upload plików - W formularzu trzeba dodać enctype="multipart/form-data" (np. Html.BeginForm( nazwa akcji, nazwa kontrolera, FormMethod.POST, new enctype="multipart/form-data")) - Dodajemy <input type= file name= nazwa /> - W Request.Files mamy pliki: byte [] data = new byte[1024]; foreach(string name in Request.Files) // Request.Files[name].ContentType, // Request.Files[name].ContentLength // Request.Files[name].SaveAs, Request.Files[name].InputStream.Read(data, 0, 1024); string str = System.Text.Encoding.ASCII.GetString(data); - UWAGA: jeżeli plik jest przechowywany w modelu jako tablica bajtów, nazwa pliku w formularzu powinna być inna niż nazwa pola w modelu, inaczej MVC będzie próbowało przekazać jego zawartość w modelu, co się nie powiedzie i spowoduje rzucenie wyjątku Odsyłanie plików - w akcji zwracamy: return File(scieżka, mimetype[, nazwapliku]); lub return File(tablica bajtów, mimetype[, nazwapliku]); Asynchroniczne akcje - kontroler musi dziedziczyć po AsyncController zamiast Controller - dwie metody na każdą akcję: - void AkcjaAsync(parametry_akcji) - ActionResult AkcjaCompleted(parametry_inne) - AkcjaAsync powinna zwiększyć licznik oczekujących operacji: - AsyncManager.OutstandingOperations.Increment([opcjonalnie_o_ile]) - gdy operacja się zakończy, należy wywołać - AsyncManager.OutstandingOperations.Decrement() - gdy licznik OutstandingOperations dojdzie do zera, wywoływane jest AkcjaCompleted - AsyncManager.Parameters słownik parametrów do AkcjaCompleted (parametry_inne) 662BD5F6-0D63-4080-8769-62B3BA33A4504662BD5F6-0D63-4080-8769-62B3BA33A450

- parametry można też odczytać bezpośrednio z AsyncManager.Parameters - UWAGA: w adresie HTTP akcja nazywa się Akcja a nie AkcjaAsync public class AsyncTestController : AsyncController public void IndexAsync(int id) AsyncManager.OutstandingOperations.Increment(); // długą operację symulujemy timerem var t = new System.Timers.Timer(); t.autoreset = false; t.interval = 4000; // [ms] t.elapsed += new System.Timers.ElapsedEventHandler((evt, args) => AsyncManager.Parameters["value"] = 321; AsyncManager.OutstandingOperations.Decrement(); ); t.start(); public ActionResult IndexCompleted(int value) // parametr jest przekazany bezpośrednio do wywołania, // można też odczytać go tak: //ViewData["id"] = AsyncManager.Parameters["value"]; ViewData["id"] = value; return View(); Lokalizacja - do lokalizacji aplikacji korzystamy z zasobów (add new item Visual C# / General resources file) - UWAGA: w każdym pliku zasobów należy ustawić access modifier na public: - dodajemy do projektu pliki zasobów o nazwach: - nazwa.resx - nazwa.kultura.resx 662BD5F6-0D63-4080-8769-62B3BA33A4505662BD5F6-0D63-4080-8769-62B3BA33A450

- nazwa określa nam nazwę klasy, w której będą dostępne poszczególne komunikaty - kultura to kod opisujący język (np. pl, en, en-us itp.) - w widokach napisy dostępne są jako namespace.nazwa.napis, gdzie namespace to przestrzeń nazw naszej aplikacji, nazwa to nazwa pliku zasobów zaś napis to nazwa konkretnego napisu, np. <h2>@mvcapplication1.komunikaty.title</h2> - konkretny napis wybierany jest na podstawie pól CurrentCulture i CurrentUICulture bieżącego wątku i trzeba je ustawiać dla każdego zapytania, - można w tym celu wykorzystać metodę Application_AcquireRequestState (w pliku Global.asax.cs, która jest wykonywana dla każdego zapytania: using System.Globalization; public class MyApplication: System.Web.HttpApplication protected void Application_AcquireRequestState(object sender, EventArgs e) string lang = "pl"; // domyślna wartość if(httpcontext.current.request.userlanguages!= null && HttpContext.Current.Request.UserLanguages.Length > 0) lang = HttpContext.Current.Request.UserLanguages[0].Substring(0, 2); CultureInfo ci = new CultureInfo(lang); System.Threading.Thread.CurrentThread.CurrentUICulture = ci; System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(ci.Name); - można także do pliku web.config, w sekcji system.web dodać wpis: <globalization culture="auto" uiculture="auto" /> co spowoduje automatyczne odczytywanie informacji o języku z nagłówka zapytania - komunikaty o błędach modelu lokalizujemy podając zamiast ErrorMessage parametry ErrorMessageResourceName=nazwa_napisu oraz ErrorMessageResourceType=typ_klasy_zasobu, np.: [StringLength(10, MinimumLength=2, ErrorMessageResourceName="title", ErrorMessageResourceType= typeof(mvcapplication1.resources.mesgs))] - więcej o lokalizacji: http://www.codeproject.com/kb/aspnet/routinglocalizedmvc.aspx http://www.eworldui.net/blog/post/2008/05/aspnet-mvc---localization.aspx Buforowanie widoków: OutputCache - atrybut ten służy do kontrolowania buforowania widoków 662BD5F6-0D63-4080-8769-62B3BA33A4506662BD5F6-0D63-4080-8769-62B3BA33A450

- można go nadać kontrolerowi (wtedy dotyczy wszystkich akcji) jak i poszczególnym akcjom - parametry (wybrane): - Duration czas pamiętania widoku w sekundach - Location miejsce, gdzie pamiętany jest widok (OutputCacheLocation.XXX): Any gdziekolwiek Client po stronie kienta Server po stronie serwera ServerAndClient u klienta i na serwerze None nigdzie - NoStore informuje proxy, że nie powinny przechowywać kopii strony (wartość logiczna) - VaryByParam umożliwia buforowanie widoków różniących się wartościami parametrów: none oznacza, że zawartość strony nie zależy od parametrów * (gwiazdka) oznacza, że każdy zestaw parametrów powinien być oddzielnie buforowany nazwa_parametru oznacza, że dla różnych wartości parametru nazwa_parametru powinna być pamiętana oddzielna kopia strony w pamięci podręcznej p1; p2; p3 jeżeli kilka parametrów wyznacza rozróżnia strony, można rozdzielić je średnikami 662BD5F6-0D63-4080-8769-62B3BA33A4507662BD5F6-0D63-4080-8769-62B3BA33A450