Post on 03-Jan-2016
description
Technologia ASP.NET
Zalety ASP.NET (ASPX)
Kodowanie po stronie serwera Skrypty działające po stronie klienta Kompilacja kodu zapewniająca
bezpieczeństwo i skalowalność
Kontrolki serwera
Pełnią podobne zadania jak kontrolki HTML
Wykonywane są jednak po stronie serwera co eliminuje problemy niezgodności z przeglądarkami internetowymi
Tworzenie nowej prostej aplikacji
Zmieniamy nazwę strony startowej
Kontrolka i jej obsługa
Struktura aplikacji
Pliki z rozszerzeniem aspx są projektami stron zawierającymi odwołania do plików z kodem wykonywanym w tle (Code Behind)
Aplikacja generuje stronę wysyłaną do klienta w kodzie html
Uruchamianie w w trybie debuggowania
Źródło strony dla klienta
Składniki aplikacji – strona startowa aspx
Strona startowa - źródło
Kod aplikacji wykonywany w tle – ***.aspx.cs
Pozostałe składniki
Skompilowany kod aplikacji ***.dll DLL (z ang. Dynamic Link Library lub
Dynamic Linked Library - biblioteka łączona dynamicznie) - w środowisku Windows biblioteka współdzielona (z ang. shared library), która przechowuje implementacje różnych funkcji (podprogramów) programu i/lub zasoby programu. Biblioteka DLL sama nie może wywoływać swoich funkcji (wykorzystywać zasobów w niej zawartych), może to zrobić jedynie program EXE.
Pozostałe składniki
Plik konfiguracyjny Web.config Inne pliki projektu nie wymagane do
uruchomienia aplikacji
Wygenerowanie aplikacji wymaga uruchomienia serwera IIS
Serwis Internet Information Services – IIS jest składnikiem systemu Windows ale musi być specjalnie zainstalowany
Jeżeli nie zmieniono ustawień IIS jego macierzystym katalogiem jest C:\Inetpub\wwwroot
Strona startowa aplikacji musi być umieszczona w katalogu macierzystym lub w podkatalogu z nazwą aplikacji
Zasoby niezbędne do uruchomienia
Strona startowa ***.aspx Plik ***.dll zawierający wszystkie pliki
niezbędne do uruchomienia aplikacji Składniki te mogą być umieszczone w
rzeczywistym katalogu w ścieżce c:\Inetpub\wwwroot
lub w katalogu wirtualnym
Uruchamianie aplikacji z rzeczywistego katalogu
W katalogu c:\Inetpub\wwwroot tworzymy katalog DzienDobry i umieszczamy w nim plik Start.aspx
Budujemy aplikację (Build) i publikujemy ją w katalogu macierzystym
Uruchamiamy aplikację z adresu localhost
Tworzenie katalogu wirtualnego
Przed utworzeniem pliku dll ustawiamy serwer we właściwościach aplikacji na serwerze IIS
Następnie tworzymy katalog wirtualny (Create Virtual Directory)
Konfigurujemy IIS (Panel sterowania -> Narzędzia administracyjne -> Internetowe usługi informacyjne)
Właściwości aplikacji
Konfigurowanie IIS
Konfigurowanie IIS - cd
Aplikacja jest uruchamiana z katalogu wirtualnego
Składniki niezbędne do uruchomienia aplikacji z dowolnego serwera Na komputerze musi funkcjonować
odpowiednio skonfigurowany serwer IIS W przypadku katalogu rzeczywistego - w
katalogu macierzystym IIS w podkatalogu bin musi być zapisany plik dll i w miejscu wywoływania z localhost plik startowy aspx
W przypadku katalogu wirtualnego katalog aplikacji w miejscu skoordynowanym z adresem tego katalogu
środowisko .NETFramework
Łączenie aplikacji internetowych z bazą danych
W trybie debuggowania aplikacje webowe łączą się z bazą danych podobnie jak aplikacje windowsowe
Aplikacja webowa uruchamiana z sieci jest widziana przez serwer baz danych jako użytkownik ASPNET
Jeżeli w serwerze taki użytkownik nie jest widoczny to należy go uaktywnić
Tworzenie nowego użytkownika w SQL MS Express
Uprawnienia ASPNET
Utworzony użytkownik ASPNET nie ma żadnych uprawnień
Nie można uprawnień nadać programowo, gdyż użytkownik sam sobie uprawnień nie może nadać
Uprawnienia może nadać właściciel bazy danych
Próba połączenia z bazą danych bez odpowiednich uprawnień
Nadawanie uprawnień przy pomocy EnterpriseManager
Nadawanie uprawnień w SQL
GRANT SELECT ON [dbo].[Studenci] TO [ASPNET]
GridView w aplikacji webowej
Kod wykonywany w tleusing System.Data;using System.Data.SqlClient;namespace Baza{ public partial class _Default : System.Web.UI.Page { DataSet Studia = new DataSet(); DataTable Studenci = new DataTable(); protected void Page_Load(object sender, EventArgs e) { SqlDataAdapter Adapter = new SqlDataAdapter ("Select * From Studenci", "Data Source=STACJONARNY\\SQLEXPRESS;Integrated Security=True;Initial Catalog=Test"); Studia.Tables.Add(Studenci); Studia.Clear(); Adapter.Fill(Studia, "Studenci"); }
Kod wykonywany w tle - cd
protected void Button1_Click(object sender, EventArgs e) { GridView1.DataSource = Studia.Tables["Studenci"]; GridView1.DataBind(); }
Tryb debugg
Aplikacja w sieci lokalnej
Przesyłanie danych pomiędzy klientem i serwerem
Do dynamicznego umieszczania na stronie klienta danych służy obiekt Response
Metoda Write obiektu Response umieszcza łańcuch w dokumencie użytkownika
Wykorzystanie obiektu Response do odczytu danych z bazy
Kod wykonywany w tle DataSet Studia = new DataSet(); DataTable Studenci = new DataTable(); protected void Page_Load(object sender, EventArgs e) { SqlDataAdapter Adapter = new SqlDataAdapter ("Select * From Studenci", "Data Source=STACJONARNY\\SQLEXPRESS;Integrated Security=True;Initial Catalog=Test"); Studia.Tables.Add(Studenci); Studia.Clear(); Adapter.Fill(Studia, "Studenci"); }
Kod wykonywany w tle protected void Button2_Click(object sender, EventArgs e) { int i =1; foreach(DataRow _r in Studia.Tables["Studenci"].Rows) { Response.Write(i.ToString() + ". "); Response.Write(_r["Imie"].ToString().Trim() + " "); Response.Write(_r["Nazwisko"].ToString().Trim()); Response.Write("<BR>"); i++; } }
Wynik
Strona wysłana do klienta
Umieszczanie ciasteczek na dysku klienta Ciasteczka (ang. cookies) to niewielkie
informacje tekstowe, wysyłane przez serwer WWW i zapisywane po stronie użytkownika (zazwyczaj na twardym dysku). Domyślne parametry ciasteczek pozwalają na odczytanie informacji w nich zawartych jedynie serwerowi, który je utworzył. Ciasteczka są stosowane najczęściej w przypadku liczników, sond, sklepów internetowych czy stron wymagających logowania.
Wykorzystanie polecenia Response i Request
Klienci zapisani są w bazie Test w tabeli Klienci z autonumerowanym indeksem
Każdemu nowemu klientowi wysyłamy ciasteczko z jego identyfikatorem
W momencie żądania strony sprawdzamy czy klient miał wysłane ciasteczko
Projekt i źródło strony startowej
Kod w tle dla ładowania strony
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim Ide As String LadujKlientow() Try Ide = Request.Cookies("Klient")("Identyfikator").ToString() Catch Nowy = False Response.Write("Jesteś nowym klientem!") Response.Write("<BR>") Response.Write("Podaj nazwę i adres.") Response.Write("<BR>") End Try
Kod w tle dla ładowania strony - cd
If Nowy Then Nazwa.Text = ZnajdzKlienta(Ide)(0)("Nazwa") Label2.Visible = False Adres.Visible = False Button1.Visible = False End If End Sub
Otwieranie bazy i ładowanie tabeli
Private Sub LadujKlientow() SQLConn.ConnectionString = _ "Data Source=STACJONARNY\sqlexpress;Initial Catalog=Test;Integrated Security=True" SQLConn.Open() Dim Adapter As New SqlDataAdapter("Select * From Klienci", _ SQLConn) Sklep.Tables.Add(Klienci) Adapter.Fill(Sklep, "Klienci") End Sub
Nowy klient
Jeżeli próba znalezienia ciasteczka zgłosi wyjątek pojawi się na stronie odpowiedni tekst i nie zostaną wyłączone etykiety, pola tekstowe i przycisk
Użytkownik wprowadza dane i naciska przycisk
Nie znaleziono ciasteczka
Klient wprowadził dane
Klient został zapisany do bazy
Kod w tle dla przycisku „Logowanie”
Protected Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click DodajKlienta() End Sub Private Sub DodajKlienta() Dim Polecenie As New SqlCommand Polecenie.Connection = SQLConn Polecenie.CommandType = CommandType.StoredProcedure Polecenie.CommandText = "DopisanieKlientow"
Kod w tle dla przycisku „Logowanie” - cd
Polecenie.Parameters.Add(New SqlParameter("@Nazwa", SqlDbType.Char)) Polecenie.Parameters("@Nazwa").Direction = ParameterDirection.Input Polecenie.Parameters.Add(New SqlParameter("@Adres", SqlDbType.Char)) Polecenie.Parameters("@Adres").Direction = ParameterDirection.Input Polecenie.Parameters.Add(New SqlParameter("@Identity", SqlDbType.Char)) Polecenie.Parameters("@Identity").Direction = ParameterDirection.ReturnValue Polecenie.Parameters("@Nazwa").Value = Nazwa.Text Polecenie.Parameters("@Adres").Value = Adres.Text
Kod w tle dla przycisku „Logowanie” - cd
Dim rezultat, wynik As Integer wynik = Polecenie.ExecuteNonQuery rezultat = Polecenie.Parameters("@Identity").Value Response.Cookies("Klient")("Identyfikator") = rezultat.ToString Response.Write("Zostałeś zapisany do bazy") Response.Write("<BR>") Response.Write("Otrzymałeś numer: " & rezultat.ToString) End Sub
Procedura składowana użyta do zapisania nowego rekordu
USE [Test]GO/****** Object: StoredProcedure [dbo].[DopisanieKlientow] Script Date: 01/14/2008 18:14:30 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE PROCEDURE [dbo].[DopisanieKlientow] @Nazwa char(50), @Adres char(50)AS INSERT INTO Klienci (Nazwa, Adres) VALUES (@Nazwa, @Adres)RETURN SCOPE_IDENTITY()
Wynik aktualizacji
Jeżeli ciasteczko zostało odnalezione
If Nowy Then Nazwa.Text = ZnajdzKlienta(Ide)(0)("Nazwa") Label2.Visible = False Adres.Visible = False Button1.Visible = False End If End Sub
Odszukiwanie klienta
Private Function ZnajdzKlienta(ByVal ide As String) Dim Query As String Query = "IdKlienta = " & ide ZnajdzKlienta = Klienci.Select(Query) End Function
Wynik
Zastąpienie polecenia Response kontrolkami serwera
Zmiany w kodzie ' Response.Write("Jesteś nowym klientem!") ' Response.Write("<BR>") ' Response.Write("Podaj nazwę i adres.") ' Response.Write("<BR>") Tekst1.Text = "Jesteś nowym klientem!" Tekst2.Text = "Podaj nazwę i adres."
' Response.Write("Zostałeś zapisany do bazy") ' Response.Write("<BR>") ' Response.Write("Otrzymałeś numer: " & rezultat.ToString) Tekst1.Text = "Zostałeś zapisany do bazy" Tekst2.Text = "Otrzymałeś numer: " & rezultat.ToString
Brak ciasteczka
Potwierdzenie zapisania klienta