Transcript Wykład 5

Technologie internetowe
Wykład 5
Wprowadzenie do skrytpów serwerowych
Skrypty serwerowe
Programy osadzone w kodzie HTML







Technologie PHP, ASP (JavaScript, VBScript),
ASP.NET (JScript, C#, J#, VB.NET ….), JSP
(Java)
Wykonywane przez serwer WWW
Brak wymagań względem przeglądarki
Ukryte kody źródłowe
Konieczność komunikacji przez sieć
Serwer musi udostępniać technologię
Możliwość współpracy z bazami danych
Model komunikacji
Żądanie HTTP
Odpowiedź HTTP (HTML, JPG)
Klient
Serwer
Dlaczego ASP.NET ?









Dowolny język programowania .NET (ok. 50)
Filozofia obiektowa sterowana zdarzeniami
Możliwość automatyzacji budowy serwisu
Możliwość pracy komponentowej
Skrypty kompilowane
Możliwości buforowania treści
Wsparcie dla XML i WebSerwisów
Praca w środowiskach Windows i … Linux (projekt
MONO)
Darmowe środowiska programistyczne (Visual Web
Developer, #develop)
Język C#
Język opracowany dla Microsoft przez
Andersa Hejlsberga
 Język łączący w sobie rozwiązania C++ i
Java
 Obecnie jest z najsilniej rozwijanych
języków programowania

Operatory
Arytmetyczne: +,-,*,/,++,-=,+=,*=,/=
 Porównań: ==,!=,<,>,<=,>=
 Logiczne: &&, ||, !

Instrukcje
for (wyr1;wyr2;wyr3) { /* blok */}
 while (warunek) { /* blok */ }
 do { /* blok */} while (warunek)
 if (warunek) { /* blok1 */} else { /*blok2*/}
 switch (zmienna) { case 1: {
/*blok1*/};break; case 2: {
/*blok2*/};break; default: { /*blok*/};}

Zmienne
Język C# wykorzystuje jawne deklaracje zmiennych i typowanie
Typy podstawowe:
• int
• float
• double
• long
• short
• byte
• char
• string
• bool
Deklaracja zmiennych:
int a;
string imie,nazwisko;
double x=5;
Konwersja typów
Konwersja niejawna:
int a=5;
double b=a;
Rzutowanie:
double a=5;
int b=(int)a;
Konwersja:
string a=‘5’;
int b=Convert.ToInt32(a);
Deklaracja metody
typ_zwracany Nazwa(typ1 arg1,typ2 arg 2…)
{
//Ciało metody
}
nagłówek
Deklaracja metody zawsze musi określać typ zwracanych danych. Jeśli metoda nic nie
zwraca, zwracany typ określa się jako void. Brak argumentów metody zapisuje się przy
pomocy pustej listy parametrów () po jej nazwie. Prawidłowe wywołanie metody w kodzie,
musi posiadać wszystkie argumenty wejściowe. Zarówno argumenty wejściowe, jak i
zmienna, do której zostanie podstawiony wynik metody, muszą być zgodne pod względem
typu danych z informacją podaną w deklaracji metody.
Metoda bezargumentowa nie
zwracająca wartości
void Przywitaj() {
Console.WriteLine("Hello");
}
Przywitaj();
}
}
Metoda argumentowa nie
zwracająca wartości
static void Iloczyn(int a,int b) {
Response.Write ("Iloczyn="+a*b);
}
Iloczyn(5,6);
Metoda argumentowa zwracająca
wartość
int Iloczyn(int a,int b) {
return a*b;
}
int x=Iloczyn(5,6)+4;
Response.Write("5*6+4="+x);
Skrypt kliencki i serwerowy
Skrypt widziany przez serwer
Skrypt widziany przez przeglądarkę
<%@ Page Language="C#" %>
<%@ Page Language="C#" %>
<html>
<html>
<head><title>Skrypt</title></head>
<head><title>Skrypt</title></head>
<body>
<body>
<script language="JavaScript">
// SKRYPT KLIENCKI
// SKRYPT KLIENCKI
<script language="JavaScript">
for (i=0;i<5;i++) document.write(i+'<br>');
for (i=0;i<10;i++) document.write(i+'<br>');
</script>
</script>
<%
0<br>1<br>2<br>3<br>4<br>
// SKRYPT SERWEROWY
</body>
for (int i=0;i<5;i++) Response.Write(i+"<br>");
%>
</body>
Wynik
0
1
2
3
4
0
1
2
3
4
Osadzanie skryptu serwerowego
INLINE w kodzie HTML
<body>
<b>Dzisiejsza data to:<i> <% =System.DateTime.Now.ToLongDateString() %></i></b>
</body>
Jako blok <% .. %> - dla dynamicznej generacji treści
<body>
<%
for (int i=0; i<5; i++) Response.Write(i+"<br>");
%>
</body>
Jako blok <script runat="server"> .. </script> - do definicji metod, zdarzeń itd.
<script runat="server">
void Przywitaj(string imie)
{
Respone.Write("Witaj "+imie);
}
</script>
<html> ……
Osadzanie skryptu serwerowego
Dołączanie zewnętrznego pliku kodu
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Strona.aspx.cs" Inherits="Strona" %>
Strona.aspx.cs
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
public partial class Strona : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
Dyrektywy
<%Page Language="C#" Debug="true">
Język
<@%Import Namespace="System.Data" %>
Przestrzeń nazw
Wyszukiwane
błędów
wykonania
Obiekt Page
Obiekt Page reprezentuje stronę przygotowywaną na serwerze przed
wysłaniem jej do przeglądarki użytkownika.
Obiekty zagnieżdżone:
• Request – umożliwia dostęp do informacji o żądaniu wysłanym z
przeglądarki
• Response – obiekt reprezentujący wszystkie dane wysyłane z serwera do
przeglądarki (treść strony, cookies, przekierowania)
• Server – obiekt pozwalający uzyskać informacje o serwerze i jego zasobach
Obiekt Response
Metody:
• Write(x) – dopisuje x do strony HTML
• WriteFile(nazwa) – dodaje zawartość pliku do pakietu HTTP
• End() – zakończenie przetwarzanie i wysłanie pakietu HTTP
• Redirect(url) – wysyła do przeglądarki polecenie
przekierowania na adres URL
REQUEST
Żądanie do strony1.aspx
Nagłówek HTTP z przekierowaniem
Żądanie do strony1.aspx
Zawartość strony strona2.aspx
Dynamiczna generacja HTML
<%@ Page Language="C#" %>
<html>
<head><title>Test</title></head>
<body>
<%
Response.Write("<table border=\"1\">");
for (int i=1;i<10;i++)
{
Response.Write("<tr>");
for (int j=1; j<10;j++)
Response.Write("<td>"+(i*j)+"</td>");
Response.Write("</tr>");
}
%>
</body>
</html>
<%@ Page language=„C#" %>
<html>
<head><title>Test</title></head>
<body>
<table border="1">
<% for (int i=1;i<10;i++)
{ %>
<tr>
<%
for (int j=1; j<10;j++)
{
%>
<td><% =(i*j) %></td>
<% } %>
</tr>
<% } %>
</table>
</body>
</html>
Automatyczne przekierowanie
<%@ Page Language="C#" %>
<html>
<head><title>Test</title></head>
<body>
<%
System.Random los=new System.Random();
switch (los.Next(0,3))
{
case 1: Response.Redirect("http://www.onet.pl"); break;
case 2: Response.Redirect("http://www..wp.pl"); break;
case 3: Response.Redirect("http://www.interia.pl"); break;
default: Response.Wrtie("<i>Zostajemy tutaj</i>"); break;
}
%>
</body>
</html>
Obsługa daty i czasu – klasa DateTime
Metody:
• ToString() – konwersja na tekst daty i czasu
• ToLongTimeString() – konwersa na pełny tekst czasu
• ToShortTimeString() – konwersja na skrócony tekst czasu
• ToLongDateString() – konwersa na pełny tekst czasu
• ToShortDateString() – konwersja na skrócony tekst czasu
Właściowści:
• Hour – godzina
• Minute – minuta
• Second – sekunda
• Year – rok
• Month – miesiąc (1-12)
• Day
• DayOfWeek (Monday, Tuesday…)
• DayOfYear
<%@ Page Language="C#" %>
<html>
<head><title>Skrypt</title></head>
<body>
<%
DateTime czas=DateTime.Now;
Response.Write(czas.ToLongTimeString() + "<br />");
Response.Write(czas.Year + "-" + czas.Month + "-" +
czas.Day);
%>
</body>
</html>
Obiekt Request
Właściwości:
• Form – kolekcja pól formularza wysłanych metodą POST
• QueryString – kolekcja pól formularza wysłanych modą GET
• Browser – informacje o przeglądarce użytkownika i jej możliwościach
Browser:
• Borwser – Nazwa (IE)
• Type – Typ (IE7)
• Version – Wersja (7.0)
• MajorVersion – Numer główny wersji (7)
• MinorVersion – Numer poboczny wersji (0)
• Beta – Wersja beta (false)
• Crawler – Robot internetowy (false)
• Win32 – Windows 32-bitowy (true)
• Frames – Dostępne ramki (true)
• Tables – Dostępne tabele (true)
• Cookies – Dostępne ciasteczka (true)
• EcmaScriptVersion – dostępna wersja JS (1.2)
Przetwarzanie danych z formularza
Serwer
Klient
Dane z formularza
Pytanie.html
Odpowiedz.aspx
Wygenerowany kod HTML stanowiący odpowiedz
Przetwarzanie danych z formularza
http://www.moj.pl/odpowiedz.asp?imie=Jan&nazwisko=Kowal
pytanie.htm
<html>
<head><title>Pytanie</title></head>
<body>
<form action="odpowiedz.aspx" method="get">
Imię:<input name="imie" type="text"><br>
Nazwisko:<input name="nazwisko" type="text"><br>
<input type="submit" value="Wyślij"></form>
</body>
</html>
odpowiedz.aspx
Wynik
Przysłano:
imie=Jan&nazwisko=Kowal
<%@ Page Language="C#" %>
<html>
<head><title>Odpowiedź</title></head>
<body>
<%
Response.Write("Przysłano: \n"+Request.QueryString);
%>
</body>
</html>
Przetwarzanie danych z formularza
http://www.moj.pl/odpowiedz.asp
pytanie.htm
<html>
<head><title>Pytanie</title></head>
<body>
<form action="odpowiedz.aspx" method="post">
Imię:<input name="imie" type="text"><br>
Nazwisko:<input name="nazwisko" type="text"><br>
<input type="submit" value="Wyślij"></form>
</body>
</html>
odpowiedz.aspx
Wynik
Przysłano:
imie=Jan&nazwisko=Kowal
<%@ Page Language="C#" %>
<html>
<head><title>Odpowiedź</title></head>
<body>
<%
Response.Write("Przysłano: \n"+Request.Form);
%>
</body>
</html>
Przetwarzanie danych z formularza
http://www.moj.pl/odpowiedz.asp?imie=Jan&nazwisko=Kowal
pytanie.htm
<html>
<head><title>Pytanie</title></head>
<body>
<form action="odpowiedz.aspx" method="get">
Imię:<input name="imie" type="text"><br>
Nazw:<input name="nazwisko" type="text"><br>
<input type="submit" value="Wyślij"></form>
</body>
</html>
Wynik
Imię: Jan
Nazwisko:Kowal
odpowiedz.aspx
<%@ Page Language="C#" %>
<html>
<head><title>Odpowiedz</title></head>
<body>
<%
Response.Write("Imię: "+Request.QueryString["imie”]+"<br");
Response.Write("Nazwisko:"
+Request.QueryString["nazwisko”]+"<br");
%>
</body>
</html>
Przetwarzanie danych z formularza
http://www.moj.pl/odpowiedz.asp
pytanie.htm
<html>
<head><title>Pytanie</title></head>
<body>
<form action="odpowiedz.aspx" method="post">
Imię:<input name="imie" type="text"><br>
Nazw:<input name="nazwisko" type="text"><br>
<input type="submit" value="Wyślij"></form>
</body>
</html>
Wynik
Imię: Jan
Nazwisko:Kowal
odpowiedz.aspx
<%@ Page Language="C#" %>
<html>
<head><title>Odpowiedz</title></head>
<body>
<%
Response.Write("Imię: "+Request.Form["imie”]+"<br");
Response.Write("Nazwisko:"
+Request.Form["nazwisko”]+"<br");
%>
</body>
</html>
Klasa Math
Metody:
• Sqrt(x)
• Abs(x)
• Pow(a,n)
• Round(x), Ceiling(x), Floor(x)
• Sin(rad),Cos(rad), Tan(rad)
• Sinh(rad), Cosh(rad), Tanh(rad)
• Asin(x),Acos(x),Atan(x), Atan2(x,y)
• Log(a,pod), Log10(x)
• Max(x1,x2), Min(x1,x2)
• Exp(n)
Właściwości:
•E
• PI
Obliczenia na danych z formularza
pytanie.htm
<form action="odpowiedz.aspx" method="get">
Wysokość:<input name="wys" type="text"><br>
Promięń:<input name="prom" type="text"><br>
<input type="submit" value="Oblicz"></form>
odpowiedz.aspx
<%@ Page Language="C#" %>
<html>
<head><title>Objętość walca</title></head>
<body>
<%
double h,r,V;
h=Convert.ToDouble(Request.QueryString["wys”]);
r=Convert.ToDouble(Request.QueryString["prom"]);
V=Math.PI*Math.Pow(r,2)*h;
Response.Write("Objętość wynosi "+V.ToString("F2”)+" cm<sup>2</sup>");
%>
<br>
<a href="pytanie.htm">Nowe dane</a>
</body>
</html>
Strona samodzielna
<%@ Page Language="C#" %>
<html>
<head><title>Objętość walca</title></head>
<body>
<form method="get">
Wysokość:<input name="wys" type="text"><br>
Promięń:<input name="prom" type="text"><br>
<input type="submit" value="Oblicz"><br /></form>
<%
if (Request.QueryString.Count > 0)
{
double h, r, V;
h = Convert.ToDouble(Request.QueryString["wys"]);
r = Convert.ToDouble(Request.QueryString["prom"]);
V = Math.PI * Math.Pow(r, 2) * h;
Response.Write("Objętość wynosi " + V.ToString("F2") + " cm<sup>2</sup>");
}
%>
<br />
</body>
</html>
Wyrażenia regularne – klasa RegEx
Przestrzeń nazw: System.Text.RegularExpressions
RegEx wyrazenie=new RegEx(@"^\d(0}$”);
Metoda IsMatch
string tekst="Hello";
Regex wyrazenie=new Regex(@"^[A-Z][a-z]+$");
if (wyrazenie.IsMatch(tekst)) Response.Write("OK"); else Response.Write("Źle");
Metoda Matches
string tekst = "Mój pesel to 80120102256 a twój to 80111102256";
Regex wyrazenie=new Regex(@"\d{11}");
foreach (Match m in wyrazenie.Matches(tekst))
Response.Write(m.Value+"<br />");
Metoda Replace
string tekst = "Ala ma kota a Ola ma psa";
Regex wyrazenie=new Regex(@"ma");
Response.Write(wyrazenie.Replace(tekst,"posiada"));
Obiekt Server
Metody:
• Transfer – przekierowanie obsługi strony po stronie serwera
• MapPath – tłumaczenie ścieżki względnej na ścieżkę fizyczną
TRANSFER
Żądanie do strony1.aspx
Zawartość strony strona2.aspx
Mapowanie ścieżki
Dysk C:
Serwer
Folder Serwisy
Folder DaneStudentów
Stona index.aspx
STRONA DOMYŚLNA
Stona opis.aspx
Server.MapPath("~”)  C:\Serwisy\DaneStudentów
Server.MapPath(‘~/opis.aspx”);  C:\Serwisy\DaneStudentów\opis.aspx
Server.MapPath(‘opis.aspx”);  C:\Serwisy\DaneStudentów\opis.aspx
Katalog
wirtualny
Przekazywanie informacji przez hiperłącze
<body>
Wybierz wielkość tabliczki mnożenia:<br />
<%
for (int i = 5; i <= 9; i++)
Response.Write("<a href=\"Tabliczka.aspx?wielkosc=" + i + "\">Wielkość " + i + "</a><br />");
%>
<br />
<%
if (Request.QueryString["wielkosc"] != null)
{
Response.Write("<table border=1>");
int w = Convert.ToInt32(Request.QueryString["wielkosc"]);
for (int i = 1; i <= w; i++)
{
Response.Write("<tr>");
for (int j = 1; j <= w; j++)
{
Response.Write("<td bgcolor=\"" + (i == 1 || j == 1 ? "red" : "green") + "\">");
Response.Write(i*j);
Response.Write("</td>");
}
Response.Write("</tr>");
}
Response.Write("</table>");
}
%>
</body></html>
ASP.NET a PHP
<%@ Page Language="C#" %>
<html>
<head><title>Kwadrat</title></head>
<body>
<form method="post">
<input name="bok" type="text" />
<input type="submit" value="Oblicz" />
</form><br />
<%
if (Request.Form["bok"] != null)
{
double a = Convert.ToDouble(Request.Form["bok"]);
Response.Write("Pole=" + (a * a));
}
%>
</body>
</html>
<html>
<head><title>Kwadrat</title></head>
<body>
<form method="post">
<input name="bok" type="text" />
<input type="submit" value="Oblicz" />
</form><br />
<?
if (isset($_POST["bok”])
{
$a = $_POST["bok”];
print "Pole=".($a * $a);
}
?>
</body>
</html>
Literatura
• http://www.asp.net/get-started
• http://quickstarts.asp.net/QuickStartv20/aspnet/
• http://www.centrumxp.pl/dotNet
Mysior: Wprowadzenie do ASP.NET 2.0. Ćwiczenia
praktyczne, NAKOM 2008
• MCTS Self-Paced Training Kit (Exam 70-562): Microsoft .NET
Framework 3.5 - ASP.NET
• M.
KONIEC