2010-03-26
1
Technologie internetowe
Wykład 5
Wprowadzenie do skrytpów serwerowych
Skrypty serwerowe
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
Programy osadzone w kodzie HTML
2010-03-26
2
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)
2010-03-26
3
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: &&, ||, !
2010-03-26
4
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;
2010-03-26
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
}
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.
nagłówek
2010-03-26
6
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);
2010-03-26
7
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
<%@ Page Language="C#" %>
<html>
<head><title>Skrypt</title></head>
<body>
<script language="JavaScript">
// SKRYPT KLIENCKI
for (i=0;i<5;i++) document.write(i+'<br>');
</script>
<%
// SKRYPT SERWEROWY
for (int i=0;i<5;i++) Response.Write(i+"<br>");
%>
</body>
Skrypt widziany przez serwer
<%@ Page Language="C#" %>
<html>
<head><title>Skrypt</title></head>
<body>
// SKRYPT KLIENCKI
<script language="JavaScript">
for (i=0;i<10;i++) document.write(i+'<br>');
</script>
0<br>1<br>2<br>3<br>4<br>
</body>
Skrypt widziany przez przeglądarkę
0
1
2
3
4
0
1
2
3
4
Wynik
2010-03-26
8
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" %>
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)
{
}
}
Strona.aspx.cs
2010-03-26
9
Dyrektywy
<%Page Language="C#" Debug="true">
Język
Wyszukiwane
błędów
wykonania
<@%Import Namespace="System.Data" %>
Przestrzeń nazw
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
2010-03-26
10
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
Żądanie do strony1.aspx
Nagłówek HTTP z przekierowaniem
Żądanie do strony1.aspx
REQUEST
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>
2010-03-26
11
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>
2010-03-26
12
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
Klient
Serwer
Pytanie.html
Odpowiedz.aspx
Dane z formularza
Wygenerowany kod HTML stanowiący odpowiedz
2010-03-26
13
Przetwarzanie danych z formularza
<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>
pytanie.htm
<%@ Page Language="C#" %>
<html>
<head><title>Odpowiedź</title></head>
<body>
<%
Response.Write("Przysłano: \n"+Request.QueryString);
%>
</body>
</html>
odpowiedz.aspx
http://www.moj.pl/odpowiedz.asp?imie=Jan&nazwisko=Kowal
Przysłano:
imie=Jan&nazwisko=Kowal
Wynik
Przetwarzanie danych z formularza
<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>
pytanie.htm
<%@ Page Language="C#" %>
<html>
<head><title>Odpowiedź</title></head>
<body>
<%
Response.Write("Przysłano: \n"+Request.Form);
%>
</body>
</html>
odpowiedz.aspx
http://www.moj.pl/odpowiedz.asp
Przysłano:
imie=Jan&nazwisko=Kowal
Wynik
2010-03-26
14
Przetwarzanie
danych z
formularza
<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>
pytanie.htm
<%@ 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>
odpowiedz.aspx
http://www.moj.pl/odpowiedz.asp?imie=Jan&nazwisko=Kowal
Imię: Jan
Nazwisko:Kowal
Wynik
Przetwarzanie
danych z
formularza
<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>
pytanie.htm
<%@ 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>
odpowiedz.aspx
http://www.moj.pl/odpowiedz.asp
Imię: Jan
Nazwisko:Kowal
Wynik
2010-03-26
15
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
<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>
pytanie.htm
<%@ 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>
odpowiedz.aspx
2010-03-26
16
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"));
2010-03-26
17
Obiekt Server
Metody:
• Transfer – przekierowanie obsługi strony po stronie serwera
• MapPath – tłumaczenie ścieżki względnej na ścieżkę fizyczną
Żądanie do strony1.aspx
Zawartość strony strona2.aspx
TRANSFER
Mapowanie ścieżki
Dysk C:
Folder Serwisy
Folder DaneStudentów
Stona index.aspx
Stona opis.aspx
Serwer
Katalog
wirtualny
STRONA DOMYŚLNA
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
2010-03-26
18
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>