Introdução ao
Desenvolvimento
ASP.NET
Paulo Sousa
Instituto Superior de Engenharia do Porto Instituto Politécnico do Porto
Índice
z
Plataforma .net
z
C#
z
ASP.net
z
Visual Studio.net
z
Web forms ASP.net
z
Validação de formulários
Plataforma .net
Introdução ao desenvolvimento
ASP.net
.net framework
z
Plataforma de desenvolvimento
z
Máquina virtual para execução
z CLR (Common Language Runtime)
z
Biblioteca de classes
z .net framework Class Library
z Conjunto de classes base sobre a qual se
.net framework (2/2)
Win32 Win32 Message Message Queuing Queuing COM+ COM+ (Transactions, Partitions, (Transactions, Partitions, Object Pooling) Object Pooling) IISIIS WMIWMI
Common Language Runtime Common Language Runtime .NET Framework Class Library .NET Framework Class Library
ADO.NET: Data and XML ADO.NET: Data and XML Web Services
Web Services User InterfaceUser Interface VB C++ C#
ASP.NET ASP.NET
CLR
.NET Framework Class Library Support
.NET Framework Class Library Support
Thread Support
Thread Support COM MarshalerCOM Marshaler Type Checker
Type Checker Exception ManagerException Manager
MSIL to Native MSIL to Native Compilers Compilers Code Code Manager Manager Garbage Garbage Collection Collection Security Engine
Security Engine DebuggerDebugger
Class Loader
Características CLR
z Gestão de memória Æ Garbage collection
z Evita “perdas” de memória
z Excepções
z Tratamento de erros mais elegante
z Type safety
z Validações de compile e run time para casts e
inicializações
z Versioning
z Gestão de processos e threads z Sistema comum de tipos
z Tudo são objectos
“Máquina virtual”
z
Instanciação de Common Language
Infrastructure (CLI)
z Standard ECMA
z
Um mesmo formato de ficheiro binário
z
Um sistema de tipos comum
z
Meta dados
z
Linguagem intermédia (MSIL)
z Permite várias linguagens de programação
Implementações CLI
z
Microsoft
Î
CLR
z
Shared Source CLI
z Mono (Linux)
Compilação e Execução
Class Loader Class Loader Class Loader JIT Compiler with optional verification JIT Compiler JIT Compiler with optional with optional verification verification Execution Execution Security Checks Security Checks EXE/DLL (MSIL and metadata) EXE/DLL (MSIL and metadata) Class Libraries (MSIL and metadata) Class Libraries (MSIL and metadata) Trusted, pre-JITed code only Call to an uncompiled method Runtime Engine Managed Native Code Compiler Compiler Source Code Source CodeAssembly
z
Blocos de construção de aplicações
z
Unidade fundamental de deployment,
versioning, reutilização e segurança
z
Colecção de tipos e recursos
z
Fornece meta-informação ao CLR para
execução
z
Todos os tipos existem no contexto de
um assembly
Aplicação .net
CTS
z
Common Type System
z
Infra-estrutura para inter-operabilidade
entre linguagens de programação
z
Orientado a objectos
z
Suporta tipos de referência e tipos de
valor
z
Compatível com linguagens
Value-types & Reference-types
z
Value types
z Contém directamente os dados z Não pode ser null
z
Reference types
z Contém referência para objecto z Pode ser null
20
int sp
Garbage Collection
C#
Introdução
z Nova linguagem tendo por base o C/C++
z Também vai buscar inspiração ao Java ;-)
z Mantém o investimento e know-how existente z Código mais “limpo”
z Construções sintáticas especiais para tirar partido do
framework
z Tudo são objectos
z Ficheiros com extensão .cs
z Declaração e definição de métodos no mesmo
Tipos de dados
z object z string
z sbyte, short, int, long z byte, ushort, uint, ulong
z char
z float, double, decimal
z bool
z Estes tipos são alias para os tipos definidos na
framework
Classes e namespaces
z
Organização do código dentro de
classes
z
Classes organizadas dentro de
namespaces
namespace Demo {
public class MyClass { ...
} }
Métodos
z Sintaxe semelhante ao C/C++ z Podem ser públicos ou privados z Suporta overloading
public class MyHelloWorld { ...
public void SayHello() { ... }
private void SetTitle(String Title) { ... }
Passagem de parâmetros
z Por valor
z Por referência
z out – parâmetro de saída
z ref – parâmetro de entrada e saída
public void func1(int x) { ... }
public void func2(out int x) { ... }
public void func2(ref int x) { ... }
Herança
z
Apenas existe herança simples
public class MyClassBase { ...
public void Func() { ... } }
public class MyClassDeriv : MyClassBase { ...
public new void Func() { base.Func(); ... } }
Herança (2/2)
z
Métodos não são virtuais por defeito
public class MyClassBase { ...
public virtual void Func() { ... } }
public class MyClassDeriv : MyClassBase { ...
public override void Func() { base.Func(); ... }
Propriedades
z Sintaxe alternativa para acesso a membros de
dados da classe mas com as vantagens dos métodos
public class Button : Control {
private string m_caption; public string Caption {
get { return m_caption; }
set { m_caption = value; Repaint(); } }
... }
Operadores
zAtribuição
z = zRelacionais
z < <= > >= == != zLógicos
z && || ! zAritméticos
z + - * / % z += -= *= /= ++--Constantes
z
Pré-definidas
z null
z true false
z
De utilizador
Criação de objectos
// definição da classe
public class MyClass { ... }
// definição da variável
MyClass obj;
// criação do objecto
Construtores
z
Seguem as regras do C/C++
z Mesmo nome da classe
z Sem tipo de retorno
z Podem ter ou não argumentos
public class MyClass { ...
public MyClass() { ... }
public MyClass(String Title) { ... } }
Arrays
z
Suportados ao nível da biblioteca base
de classes em
System.Array
// declaração do vector
String[] vec;
// criação do vector
vec = new String[10];
// número de elementos pode ser dinâmico
Ciclos
// repetição n vezes
for (int x = 0; i < vec.Length; i++)
Console.WriteLine(vec[i]);
// repetição condicional
int i = 0;
while (i < vec.Length) {
Console.WriteLine(vec[i]); i++;
}
// enumeração (colecções)
foreach (String x in vec) Console.WriteLine(x);
Condicionais
// teste de decisão if (i < vec.Length) Console.WriteLine(vec[i]); else Console.WriteLine(“Erro!!!”); // teste múltiplo switch (x) { case 1: ...; break;case 2: ...; goto case 3;
case 3: ...; break;
default: ...; break; }
Interfaces
z Semelhantes a classes mas não têm
implementação dos métodos
z Apenas definem as assinaturas z Todos os métodos são públicos
public interface IMovimentavel {
void MoverEsquerda(); void MoverDireita(); ...
Implementação de Interfaces
z Qualquer classe pode implementar uma ou
mais interfaces
public class Pessoa : IMovimentavel
{
void MoverEsquerda() { ... }
void MoverDireita() { ... }
... }
Enumerados
z Fortemente “tipados”
z Sem conversão automática para int
z Suportam operadores +, -, ++, --, &, |, ^, ~ z Pode-se definir tipo de dados base
z Byte, short, int, long
enum Color : byte { Red = 1,
Green = 2, Blue = 4, Black = 0,
White = Red | Green | Blue }
structs
z Semelhantes a classes, excepto
z Alocação na stack e não no heap z Não suporta herança
z Cópia (atribuição) de contéudo e não de referência z Ideal para conceitos pequenos (ex., Complex)
z Utilizada nos tipos primitvos da framework (ex. int)
z Benefícios
z Como não são alocadas no heap não colocam carga
Classes e estruturas
class CPoint { int x, y; ... } struct SPoint { int x, y; ... } SPoint sp = new SPoint(10, 20); CPoint cp = new CPoint(10, 20);
10 20 10 10 CPoint sp cp
delegates
z Ponteiros (orientados a objectos) para métodos z Permite múltiplos receptores
z Cada delegate tem uma lista de invocação z Publish/subscribe
z Base para o mecanismo de eventos
delegate void MouseEvent(int x, int y);
delegate double Func(double x); Func fn = new Func(Math.Sin); double x = fn(1.0);
Comentários XML
class XmlElement {
/// <summary>
/// Returns the attribute with the given name and /// namespace</summary>
/// <param name="name">
/// The name of the attribute </param>
/// <param name="ns">
/// The namespace of the attribute, or null if /// the attribute has no namespace</param>
/// <return>
/// The attribute value, or null if the attribute /// does not exist</return>
/// <seealso cref=" ="GetAttr(string)"/>
public string GetAttr(string name, string ns) { ... ...
} }
ASP.net
Introdução ao desenvolvimento
ASP.net
O que é ASP.NET?
z
Sucessor do ASP
z
Páginas dinâmicas com processamento
no servidor
z Baseado no conceito de «web form»
z
Independente da linguagem de
programção
z
Independente do browser
ASP.net execution model
ASP.net application
XML Data Database Internet Internet Page1. aspx Page2. aspx Web Services WebServices ComponentsComponents Web Forms Code-behind pages global. asax Web. config machine. config ASP.NET Web Server
Outpu
t Cache
O que são web forms?
z .aspx extension z Page attributes z @ Page directive z Atributos Body z Atributos Formz Controlos com atributo id
<%@ Page Language="vb" Codebehind="WebForm1.aspx.cs" SmartNavigation="true"%>
<html>
<body ms_positioning="GridLayout">
<form id="Form1" method="post" runat="server"> <asp:Text id=“Text1” />
</form> </body> </html>
<%@ Page Language="vb" Codebehind="WebForm1.aspx.cs" SmartNavigation="true"%>
<html>
<body ms_positioning="GridLayout">
<form id="Form1" method="post" runat="server"> <asp:Text id=“Text1” />
</form> </body> </html>
O que é o “Code-Behind“ ?
z Separação do código e do conteúdo
z Programadores e designers UI podem trabalhar em
separado
z Controlos são objectos/variáveis acessíveis pelo ID
Form1.aspx
Form1.aspx Form1.aspxForm1.aspx
<tags>
<tags>
code
code
code
code
Separate files Single file Form1.aspx.cs Form1.aspx.csComo funciona o code behind
z
Criar ficheiros separados
z
Usar directiva @ Page para associar os
dois ficheiros
Page1.aspx <% @ Page Language="c#" Inherits="Project.WebForm1" Codebehind="Page1.aspx.cs" Src = "Page1.aspx.cs" %> Page1.aspx.cspublic class WebForm1 {
private void cmd1_Click() {
… } }
Mudança de Paradigma
z
JSP/ASP/PHP
z Scripts servidor (páginas dinâmicas) que
geram resultado HTML
z
ASP.NET
z Formulários com modelo de programação
próprio (semelhante aos ambientes visuais para desktop, ex., Visual Basic)
z Esconde a geração de HTML do
Visual Studio .net
Introdução ao desenvolvimento
ASP.net
IDE
z
Visual Studio .net 2003
z Solução multi-projecto z Multi-linguagem
z Multiplos tipos de projecto
z Debugger
z Geração de código .net z Geração de código nativo
VS.net
Toolbox Task List Solution Explorer Dynamic Help Editor/Browser Properties Server Explorer Object BrowserThe Development Process
Create a Design Specification Create a Design Specification Build Build Test and Debug Test and Debug Create the Interfaceand Write Code Create the Interface
and Write Code Create a
New Project Create a New Project
Visual Studio .NET
Deploy Deploy
Ficheiros
z
Solution files (.sln, .suo)
z
Project files (.vbproj, .csproj)
z
Web application files
z ASP.NET Web Forms (.aspx)
z ASP.NET Web services (.asmx)
z Classes, code-behind pages (.vb or .cs) z Global application classes (.asax)
z Web.config file
Estrutura de ficheiros de uma
aplicação Web
wwwroot wwwroot Bin Bin Inetpub Inetpub ProjectA ProjectA My Documents My Documents Development Files Development Files Assembly Files Assembly Files WebForm1.aspx WebForm1.aspx.vb (Code-behind page) Visual Studio Projects Visual Studio Projects Solution Solution Solution.sln ProjectA.vbproj ProjectA.dll BuildWeb forms ASP.net
Introdução ao desenvolvimento
ASP.net
O que são web forms?
z Páginas dinâmicas com extensão aspxz Preferencialmente com “code behind”
z Têm um modelo de objectos para programção próprio
z No formulário colocam-se controlos “server control”
z Web control z HTML control
z Esses controlos são do tipo
z Textbox z Radio z Button z List z ...
Modelo de Objectos
z
Server
z Representa o servidor web (ex, IIS)
z
Page
z Representa a própria página web
z
Request
z Representa o pedido efectuado pelo browser
z
Response
Objecto Server
zMachineName
zCreateObject()
zExecute()
zTransfer()
zMapPath()
z...
Classe Page
z
Controls
z
User
z
FindControl()
Objecto Request
zBrowser
zFiles
zForm
zServerVariables
z...
Objecto Response
zContentType
zExpires
zIsClientConnected
zBinaryWrite()
zClear()
zRedirect()
z...
O que são “server controls”
z Runat="server"
z Eventos são tratados no servidor z Permite guardar estado (View state)
z Funcionalidade intrínseca
z Modelo de programação comum
z Todos possuem atributo Id e Text
z Geram HTML de acordo com o browser do
cliente
<asp:Button id="Button1" runat="server" Text="Submit"/>
<asp:Button id="Button1" runat="server" Text="Submit"/>
HTML server controls
z Baseados nos elementos
HTML
z Runat=server
z Existem no namespace
System.Web.UI.HtmlControls
<input type="text" id="txtName"
runat="server" />
<input type="text" id="txtName" runat="server" />
Web server controls
z Existem no namespace System.Web.UI.WebControls z Sintaxe asp.net z HTML gerado <asp:TextBox id="TextBox1" runat="server">Text_to_Display </asp:TextBox> <asp:TextBox id="TextBox1" runat="server">Text_to_Display </asp:TextBox><input name="TextBox1" type="text" value="Text_to_Display"
Id="TextBox1"/>
<input name="TextBox1" type="text" value="Text_to_Display"
Que tipo de server control
user?
You need specific
functionality such as a calendar or ad rotator The control will interact with
client and server script
You are writing a page that might be used by a variety of browsers
You are working with
existing HTML pages and want to quickly add
ASP.NET Web page functionality
You prefer a Visual Basic-like programming model You prefer an HTML-like
object model
Use Web Server
Use Web Server
Controls if: Controls if: Use HTML Server Use HTML Server Controls if: Controls if:
Bandwidth is not a problem Bandwidth is limited
Demo – HTML gerado for um
web form
Ciclo de vida de uma página
Page_Load
Page_Load
Page_Unload
Page_Unload
Textbox1_Changed
Textbox1_Changed
Button1_Click
Button1_Click
Page is disposed
Page_Init
Page_Init
Control events Control events Change Events Change Events Action Events Action EventsO que são procediemntos de
evento?
z
Acções em resposta à interacção com
entre o utilizador e os controlos numa
página
Script no cliente
z
Interpretado pelo browser
z
Não tem acesso ao servidor
z
<SCRIPT language="language">
Internet
.HTM
Script no servidor
z
compilado e executado no servidor
z
Tem acesso aos recursos do servidor
z
<SCRIPT language="language“
runat="server">
Internet
.ASPX
Client-Side and Server-Side
Events
Tratamento de eventos
z
Visual Studio .NET declares variables
and creates an event procedure template
protected System.Web.UI.WebControls.Button cmd1; private void InitializeComponent()
{
this.cmd1.Click += new System.EventHandler(this.cmd1_Click); this.Load += new System.EventHandler(this.Page_Load);
}
private void cmd1_Click(object s, System.EventArgs e) { … } protected System.Web.UI.WebControls.Button cmd1;
private void InitializeComponent() {
this.cmd1.Click += new System.EventHandler(this.cmd1_Click); this.Load += new System.EventHandler(this.Page_Load);
}
Postback
Page.IsPostback
z
Evento Page_Load é executado em cada
pedido
z
Usar Page.IsPostBack para verificar se
é 1º pedido ou não
private void Page_Load(object sender, System.EventArgs e) {
if (!Page.IsPostBack) {
// executes only on initial page load }
//this code executes on every request }
private void Page_Load(object sender, System.EventArgs e) {
if (!Page.IsPostBack) {
// executes only on initial page load }
//this code executes on every request }
View state
z
Hidden ViewState control of name-value
pairs stored in the Web Form
z
On by default, adjustable at Web Form
and control level
<%@ Page EnableViewState="False" %> <asp:ListBox id="ListName" EnableViewState="true" runat="server"> </asp:ListBox> <%@ Page EnableViewState="False" %> <asp:ListBox id="ListName" EnableViewState="true" runat="server"> </asp:ListBox>
<input type="hidden" name="__VIEWSTATE" value="dDwtMTA4MzE0MjEwNTs7Pg==" />
<input type="hidden" name="__VIEWSTATE" value="dDwtMTA4MzE0MjEwNTs7Pg==" />
Demo – tratamento de dados
num formulário
Tratamento de dados
z
Obter dados de um web form
z Usar as variáveis criadas automaticamente
para os controlos servidor
z Request.Form[nome-do-input]
z
Transferir execução para outra página
z Server.Transfer()
Perguntas & Respostas
Introdução ao desenvolvimento
ASP.net
Mais Informação...
z MSDN Library
z http://msdn.microsoft.com/library
z .net framework center
z http://msdn.microsoft.com/netframework/
z C#
z http://msdn.microsoft.com/vcsharp/
z ASP.net
z http://www.asp.net
z Laboratório .net do ISEP/IPP
Mais Informação...
z
Open CLI
z http://sourceforge.net/projects/ocl
z
Mono (.net @ Unix)
z http://www.go-mono.com/
z
ECMA
Mais Informação...
z
Introduction to C# @ ECMA
z
http://www.ecma-international.org/activities/Languages/Introdu ction%20to%20Csharp.pdf
z
Common Language Infrastructure @
ECMA
z
http://www.ecma-international.org/activities/Languages/ECMA %20CLI%20Presentation.pdf
Introdução ao
Desenvolvimento
ASP.NET
Paulo Sousa
Instituto Superior de Engenharia do Porto Instituto Politécnico do Porto