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 tle
using 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);
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 ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE 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