850 likes | 1.16k Views
Desarrollo web con ASP.NET. Agenda. Introducción a ASP.NET Modelo de ejecución Web Forms Trabajo con controles Estado en ASP.NET Aplicaciones web Seguridad Desarrollo web para dispositivos. Introducción a ASP.NET. Introducción a ASP.NET Historia del desarrollo web. HTML (1991)
E N D
Agenda • Introducción a ASP.NET • Modelo de ejecución • Web Forms • Trabajo con controles • Estado en ASP.NET • Aplicaciones web • Seguridad • Desarrollo web para dispositivos
Introducción a ASP.NETHistoria del desarrollo web • HTML (1991) • Páginas estáticas orientadas al contenido • CGI (1993) • Ejecutables que generan HTML dinámicamente • Versión mejorada: ISAPI • ASP (1996), PHP (1997), JSP (1999) • Páginas HTML que incluyen código script dinámico
VB 6 Introducción a ASP.NETDiferencias con desarrollo Windows Private Sub Command1_Click() If List1.SelCount > 0 Then Label1.Caption = "Hola, " & List1.Text Else Label1.Caption = "" End If End Sub
ASP Introducción a ASP.NETDiferencias con desarrollo Windows <html> <%@ Language=VBScript %> <% nombres = array("Antonio", "Jose", "Alberto", "Luis", "Benito") %> <body> <p>Seleccione su nombre:</p> <form method="POST" action="HolaMundo.asp"> <p><select name="nombre" size="5"> <% for i = 0 to UBound(nombres) %> <option <% if Request.Form("nombre") = nombres(i) then %> selected <% end if %> > <%=nombres(i) %></option> <% next %> </select><br><br> <input type="submit" value="Di hola"></p> </form> <% if Request.Form("nombre") <> "" then %> <p>Hola, <%=Request.Form("nombre") %></p> <% end if %> </body> </html>
Sin estado Diseño PeticiónRespuesta ComposiciónHTML Eventos Propiedades Paso de parámetros Estado Lógica Introducción a ASP.NETDiferencias con desarrollo Windows <html> <%@ Language=VBScript %> <% nombres = array("Antonio", "Jose", "Alberto", "Luis", "Benito") %> <body> <p>Seleccione su nombre:</p> <form method="POST" action="HolaMundo.asp"> <p><select name="nombre" size="5"> <% for i = 0 to UBound(nombres) %> <option <% if Request.Form("nombre") = nombres(i) then %> selected <% end if %> > <%=nombres(i) %></option> <% next %> </select><br><br> <input type="submit" value="Di hola"></p> </form> <% if Request.Form("nombre") <> "" then %> <p>Hola, <%=Request.Form("nombre") %></p> <% end if %> </body> </html> Private Sub Command1_Click() If List1.SelCount > 0 Then Label1.Caption = "Hola, " & List1.Text Else Label1.Caption = "" End If End Sub
Introducción a ASP.NET¿Qué es ASP.NET? • ASP.NET permite generar aplicaciones web con el paradigma de Windows • Diseño + lógica • Componentes gráficos • Eventos • Propiedades • Estado • Construido sobre .NET
Introducción a ASP.NET¿Qué es .NET? VB C++ C# JScript … Visual Studio.NET Common Language Specification ASP.NET: Web Services and Web Forms WindowsForms ADO.NET, XML, Enterprise Services Base Class Library Common Language Runtime
.ASPX, .ASCX, .ASMX Modelo de ejecuciónArquitectura con IIS 5 INETINFO.exe ASPNET_WP.exe Aspnet_wp.exe HTTPHandlers ISAPI ASP.NET ASPX ASMX CLR App Domain CLR App Domain HTTPModules Auth Sesión Caché Filtros ISAPI CLR App Domain TCP/IP
.ASPX, .ASCX, .ASMX Modelo de ejecuciónArquitectura con IIS 6 W3WP.exe ISAPI ASP.NET Aspnet_wp.exe HTTPHandlers HTTPModules Filtros ISAPI HTTP.SYS
Test.aspx ¿test.aspx compilada? Procesar GET test.aspx GET test.aspx Leer Generar ISAPI ASP.NET Test.cs Instanciar Respuesta HTML Clase compilada Compilar Respuesta HTML Modelo de ejecuciónCompilación dinámica
Modelo de ejecuciónEl código está detrás • Separación en dos ficheros físicos • Código por detrás de la página (“code-behind”) • Código en cualquier lenguaje .NET soportado ASP ASP .NET <tags> <tags> código código test.aspx.cs test.asp test.aspx
Generar Compilar Modelo de ejecuciónCode-behind Test.cs Test.aspx Test_aspx Deriva de… TestClass.cs Compilar TestClass (Opcional)
Web Forms¿Qué son? • Formularios semejantes a Windows pero en Web • Separación lógica – diseño • Componentes gráficos • Estado • Eventos • Propiedades
Web FormsControles de servidor • Componentes que encapsulan la generación de HTML • Semejantes a los controles de Windows • Pleno soporte desde Visual Studio • Paleta de componentes • Layout • Diseñadores de propiedades • Asistentes
Web FormsPropiedades de controles • Los controles tienen propiedades • Editables en modo diseño • También accesibles desde código • A partir del llamado árbol de controles Test.aspx HtmlLiteral ListBox HtmlLiteral <html> <body> <select> … </select> </body> </html>
Web FormsEstado • Los controles de servidor mantienen sus propiedades • Dos mecanismos • Procesamiento automático de variables del post • Viewstate: variable de formulario oculta • Cuidado con el tamaño, deshabilitar si no se utiliza
Web FormsEventos de servidor • Los controles pueden lanzar eventos • Ya sean HtmlControl o WebControl • Load, Click, TextChange, SelectedItemChange… • Posibilidad de procesamiento: • En servidor • En cliente • Encolados hasta siguiente postback • Con todo esto cambia el paradigma de desarrollo • De petición-respuesta a event-driven
Trabajo con controlesControles HTML • Todos los elementos HTML tienen un control asociado • Sólo hay que marcarlo con runat=“server” • Sólo tienen sentido si son dinámicos o queremos responder a un evento • En caso contrario utilizar literales
Trabajo con controlesControles HTML (II) System.Object System.Web.UI.Control HtmlControl <img> HtmlContainerControl HtmlImage HtmlInputControl HtmlForm <form> HtmlInputFile <input type=file> HtmlGenericControl <span>, <div>, … HtmlSelect HtmlInputHidden <input type=hidden> <select> HtmlInputImage <input type=image> HtmlTable <table> HtmlInputRadioButton <input type=radio> HtmlTableCell <td>, <th> HtmlInputText <input type=text> HtmlTableRow <tr> HtmlInputButton <input type=button> HtmlTextArea <textarea> HtmlInputCheckBox <input type=checkbox> HtmlAnchor <a> <button> HtmlButton
Trabajo con controlesWebControls • Nuevo conjunto de controles con propiedades consistentes • Ej. Misma propiedad BackColor en table y span • Controles complejos • Ej. Calendar, DataGrid • Se adaptan al browser
Trabajo con controlesWebControls (II) System.Object System.Web.UI.Control Xml Repeater WebControl ListControl AdRotator BaseDataList RadioButtonList DataGrid CheckBoxList DropDownList DataList Button ListBox Calendar Panel CheckBox Table RadioButton Image HyperLink ImageButton TextBox Label
Trabajo con controlesWebControls (III) Calendar ImageButton Image DataList AdRotator DataGrid
Trabajo con controlesControles Internet Explorer • Controles extendidos complejos DHTML • Descargable de forma separada Toolbar TreeView TabStrip MultiPage
Trabajo con controlesControles de terceros • Cientos de nuevos controles en http://www.asp.net/ControlGallery
Trabajo con controlesDesarrollo de controles • WebControls • Derivar de System.Web.UI.Control • Añadir propiedades, eventos, métodos • Sobrescribir Render() • Diseñadores, adaptación, Intellisense… • Controles de usuario • Forma sencilla de crear controles • Composición de controles reutilizables • Lógica encapsulada en el control
Trabajo con controlesEnlace a datos • Todo es enlazable • Múltiples mecanismos • En línea con <%# Expresión %> • Utilizando propiedad DataSource del control • Utilizando colección DataBindings del control • Para efectuar el enlace llamar a DataBind()
Trabajo con controlesPlantillas (templates) • Los controles pueden ser personalizados con sus propiedades o usando hojas CSS • Colores, bordes, letra, etc. • Semejante a Windows 9x / NT / 2000 • Las plantillas permiten definir layouts • Modificación de porciones del interfaz • Semejante a Windows XP / 2003 • Muchos controles exponen plantillas que son personalizables • Ej. Cabeceras, celdas, elemento de lista.
Trabajo con controlesControles de validación • Validan la entrada de datos del usuario • Reglas definidas de forma declarativa • Campo requerido • Comparaciones, rangos • Expresiones regulares • Personalizadas • Se ejecutan transparentemente en cliente y servidor • Evita roundtrips
Estado en ASP.NETSesión • Estado entre peticiones de un mismo cliente • Dos tipos • Mediante cookie: generada automáticamente • ASP.NET_SessionID • Cookieless: almacenada en la URL • http://server/site/(uqwfp455t2qav155)/default.aspx • Accesible mediante Page.Session • Diccionario clave / valor
Estado en ASP.NETSesión (II) • El estado de la sesión puede almacenarse: • In-process, en el proceso de ASP.NET • Out-of-process, en un servidor de estado ASP.NET • Out-of-process, en una base de datos SQL Server • In-process más óptimo • Out-of-process fiabilidad y escalabilidad • Sobrevive a caídas • Estado compartido entre máquinas de una granja
Estado en ASP.NETViewstate • El Viewstate puede utilizarse como mecanismo genérico de estado • Estado entre una petición y la siguiente • Características • Muy escalable • Uso de ancho de banda • Útil para datos de pequeña longitud ViewState["color"] = “rojo"; strColor =(string)ViewState["color"];
Estado en ASP.NETEstado de aplicación • Estado compartido entre todos los clientes • Accesible mediante Page.Application • ¡Cuidado con la concurrencia! • Application.Lock antes de actualizar • Application.Unlock después de actualizar • ¡Cuidado con el rendimiento! • Los bloqueos pueden ralentizar • No se comparte entre distintos servidores
Estado en ASP.NETCaché • Caché de salida (output caching) • Permite reutilizar el resultado de una página entre peticiones • Enorme ganancia de rendimiento: páginas cacheadas tan rápidas como las estáticas • También para controles de usuario • Se cachean las porciones de página que no cambian
Estado en ASP.NETCaché (II) <%@ OutputCache VaryByParam=“XXX“ VaryByHeader=“XXX” VaryByCustom=“XXX” VaryByProperty=“XXX” Duration=“XX" %> • VaryByParam • Variar por el parámetro especificado • VaryByHeader • Variar por cabecera (ej. User-agent, lenguaje) • VaryByCustom • Rutina personalizada • VaryByProperty • Variar por propiedad del control • Duration • Duración de caché