Capítulo segundo - Fundamentos teóricos

Anuncio
Capítulo segundo
Fundamentos teóricos
Se plantea como objetivo de esta sección exponer las distintas tecnologías
que se pueden contemplar a la hora de desarrollar la aplicación. Se explica
en qué consiste cada una. Se prestará principal atención a las tecnologías de
desarrollo Web.
I.2.1 Lenguajes de programación
Una de las alternativas que se contemplan es la programación de una aplicación
con alguno de los lenguajes de programación existentes. Uno de los lenguajes
contemplados por las facilidades que aporta para el manejo de bases de datos es el
conocido lenguaje Java.
Los detalles referentes a la programación y a la tecnología se pueden consultar
en la página Web donde se tienen gran cantidad de recursos, manuales, tutoriales,
explicación de la tecnología, etc. [40].
I.2.2 Tecnologías de desarrollo Web
A la hora de desarrollar una aplicación Web se puede elegir entre varios
lenguajes de programación. Si además se quiere usar bases de datos en nuestra
aplicación también se dispone de otras varias posibilidades, que en algunas ocasiones
están determinadas o influenciadas por el lenguaje seleccionado.
Se explican las características de las principales alternativas, que son las
siguientes:
•
•
•
•
ASP: Active Server Pages (páginas de servidor activas) [1]
JSP: Java Server Pages (páginas de servidor Java [2]
PHP: Personal Home Page Hypertext Pre-processor (preprocesador de
hipertexto de páginas personales) [14], [15]
CGI + PERL: Common Gateway Interface (Interfaz de pasarela común) +
Practical Extraction and Reporting Language (lenguaje práctico para la
extracción e informe) [41], [42]
Todos estos lenguajes tienen como objetivo la generación de código HTML
(HyperText Markup Language, lenguaje de marcas hipertextuales) [30], de manera que
una misma página de código pueda generar distintas páginas HTML en función de
parámetros de entrada. Esto posibilita la interacción del usuario con la página Web.
En lo que sigue se explicarán los tres primeros lenguajes ya que se consideran
actualmente los más usados. Se expondrá su filosofía de uso y se describirán
Conversión de aplicación empresarial para permitir el acceso remoto usando PocketPC y PC
17
I Memoria
resumidamente los aspectos más importantes. Se terminará la explicación con algunos
comentarios sobre su instalación.
I.2.3 Active Server Pages
Active Server Pages (ASP) es una tecnología del lado servidor de Microsoft para
páginas web generadas dinámicamente. Un documento ASP puede contener tanto
sintaxis HTML como código script, que interpretará el servidor para devolver un
documento HTML generado a partir de otros documentos HTML y resultados de la
interpretación de tal código script.
ASP permite conservar la información específica de un usuario a lo largo de
varias solicitudes HTTP (HyperText Transfer Protocol, protocolo de transferencia de
hipertexto) gracias al uso de variables a lo largo de varios documentos Web (User
Session).
Cuando se transfiere una página ASP al navegador de un usuario ocurren los
siguientes acontecimientos:
•
•
•
•
una vez que se introduce una dirección Web (URL) en el navegador, se envía
al servidor Web una petición.
el servidor Web, generalmente IIS (Internet Information Server, servidor de
información de internet) recibe la solicitud y comprueba la disponibilidad de
la página pedida.
Si se trata de una página HTML, se envía directamente al navegador y éste la
muestra al usuario.
Si se trata de una página ASP, el servidor busca todas las instrucciones ASP
que contiene la página, las ejecuta y devuelve los resultados con el resto de
la página al navegador Web del usuario.
Se puede observar que al navegador Web del usuario sólo llegan páginas HTML.
Sólo es en el servidor donde existe diferencia entre páginas con código ASP o sin él.
Casi todas las aplicaciones están escritas en VBScript debido a que es el estándar de las
páginas ASP.
ASP se basa en objetos, que se explicarán en el siguiente apartado. Algunas de
las posibilidades que nos dan los objetos son entre otras:
•
•
•
análisis de las entradas del usuario en formularios.
leer y escribir cookies.
acceso a variables de entorno del servidor.
Además tenemos otro tipo de objetos. Los componentes son objetos, por tanto
tienen propiedades y métodos. Para trabajar con un componente lo primero es
instanciarlo. Luego se puede configurar accediendo a sus propiedades y actualizando
sus valores. Llamando a sus métodos se ponen en marcha sus funcionalidades.
18
Conversión de aplicación empresarial para permitir el acceso remoto usando PocketPC y PC
Fundamentos teóricos
La razón de la existencia de estos componentes se debe a las limitaciones de la
funcionalidad del lenguaje con que se programa ASP, que no van más allá de las básicas
de cualquier lenguaje: trabajo con variables, tipos, estructuras de control y un juego de
funciones (que en VBScript es bastante limitado).
Por tanto, si se piensa hacer una aplicación algo compleja, con seguridad se
tendrá que realizar basándose en algún componente. Incluso conexiones y accesos a
bases de datos se hacen a través de un componente del servidor.
La mayoría de los componentes son comerciales y habrá que adquirirlos. Es uno
de los problemas de ASP, que no hay utilidades gratuitas. Algunos de estos
componentes comerciales se exponen en un apartado posterior de este mismo capítulo.
Además existen objetos especiales llamados componentes ActiveX. ActiveX es
una tecnología que nos permite ejecutar aplicaciones en el ordenador del usuario a
través de internet. Posibilita que los distintos componentes trabajen entre sí en entornos
de red. También opera en el mismo servidor. Algunos objetos ActiveX se pueden
invocar con ASP permitiendo operaciones como:
•
•
•
acceso al sistema de archivos del servidor Web
envío y recepción de e-mails
accesos a bases de datos
Hay que distinguir los componentes ActiveX, que son objetos del lenguaje de
programación, de los controles ActiveX, que son scripts insertados en una página web
para su ejecución en el cliente.
Lugares donde se pueden adquirir componentes es en Serverobjectos.com o
Persist.com, que son páginas dedicadas a programarlos y venderlos. En ActiveX.com se
pueden encontrar controles además de componentes.
I.2.3.1 Objetos ASP
El ASP es un lenguaje diseñado para la creación de aplicaciones en internet.
Esto quiere decir que existen toda una serie de tareas bastante corrientes a las cuales
debe dar un tratamiento fácil y eficaz. Nos referimos por ejemplo al envío de e-mails,
acceso a archivos, gestión de variables del cliente o servidor como pueden ser su IP o la
lengua aceptada...
El lenguaje de programación para ASP no da una solución fácil y directa a estas
tareas sino que invoca a los denominados objetos que no son más que unos módulos
incorporados al lenguaje que permiten el desarrollo de tareas específicas. Estos objetos
realizan de una manera sencilla toda una serie de acciones de una complejidad
relevante. A partir de una llamada al objeto este realizará la tarea requerida. En cierta
forma, estos objetos nos ahorran el tener que hacer largos programas para operaciones
sencillas y habituales.
Algunos de estos objetos están incorporados en el propio ASP, otros deben de
ser incorporados como si se tratase de componentes accesorios. Por supuesto, no
Conversión de aplicación empresarial para permitir el acceso remoto usando PocketPC y PC
19
I Memoria
podríamos ejecutar correctamente un script en el cual tuviésemos que llamar a un objeto
que no estuviese integrado en el servidor.
Se expondrán los siguientes puntos:
•
•
•
•
•
Definición de objetos, métodos y colecciones
Objetos ASP que existen
Ámbito de operación: cliente, servidor o ambos
Tipo de información que se puede conocer del usuario gracias a objetos ASP
Otros componentes de ASP
I.2.3.1.1 Objetos
Son una agrupación de datos y funciones. Se pueden comparar con las cosas de
la vida real que tienen un carácter y funcionalidad específicos. Todos los detalles en
torno a la implementación se encierran en una cápsula que los oculta al exterior, de
manera que sólo se puede acceder a las propiedades y a la funcionalidad de los objetos a
través de unas interfaces predefinidas.
VBScrìpt pertenece a la clase de lenguajes de programación procedural
ampliados con la funcionalidad de la programación orientada a objetos. Por esta razón la
funcionalidad añadida de VBasic y VBScript (simplificación de VBasic) para manejar
objetos es limitada, no obstante permiten integrar clases de objetos, que es precisamente
lo que se ha hecho con los objetos ASP.
Muy ligado al concepto de objetos está el concepto de colecciones. Las
colecciones son objetos en sí que representan un conjunto de objetos. Todas las
colecciones tienen métodos y propiedades predefinidos: el método Item, la propiedad
Count y el método _NewEnum. Por definición, una colección también tiene la
capacidad de crear objetos del mismo tipo que la colección. En otras palabras, si un
objeto puede ser englobado en un conjunto de objetos iguales, ese objeto tiene un objeto
colección que puede instanciar otros objetos dentro de la colección.
I.2.3.1.2 Objetos en VBScript
Un objeto VBScript posee propiedades, métodos y eventos que operan sobre él.
Como ejemplo definimos un objeto:
<%
Dim objauto
Set objauto = Server.CreateObject("miautomovil ")
objauto.ruedas = 4
objauto.Color = "verde"
objauto.cambio = "manual"
%>
Figura I.2.1 Ejemplo de cómo instancia de un objeto ASP
20
Conversión de aplicación empresarial para permitir el acceso remoto usando PocketPC y PC
Fundamentos teóricos
El método CreateObject del objeto Server (objeto predefinido de VBScript)
devuelve una instancia que se asigna a la variable definida. En las líneas siguientes se
asigna un valor a cada propiedad que definamos.
Si tuviera un método se llamaría de la siguiente forma:
Variable = objeto.metodo()
Y también se podrían pasar parámetros en la llamada del método si éste tuviera
parámetros definidos en su llamada:
Parámetro = valordelparametro
Objeto.metodo (parámetro)
I.2.3.1.3 Objetos estándar de ASP
Se incorporan objetos predefinidos. Son los siguientes:
•
•
•
•
•
•
Request
Response
Session
Server
Application
ObjectContext
Cada uno tiene un comportamiento distinto en su forma de interactuar entre
servidor y cliente.
Los objetos Request y Response se encargan de manejar las consultas del cliente
al servidor y de la respuesta del servidor al cliente respectivamente. El resto de objetos
interaccionan exclusivamente con el servidor.
El objeto Session está subordinado al objeto Application. Éste informa sobre el
inicio de una aplicación y se mantiene activo hasta que se cierra tal aplicación. El objeto
Session se genera cada vez que se inicia una sesión y desaparece cuando concluye la
sesión a la que está asociado. Estos objetos representan y proporcionan funciones que
no están disponibles en servidores Web normales.
El objeto Server es el responsable de las operaciones básicas del servidor.
Algunas tareas son transformar rutas lógicas en rutas físicas o convertir caracteres
ASCII en textos HTML.
El objeto ObjectContext nos permite gestionar nuestras páginas ASP
transaccionales. A través de este objeto se puede abortar una transacción o llevarla a
cabo.
I.2.3.1.3.1 Request
Se compone de cinco colecciones y son las siguientes:
Conversión de aplicación empresarial para permitir el acceso remoto usando PocketPC y PC
21
I Memoria
•
•
•
•
•
QueryString: los pares nombre/valor se agregan y transmiten a través de la
URL.
Form: Al consultar formularios los pares nombre/valor se guardan en esta
colección.
Cookies: si el cliente remite cookies se guardan en esta colección.
ServerVariables: guarda los valores de variables del servidor HTTP.
ClientCertificate: lista de valores utilizada para certificados y datos de
seguridad.
I.2.3.1.3.2 Response
Este objeto ofrece un gran número de métodos que nos permiten interaccionar
con el navegador.
•
Envío de información al navegador
o El método Write:
Es el método más utilizado, ya que devuelve al navegador los resultados
de un código ASP. Su llamada es Response.Write(valor a devolver), o
abreviadamente = valor a devolver, como se muestra en el siguiente
ejemplo:
<BODY>
<%
operacion = “Suma”
operando1= 3
operando2 = 5
resultado = operando1 + operando2
%>
<P>Título:
<%
Response.Write(operacion)
%>
<P>Resultado:
<% = resultado %>
</BODY>
Figura I.2.2 Ejemplo de uso del método Write
•
Control del navegador
o El método Redirect:
Con este método se puede elegir otras páginas ASP o bien páginas
HTML sencillas. Su llamada es Response.Redirect = URLDestino. Esta
llamada siempre se debe realizar delante de cualquier texto HTML para
evitar incompatibilidades con los registros de encabezado HTML que
genera.
22
Conversión de aplicación empresarial para permitir el acceso remoto usando PocketPC y PC
Fundamentos teóricos
o Propiedad Expires:
Sirve para asegurarse que la versión del documento que se tiene es
actual, ya que esta propiedad establece un periodo de tiempo dentro del
cual los datos guardados temporalmente por el navegador se consideran
actuales, así que no hay que pedirlos al servidor.
Pasado el tiempo fijado por esta propiedad, el documento se borra de
la caché y se accede de nuevo a una versión completa desde el servidor.
Esta propiedad se define como Response.Expires = Minutos.
o Propiedad ExpiresAbsolute:
Esta propiedad fija el tiempo absoluto en el que deja de tener validez
el documento. Por tanto, se debe concretar fecha y hora. Se establece
con Response.ExpiresAbsolute = #DateTime#. El formato fecha y hora
se corresponde con la siguiente fecha y hora: DD.MM.AAAA, HH:MM
•
Control de transferencia de los datos
La información de una página ASP se envía continuamente al navegador del
usuario a través de un flujo de datos. El objeto Response cuenta con algunos
métodos que permiten regular este flujo de datos. Las propiedades y métodos
asociados son las siguientes:
o Propiedad Buffer:
Con la propiedad Buffer se establece si la transmisión de datos al
navegador se realiza o bien automáticamente o bien a través del programa
ASP. Response.Buffer = True indica que la transmisión de los datos se
controlará a través del programa ASP.
Esta propiedad se debe definir en un lugar específico dentro de la página:
antes de cualquier texto HTML y después de fijar el lenguaje de script.
<% LANGUAJGE = “VBScript” %>
…
<% Response.Buffer = True %>
…
<HTML>
…
Figura I.2.3 Establecimiento de la propiedad Buffer
o Método Flush :
Al llamarlo se envía inmediatamente al navegador del usuario el código
que hasta entonces se ha ido almacenando en el buffer, y al mismo tiempo se
continúa ejecutando el programa ASP. La llamada es Response.Flush.
Conversión de aplicación empresarial para permitir el acceso remoto usando PocketPC y PC
23
I Memoria
o Método Clear:
Borra código fuente escrito y guardado en el buffer si todavía no se ha
enviado al navegador. Se invoca con Response.Clear.
o Método End:
Se detiene la ejecución de un programa ASP. El buffer ya escrito se envía
al navegador del usuario si la propiedad buffer es true. Se llama con
Response.End.
I.2.3.1.3.3 Session
Una sesión se asocia siempre con un cliente y se genera cuando se solicita el
primer documento y concluye cuando tras un tiempo no se ha recibido ninguna consulta
más de ese cliente.
El concepto session trabaja con Cookies en el lado del cliente. Cada sesión se
identifica con un número exclusivo, que se almacena de forma cifrada en la cookie del
cliente, manteniendo los datos de sesión en el servidor. Hay que tener cuidado de que el
cliente no tenga desactivada la escritura en cookies.
•
Colecciones:
o StaticObjects: Se basa en el archivo global.asa y se utiliza para consultar
un determinado valor de un objeto. Este archivo global.asa es el que
posibilita que se mantengan datos a lo largo de una sesión.
o Contents: Contiene todas las variables que se han insertado en el objeto
Session con comandos script.
•
Propiedades:
Establecen particularidades locales como el idioma o el formato de fecha.
Son las siguientes:
o SessionId: identifica al usuario de forma unívoca y se le asigna a través
de una cookie. Esta cookie no tiene fecha de caducidad con lo que se
elimina cuando se cierra el navegador. Se puede ver el session id con
Response.Write (Session.SessionId).
o Timeout: Indica cuánto tiempo le queda de vida a una sesión si no se
recibe ninguna petición por parte del usuario. Para modificar su valor:
Session.Timeout = 10. En este ejemplo queda fijado en 10 minutos.
o Codepage: Indica cuál de los juegos de caracteres disponibles se va a
utilizar. Session.Codepage = numeroCodigo. El número del código se
puede ver en tablas. Por ejemplo, para Unicode, se tendría el número
1200. Se pueden usar diferentes códigos en una misma página.
24
Conversión de aplicación empresarial para permitir el acceso remoto usando PocketPC y PC
Fundamentos teóricos
o LCID: identificador local. Establece el formato de fecha. Session.LCID =
codigoregion.
•
Método Abandon:
Destruye el objeto Session actual. Se liberan todos los recursos que utiliza el
objeto Session actual una vez se han procesado todas las instrucciones de la
página activa. Hay que hacer notar que sólo se destruye el objeto, no las
variables Session, de manera que después de llamar a este método aún se pueden
consultar estas variables.
La llamada es Session.Abandon. Además se procesa todo el contenido del
evento Session_OnEnd, contenido en el archivo global.asa. Este archivo
simplemente contiene una serie de subrutinas que se ejecutan al inicio y al final
de una sesión o una aplicación.
•
Eventos:
En el objeto Session están las subrutinas OnStart y OnEnd, que se ejecutan
al iniciar y finalizar la sesión. Se explican dichas subrutinas a continuación:
o OnStart
Si el tratamiento correspondiente a este evento está definido en el
archivo global.asa se ejecutarán las instrucciones que contiene y sólo
después se procesa el auténtico programa ASP del código script.
<%
SUB Session_OnStart
…
‘Codigo que se debe ejecutar al iniciar la sesión
…
END SUB
%>
Figura I.2.4 Subrutina OnStart escrito dentro del objeto Session.
Se puede utilizar para definir y dar valores a variables que tengan
validez en toda la sesión.
o OnEnd
Se activa justo antes de eliminar el objeto Session. Las causas pueden
ser o bien llamada al método Session.Abandon o bien a transcurrido el
tiempo Timeout.
Para que tenga efecto este tratamiento de evento también se debe
definir en el archivo global.asa.
<%
Conversión de aplicación empresarial para permitir el acceso remoto usando PocketPC y PC
25
I Memoria
SUB Session_OnEnd
…
‘Codigo que se debe ejecutar al finalizar la sesión
…
END SUB
%>
Figura I.2.5 Subrutina OnEnd escrito dentro del objeto Session
Por ejemplo nos puede servir para guardar datos en el servidor para
disponer de ellos en sesiones futuras.
I.2.3.1.3.4 Application
El objeto Applicaction nos servirá para intercambiar datos entre sesiones, ya que
cuando una sesión existe es porque una aplicación existe. De esta manera se puede tener
variables en una aplicación que serán accesibles desde todas las sesiones, pudiendo así
intercambiar datos.
Una aplicación comienza cuando se llama por primera vez la primera página de
la aplicación. Es cuando se lanza el evento OnStart. Si en el archivo global.asa está
definido el procedimiento Application_OnStart se procesará el código escrito.
•
Colecciones:
o Contents: Ofrece todas las variables que aparecen a lo largo de la
existencia del objeto Application. Para registrar en la colección Contents
una variable, por ejemplo llamada Autor, se hace lo siguiente: <%
Application(“Autor”) = “Ildefonso Ferrer” %>
o StaticObjects: Contiene todos los objetos definidos en global.asa con la
etiqueta <Object>. Su manejo es similar al de la colección anterior.
•
Métodos:
o Lock: asegura de que otros clientes con puedan modificar ninguna de las
variables y propiedades de la aplicación hasta que no se llame al método
UnLock. La llamada es Application.Lock.
o UnLock: anula el bloqueo del objeto Application para el resto de clientes.
Application.UnLock.
•
Eventos:
Análogamente al objeto Session, este objeto también posee los mismos
eventos registrados en el archivo global.asa.
26
Conversión de aplicación empresarial para permitir el acceso remoto usando PocketPC y PC
Fundamentos teóricos
o OnStart:
Se lanza al arrancar una aplicación. Si en el archivo global.asa se ha
definido la subrutina Application_OnStart se ejecutará primero todo el
código allí contenido.
<%
SUB Applicaton_OnStart
…
‘Codigo que se debe ejecutar al iniciar la aplicación
Application(“FechaAhora”) = Now()
…
END SUB
%>
Figura I.2.6 Subrutina OnStart escrita dentro del objeto Application
En este código se ha introducido la fecha, que se puede consultar
mientras esté la aplicación viva:
<% Response.Write(Application(“FechaAhora”)) %>
o OnEnd
Funciona de la misma manera que el evento anterior. Debe estar
registrado en el archivo global.asa.
<%
SUB Application_OnEnd
…
‘Codigo que se debe ejecutar al finalizar la aplicación
…
END SUB
%>
Figura I.2.7 Subrutina OnEnd escrita en el objeto Application
I.2.3.1.3.5 Server
Permite controlar propiedades del servidor y proporciona la posibilidad de crear
objetos propios para ampliar las funciones de ASP. La mayor parte de la funcionalidad
está representada por los métodos que vamos a describir.
•
Métodos:
o CreateObject: Instancia objetos. Server.CreateObject genera objetos con
los métodos, colecciones y eventos que se definan. Ej.: <%
ConexionObjeto = Server.CreateObject (“ADODB.Connection”) %>.
Conversión de aplicación empresarial para permitir el acceso remoto usando PocketPC y PC
27
I Memoria
Genera un objeto de tipo ADODB.Connection cuyo nombre es
ConexionObjeto.
o HTMLEncode: Sustituye todos los caracteres especiales por los
caracteres específicos definidos para HTML.
Ejemplo:
<% text = “Ejemplo” %>
<HTML>
<body>
<% = text %>
<br>
<% Response.Write(Server.HTMLEncode(“<% = text %\>”)) %>
</body>
</HTML>
Figura I.2.8 Ejemplo de uso del método HTMLEncode
Da como salida:
<HTML>
<body>
Ejemplo
<br>
<% = text %>
</body>
</HTML>
Figura I.2.9 Salida del ejemplo anterior
o URLEncode: Toma como parámetro una cadena y la convierte a formato
URL cambiando espacios en blanco por el símbolo “+” y toda una serie
de otros caracteres especiales por “%” seguido de su código ANSI (como
valor hexadecimal). Nota: Así es posible insertar caracteres especiales en
una URL y enviarlos a otras páginas ASP.
o MapPath: Convierte rutas reales en rutas virtuales. Mostramos un
ejemplo.
•
Componentes:
En los programas ASP, los componentes son siempre ActiveX. No
forman parte de ASP, aunque algunos de ellos ya están disponibles con ASP y
ofrecen funciones muy útiles.
Un componente se hace accesible al usuario con la creación de un objeto
a través del objeto Server: Server.CreateObject (“NombreObjeto”).
Vamos a ver algunos de los componentes estándar ActiveX que se
distribuyen con ASP:
28
Conversión de aplicación empresarial para permitir el acceso remoto usando PocketPC y PC
Fundamentos teóricos
o Ad Rotator: Va cambiando de forma cíclica el contenido de un marco de
imagen, por ejemplo un banner publicitario. En la misma operación es
posible indicar también las nuevas dimensiones del gráfico o un link
asociado a la imagen.
o Browser Capabilities: Ayuda a conocer información sobre el navegador
del usuario como puede ser el soporte de cookies o de JavaScript. El
archivo Browsercap.ini define todas las funcionalidades de los diferentes
navegadores. El componente utiliza este archivo para interpretar la
información relativa al navegador contenida en el encabezado HTTP.
o Content Linking: Sirve para asociar entre sí una serie de páginas ASP y
de esta manera poder pasar páginas hacia delante o atrás como si se tratar
de un libro.
o ADO: ActiveX Data Objects (Objetos de datos ActiveX). Se trata de la
principal tecnología de Microsoft para acceder a bases de datos.
I.2.3.1.3.6 ObjectContext
Ofrece la posibilidad de completar transacciones o disparar una vuelta atrás o
Rollback de todos los comandos de la transacción. Un Rollback significa prácticamente
deshacer todas las instrucciones dentro de una transacción. Las transacciones se llevan a
cabo dentro del marco de Microsoft Transaction Server. Cada uno de los dos métodos
que contiene tiene asignado un evento que nos permitirá reaccionar en consecuencia
ante el éxito o fracaso de una transacción.
I.2.3.2 Componentes comerciales
Se estudian algunos componentes ActiveX, concretamente aquellos que están
instalados en el servidor de la empresa que nos da el servicio de alojamiento Web de
partida.
Para conocer más acerca de estos componentes recurrimos al Web, donde se
encuentra abundante información, manuales y casos prácticos. Tras numerar estos
componentes se describen las funcionalidades que ofrecen. Estos componentes son:
•
•
•
•
•
ASPGRID
ASPUPLOAD
ASPUTILS
ASPEMAIL
CSIMAGEFILE
I.2.3.2.1 ASPGRID
Este componente ofrece a las aplicaciones ASP la posibilidad de utilizar un
control de tipo rejilla para gestionar los registros de las bases de datos empleadas.
Permite crear interfaces de acceso a las bases de datos, independientes del navegador y
con pocas líneas de código.
Conversión de aplicación empresarial para permitir el acceso remoto usando PocketPC y PC
29
I Memoria
Si se quieren mirar las características que ofrece este componente no se tiene
más que visitar las páginas de las compañías que se dedican a su programación y venta
[8]. Podemos también descargarnos una versión de prueba [9]. Algunas de las
características que soporta este componente son:
•
•
•
•
•
•
•
•
Permite crear una interfaz tipo rejilla editable y basado en Web que enlace a
una tabla de base de datos en tan solo 3 líneas de código ASP.
Interfaz de objetos intuitiva que le permite personalizar la apariencia de los
datos en la rejilla.
Soporta recordsets con claves extranjeras (foreign-keys recordsets).
Soporta controles HTML como listas desplegables (list box), casillas de
opción (checkboxes) y cuadros de texto (textareas).
Permite transformar campos de datos en enlaces o imágenes.
Soporta ordenación por columnas.
Botones de navegación.
Soporta formularios de datos enlazados.
El aspecto que presenta una interfaz creada con este componente es el que se
muestra en la imagen siguiente:
Figura I.2.10Tabla creada con ASPGRID
I.2.3.2.2 ASPUPLOAD
Es un componente que permite gestionar la transferencia de archivos por medio
de un navegador hacia el servidor.
ASPUPLOAD permite al servidor aceptar, guardar y manipular archivos que
hayan sido enviados por un usuario a partir de un clásico formulario en HTML. El
contenido de este formulario es enviado a un script que invoca a un objeto que es quien
realmente se encarga de realizar todas las funciones necesarias para la toma y
almacenamiento de los archivos.
Entre otras cosas, este componente nos da las siguientes funcionalidades:
•
•
•
•
•
30
Limitar el tamaño del archivo a colgar.
Permitir o no el sobrescribir un archivo.
Controlar los atributos del archivo.
Mover, copiar, renombrar y borrar el archivo recibido.
Almacenar los archivos en bases de datos.
Conversión de aplicación empresarial para permitir el acceso remoto usando PocketPC y PC
Fundamentos teóricos
•
•
Guardar los archivos en memoria, no en el disco duro.
Nos informa sobre las dimensiones y tipo de archivo gráfico colgado.
En algunos sitios Web de donde se ha sacado la información se comenta que este
componente, a pesar de no ser gratuito, es de manejo fácil y completo [11].
I.2.3.2.3 ASPEMAIL
Como se puede imaginar por su nombre, este componente permite enviar emails
a través de una página Web. Con ASPEMAIL se puede poner a disposición de los
clientes un formulario de contacto en la página Web diseñada y recibir su contenido por
correo electrónico. También se puede enviar correos electrónicos automatizados como
boletines, o responder a solicitudes determinadas desde la página Web. Las
funcionalidades de este componente son:
-
-
Envía e-mail usando un servidor SMTP (Simple Mail Transfer Protocol,
protocolo de transferencia de correo simple).
Soporta múltiples recipientes, CC’s (Carbon Copy, copia), BCC’s (Blind
Carbon Copy, copia oculta), Contestar-A’s, adjuntar archivos.
Soporta formato HTML.
Imágenes incrustadas y sonidos (multipart/related)
Envía mensajes en ambos formatos, HTML y formatos de texto
(multipart/alternative).
Correo seguro en formato S/MIME (Secure / Multipurpose Internet Mail
Extensions, extensiones de correo por internet multipropósito seguro), cuando se
usa conjuntamente con ASPENCRYPT (no disponible en nuestro hosting).
Varios métodos de autenticación SMTP.
Soporte de alto volumen de cola de mensajes.
Entrega de mensajes diferida.
Soporta NNTP (Network News Transfer Protocol, protocolo de transferencia de
noticias de red).
Adjuntar en memoria. Se puede añadir archivos directamente de una base de
datos sin crear una copia temporal en el disco.
I.2.3.2.4 CSIMAGEFILE
Este componente permite el manejo de imágenes y redimensionado. Se dispone
de un rango amplio de funciones para editar y optimizar imágenes.
Sus funcionalidades son:
-
-
Redimensiona y escala imágenes.
Permite entradas desde el servidor, URL remota o datos binarios de una base de
datos.
Acepta entradas directamente del componente csASPUPLOAD (no es
exactamente el que se dispone: cs denota la empresa que programa el
componente).
Envía la salida al servidor, o crea un flujo hacia una base de datos o navegador.
Crea imágenes compuestas, pegando una sobre otra.
Conversión de aplicación empresarial para permitir el acceso remoto usando PocketPC y PC
31
I Memoria
-
Añade texto sobre la imagen usando cualquier fuente instalada. Soporta
caracteres Unicode.
Realiza edición simple de dibujo de líneas y relleno con colores.
Usa los formatos JPEG, GIF, BMP, PNG, PSD, PCX, TIF Y WBMP y puede
convertirlos entre ellos.
Lee y edita texto IPTC en imágenes JPG y TIF.
Lee y edita atributos EXIF de archivos JPG.
I.2.3.3 Software necesario
Se pretende exponer los requisitos necesarios para crear un entorno de trabajo de
prueba local y una plataforma servidor.
Si se trabaja bajo sistema Windows NT, o las versiones Profesional y Server de
Windows 2000 y XP, el servidor a instalar es el Internet Information Server (IIS,
servidor de información de internet). Es el servidor de páginas web avanzado de la
plataforma Windows. Se distribuye gratuitamente junto con las versiones de Windows
basadas en NT, como pueden ser Windows 2000 Profesional o Windows 2000 Server,
así como Windows XP, también en sus versiones Profesional y Server.
Existe también la posibilidad de trabajar en plataformas UNIX empleando en
este caso el ChilisoftASP [43]. Esto permite a las orgnaizaciones diseñar aplicaciones
Web basadas en páginas ASP en una amplia variedad de servidores Web y sistemas
operativos.
Como entornos de desarrollo podemos usar el Visual Studio del cual existe una
versión gratuita (Visual Studio Express) o bien Microsoft ASP .NET Web Matriz que es
otro entorno gratuito.
I.2.4 Java Server Pages
Para comprender las Páginas Java en Servidor (Java Server Pages), es preciso
comprender la estructura que les sirve de base: los servlets de Java [2]. Los servlets son
clases de Java que amplían la funcionalidad de un servidor Web mediante la generación
dinámica de páginas Web. Un entorno de ejecución denominado motor de servlets
administra la carga y descarga del servlet, y trabaja con el servidor Web para dirigir
peticiones a los servlets y enviar la respuesta a los clientes.
Los servlets se ejecutan en una máquina virtual en un entorno de servidor
controlado y sólo necesitan el HTTP básico para comunicarse con sus clientes. No es
necesario que el cliente tenga un software especial.
Aunque los servidores HTTP no tienen capacidad para recordar detalles de una
petición previa del mismo cliente, la interfaz API Servlet proporciona una clase que
permite superar esta limitación.
Los servlets son aplicaciones Java, por tanto tienen acceso directo a toda la
gama de características Java, como el uso de subprocesos, acceso a redes y conectividad
a bases de datos.
32
Conversión de aplicación empresarial para permitir el acceso remoto usando PocketPC y PC
Fundamentos teóricos
Las páginas JSP, que se convierten automáticamente en servlets, heredan todas
estas ventajas.
I.2.4.1 Servlets
Como sus equivalentes applets (programa escrito en lenguaje Java que puede ser
incluido en una página HTML) del cliente, los servlets proporcionan métodos a los que
recurrimos cuando ocurren eventos específicos en un contexto más amplio. La
programación en este entorno obliga a escribir métodos predefinidos (métodos de
retrollamada –callback-) a los que vamos llamando a medida que el programa que los
gestiona lo requiere.
Un applet, por ejemplo, proporciona métodos como init(), start(), paint(), stop()
y destroy(), a los que el entorno de ejecución del applet llama como respuesta a las
acciones realizadas por el usuario. Sólo es preciso sobrescribir aquellos métodos que
ocurren durante los eventos con los que estamos trabajando.
De forma similar, los servlets operan en el contexto de un modelo de petición y
respuesta administrado por el motor de servlets. El motor de servlets se encarga de:
•
•
•
•
Cargar un servlet cuando lo solicitamos por primera vez
Llamar al método init() del servlet.
Manejar todas las peticiones que reciba llamando al método del servlet
service().
Llamar al método destroy() de cada servlet al terminar la ejecución.
Hay clases base estándar javax.servlet.GenericServlet y javax.servlet.HttpServlet
que implementan los métodos de retrollamada del servlet. La programación de servlets,
por tanto, consiste en subclasificar una de estas clases y sobrescribir el método
necesario para llevar a cabo la tarea que se tiene entre manos.
I.2.4.2 Ciclo de vida
Vamos a explicar los métodos que componen el ciclo de vida de un servlet para
tener una idea de cómo funcionan:
•
init()
Cuando el motor de servlets recibe la petición de un servlet, comprueba si el
servlet ya está cargado. Si no es así , el motor de servlets emplea un cargador de
clases para conseguir la clase servlet concreta requerida en ese caso y después
invoca a su constructor para obtener un ejemplar del servlet.
•
service()
Después de que el método init() lleve a cabo su tarea con éxito, el servlet está
preparado para aceptar peticiones. De manera predeterminada se crea un solo
ejemplar del servlet, y el motor de servlets lanza cada petición al templar en un
subproceso diferente.
Conversión de aplicación empresarial para permitir el acceso remoto usando PocketPC y PC
33
I Memoria
La mayoría de servlets están diseñados para operar en el entrono HTTP, para
el cual hay un paquete especializado javax.servlet.http. Estos servlets extienden
la clase javax.servlet.http.HttpServlet, que proporciona métodos especializados
correspondientes a cada método de petición HTTP.
•
destroy()
La especificación servlet permite a un motor de servlets descargar un servlet
en cualquier comento. Esto se puede hacer para conservar los recursos del
sistema o como preparación para el cierre del motor de servlets. El motor de
servlets notifica a cada servlet cargado que esto está a punto de ocurrir llamando
a su método destroy().
I.2.4.3 Contexto del servlet
Un contexto de servlet es una interfaz proporcionada por el motor de servlets
para entregar servicios a una aplicación Web. Los servlets de la aplicación Web pueden
utilizar el contexto del servlet para conseguir:
•
•
•
•
La capacidad para guardar y recuperar atributos entre invocaciones y para
compartir estos atributos con otros servlets.
La capacidad para leer el contenido de los ficheros y otros recursos estáticos
de la aplicación Web.
Un medio de lanzar peticiones de un servlet a otro.
Una manera de registrar errores y mensajes informativos.
El contexto del servlet tiene un nombre que establece una relación unívoca con
un directorio del sistema de ficheros.
I.2.4.4 Clases e interfaces
Las clases e interfaces principales de la API Servlet son:
•
•
•
•
•
•
La interfaz Servlet, que describe los métodos de retrollamada que se deben
implementar.
GenericServlet, una clase base que implementa los métodos de la interfaz
Servlet.
HttpServlet, una subclase específica para HTTP de GenericServlet.
ServletRequest, que encapsula la información sobre la petición del cliente.
ServletResponse, que proporcionan acceso a un flujo de salida para que los
resultados se devuelvan al cliente.
La interfaz ServletContext, que permite a un grupo de servlets ínteroperar
entre sí en una aplicación Web.
Los servlets son la tecnología que sirve de base a las páginas JSP.
34
Conversión de aplicación empresarial para permitir el acceso remoto usando PocketPC y PC
Fundamentos teóricos
I.2.4.5 Las JSP
Una página Java en servidor es una plantilla para una página Web que empela
código Java para generar un documento HTML dinámicamente. Las páginas JSP se
ejecutan en un componente del servidor conocido como contenedor de JSP, que las
traduce a servlets Java equivalentes.
Por esta razón los servlets y las páginas JSP están íntimamente relacionados. Lo
que se puede hacer con una tecnología es, en gran medida, también posible con la otra,
cada una con sus capacidades propias. Las páginas JSP, al ser servlets, tienen todas las
ventajas de los servlets:
•
•
•
Mayor rendimiento y capacidad de adaptación que las secuencias de
comandos CGI al admitir múltiples subprocesos y conservarse en memoria.
Incorporan soporte para sesiones HTTP.
Tienen pleno acceso a la tecnología Java.
Y además, las ventajas propias de las páginas JSP:
•
•
•
Se vuelven a compilar automáticamente cuando es necesario.
Es más fácil dirigirse a las páginas JSP que a los servlets, ya que las JSP
están en el espacio común de documentos del servidor Web.
Al ser las páginas JSP similares al HTML, tienen mayor compatibilidad con
las herramientas de desarrollo Web.
I.2.4.5.1 Funcionamiento de las JSP
La página JSP pasa por tres etapas en la evolución de su código:
•
Código fuente JSP: Este código es el que realmente escribe el desarrollador.
Se encuentra en un archivo de texto con extensión .jsp y consiste en una
mezcla de código de plantilla HTML, instrucciones en lenguaje Java,
directivas JSP y acciones que describen cómo generar una página Web para
dar servicio a una petición concreta.
•
Código fuente Java: El contendor de JSP traduce el código fuente JSP al
código fuente de un servlet Java equivalente.
•
Clase Java compilada: Como cualquier otra clase Java, el código del servlet
generado se compila en código de bytes en un archivo .class, preparado para
ser cargado y ejecutado.
El contenedor JSP administra cada una de estas etapas de la página JSP
automáticamente, basándose en la situación temporal de cada archivo. Como respuesta a
la petición HTTP, el contenedor comprueba si el archivo fuente .jsp ha sufrido
modificaciones desde que el código fuente .java se compiló por última vez. Determina
el nombre de la clase correspondiente al archivo .jsp. Si la clase no existe o es anterior
al archivo .jsp, entonces el contenedor crea el código fuente Java para un servlet
equivalente y lo compila. Si no hay aún un ejemplar o instancia del servlet en
funcionamiento, el contenedor carga la clase servlet y crea un ejemplar. Finalmente, el
Conversión de aplicación empresarial para permitir el acceso remoto usando PocketPC y PC
35
I Memoria
contenedor lanza un subproceso para que gestione la petición HTTP actual del ejemplar
cargado.
I.2.4.6 XML y JSP
El lenguaje extensible de marcas (XML, eXtensible Markup Language) ha
quedado establecido como lenguaje universal para el almacenamiento e intercambio de
información. Se utiliza para el desarrollo de contenidos de sitios Web, intercambio de
datos entre empresas y en aplicaciones tan diversas como arquitectura, informes
financieros y música.
I.2.4.6.1 Visión general
XML es un sistema para describir datos estructurados con un grupo de etiquetas
de marcado definidas por el usuario. No es un lenguaje en sí mismo, sino un sistema
para definir lenguajes de propósito específico. Parece similar con HTML, que marca
secciones de un documento Web con etiquetas predefinidas. La diferencia está en que
XML permite diseñar un juego predeterminado de etiquetas mientras que el juego de
etiquetas de HTML es fijo.
Los primeros formatos de procesamiento de texto no distinguían entre contenido
y presentación. De esta manera cuando se necesita un nuevo formato de salida, la
información contenida en el documento no sirve.
XML se centra completamente en la estructura. Se puede identificar claramente
elementos de datos específicos para ser extraídos por aplicaciones de búsqueda de texto.
Así, cuando necesitamos mostrar un documento XML en un navegador Web, se
puede convertir de forma programada a HTML utilizando una hoja de estilo XSL.
I.2.5 PHP Hypertext Preprocessor
Es un lenguaje de programación, con sintaxis parecida a los lenguajes C y Perl,
que se interpreta por un servidor Web y genera código HTML dinámico. Se puede
encontrar todo acerca de PHP en su página oficial [15].
El funcionamiento de una página PHP comienza con la petición del cliente a un
servidor Web como si se tratara de cualquier otra página. El servidor Web, al reconocer
la extensión de la página se la envía al intérprete PHP y éste tras ejecutar los resultados
la devuelve al navegador cliente.
Lo más interesante que incorpora PHP es la facilidad para consultar bases de
datos y generar páginas en función de los resultados obtenidos en la consulta.
Se pueden definir clases y usar características de la programación orientada a
objetos.
La ejecución de un programa PHP se puede realizar desde un cliente Web de
cualquier plataforma: sistema operativo y cliente Web cualesquiera.
36
Conversión de aplicación empresarial para permitir el acceso remoto usando PocketPC y PC
Fundamentos teóricos
I.2.5.1 Sintaxis PHP
En este apartado no se pretende enseñar cómo se usa PHP, simplemente dar una
idea de la sintaxis de este lenguaje de programación. En cualquier momento se puede
consultar bibliografía sobre PHP donde se muestra cómo usarlo [3] o incluso el propio
manual de referencia que se puede encontrar en internet [14] o incluso descargarlo [16].
Además se pueden encontrar numerosos ejemplos [17] [18].
Para interpretar un archivo, PHP simplemente interpreta el texto del archivo
hasta que encuentra uno de los caracteres especiales que delimitan el inicio de código
PHP. El intérprete ejecuta entonces todo el código que encuentra, hasta que encuentra
una etiqueta de fin de código, que le dice al intérprete que siga ignorando el código
siguiente. Este mecanismo permite embeber código PHP dentro de HTML: todo lo que
está fuera de las etiquetas PHP se deja tal como está, mientras que el resto se interpreta
como código.
Hay cuatro conjuntos de etiquetas que pueden ser usadas para denotar bloques
de código PHP. De estas cuatro, sólo 2 (<?php. . .?> y <script
language="php">. . .</script>) están siempre disponibles; el resto pueden ser
configuradas en el fichero de php.ini para ser o no aceptadas por el intérprete. Mientras
que el formato corto de etiquetas y el estilo ASP pueden ser convenientes, no son
portables como la versión de formato largo de etiquetas. Además, si se pretende
embeber código PHP en XML o XHTML, será obligatorio el uso del formato
<?php. . .?> para la compatibilidad con XML.
La separación de instrucciones se hace de la misma manera que en C o Perl terminando cada declaración con un punto y coma
PHP soporta el estilo de comentarios de C, C++ y de la interfaz de comandos de
Unix. Hay que tener cuidado con no anidar comentarios de estilo ', algo que puede
ocurrir al comentar bloques largos de código.
I.2.5.1.1 Tipos
PHP soporta ocho tipos primitivos. Cuatro de ellos son escalares (boolean,
integer, float y string), dos compuestos (array y object) y dos especiales (resource y
NULL). También se puede encontrar el tipo double aunque es el mismo tipo que float y
existe sólo por razones históricas.
El tipo de una variable usualmente no es declarado por el programador; en
cambio, es decidido en tiempo de compilación por PHP dependiendo del contexto en el
que es usada la variable
I.2.5.1.2 Variables
En PHP las variables se representan como un signo de dólar seguido por el
nombre de la variable. El nombre de la variable es sensible a minúsculas y mayúsculas.
Conversión de aplicación empresarial para permitir el acceso remoto usando PocketPC y PC
37
I Memoria
Los nombres de variables siguen las mismas reglas que otras etiquetas en PHP.
Un nombre de variable valido tiene que empezar con una letra o una raya (underscore),
seguido de cualquier número de letras, números y rayas. Como expresión regular se
podría expresar como: '[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]. En nuestro caso, una
letra es a-z, A-Z, y los caracteres ASCII del 127 al 255 (0x7f-0xff).
PHP proporciona una gran cantidad de variables predefinidas a cualquier script
que se ejecute. De todas formas, muchas de esas variables no pueden estar
completamente documentadas ya que dependen de sobre qué servidor se esté
ejecutando, la versión y configuración de dicho servidor, y otros factores.
A partir de PHP 4.1.0, PHP ofrece un conjunto adicional de matrices
predefinidas, conteniendo variables del servidor web, el entorno y entradas del usuario.
Estas nuevas matrices son un poco especiales porque son automáticamente globales. Por
esta razón, son conocidas a menudo como “autoglobales" ó "superglobales". Variables
PHP superglobales:
38
•
$GLOBALS
Contiene una referencia a cada variable disponible en el espectro de las
variables del script. Las llaves de esta matriz son los nombres de las
variables globales. $GLOBALS existe dese PHP 3
•
$SERVER
Variables definidas por el servidor web ó directamente relacionadas con
el entorno en don el script se esta ejecutando. Análoga a la antigua matriz
$HTTP_SERVER_VARS (la cual está todavía disponible, aunque no se use)
•
$GET
Variables proporcionadas al script por medio de HTTP GET. Análoga a
la antigua matriz $HTTP_GET_VARS (la cual está todavía disponible,
aunque no se use)
•
$POST
Variables proporcionadas al script por medio de HTTP POST. Análoga a
la antigua matriz $HTTP_POST_VARS (la cual está todavía disponible,
aunque no se use)
•
$COOKIE
Variables proporcionadas al script por medio de HTTP cookies. Análoga
a la antigua matriz $HTTP_COOKIE_VARS (la cual está todavía disponible,
aunque no se use)
•
$FILES
Variables proporcionadas al script por medio de la subida de ficheros vía
HTTP . Análoga a la antigua matriz $HTTP_POST_FILES (la cual está
todavía disponible, aunque no se use).
Conversión de aplicación empresarial para permitir el acceso remoto usando PocketPC y PC
Fundamentos teóricos
•
$ENV
Variables proporcionadas al script por medio del entorno. Análoga a la
antigua matriz $HTTP_ENV_VARS (la cual está todavía disponible, aunque
no se use)
•
$REQUEST
Variables proporcionadas al script por medio de cualquier mecanismo de
entrada del usuario y por lo tanto no se puede confiar en ellas. Esta matriz no
tiene un análogo en versiones anteriores a PHP 4.1.0
•
$SESSION
Variables registradas en la sesión del script. Análoga a la antigua matriz
$HTTP_SESSION_VARS (la cual está todavía disponible, aunque no se use)
La mayor parte de las variables PHP sólo tienen un ámbito simple. Este ámbito
simple también abarca los ficheros incluidos y los requeridos. Dentro de las funciones
definidas por el usuario aparece un ámbito local a la función. Cualquier variable que se
use dentro de una función está, por defecto, limitada al ámbito local de la función. Por
ejemplo:
<?php
$a = 1; /* global scope */
function Test()
{
echo $a; /* reference to local scope variable */
}
Test();
?>
Figura I.2.11Ejemplo del ámbito de las variables
Este script no producirá salida, ya que la orden echo utiliza una versión local de
la variable $a, a la que no se ha asignado ningún valor en su ámbito. En PHP, las
variables globales deben ser declaradas globales dentro de la función si van a ser
utilizadas dentro de dicha función. Ejemplo:
<?php
$a = 1;
$b = 2;
function Sum()
{
global $a, $b;
$b = $a + $b;
}
Sum();
echo $b;
?>
Figura I.2.12Ejemplo del uso de funciones locales dentro de una función
Conversión de aplicación empresarial para permitir el acceso remoto usando PocketPC y PC
39
I Memoria
El script anterior producirá la salida "3". Al declarar $a y $b globales dentro de
la función, todas las referencias a tales variables se referirán a la versión global. No hay
límite al número de variables globales que se pueden manipular dentro de una función.
Un segundo método para acceder a las variables desde un ámbito global es
usando la matriz $GLOBALS. El ejemplo anterior se puede rescribir así:
<?php
$a = 1;
$b = 2;
function Sum()
{
$GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];
}
Sum();
echo $b;
?>
Figura I.2.13Uso de $GLOBALS para el acceso a variables locales
La matriz $GLOBALS es una matriz asociativa con el nombre de la variable
global como clave y los contenidos de dicha variable como el valor del elemento de la
matriz. $GLOBALS existe en cualquier ámbito.
Otra característica importante del ámbito de las variables es la variable static.
Una variable estática existe sólo en el ámbito local de la función, pero no pierde su
valor cuando la ejecución del programa abandona este ámbito.
I.2.5.1.3 Constantes
Una constante es un identificador para expresar un valor simple. Como el
nombre sugiere, este valor no puede variar durante la ejecución del script. Una
constante es sensible a mayúsculas por defecto. Por convención, los identificadores de
constantes suelen declararse en mayúsculas
El nombre de una constante sigue las mismas reglas que cualquier etiqueta en
PHP. Un nombre de constante válido empieza con una letra o un carácter de subrayado,
seguido por cualquier número de letras, números, o subrayados. Se podrían expresar
mediante la siguiente expresión regular: [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]. Para
nuestros propósitos , entenderemos como letra los caracteres a-z, A-Z, y los ASCII del
127 hasta el 255 (0x7f-0xff).
Se puede definir una constante usando la función define(). Una vez definida, no
puede ser modificada ni eliminada.
Estas son las diferencias entre constantes y variables:
•
•
40
Las constantes no son precedidas por un símbolo de dólar ($)
Las constantes sólo pueden ser definidas usando la función define() , nunca
por simple asignación
Conversión de aplicación empresarial para permitir el acceso remoto usando PocketPC y PC
Fundamentos teóricos
•
•
•
Las constantes pueden ser definidas y accedidas sin tener en cuenta las reglas
de alcance del ámbito
Las constantes no pueden ser redefinidas o eliminadas después de
establecerse
Las constantes sólo pueden albergar valores escalares
I.2.5.1.4 Funciones
Una función se puede definir con la siguiente sintaxis:
<?php
function foo ($arg_1, $arg_2, ..., $arg_n)
{
echo "Función de ejemplo.\n";
return $retval;
}
?>
Figura I.2.14 Sintaxis para la definición de una función
Cualquier instrucción válida de PHP puede aparecer en el cuerpo de la función.
PHP no soporta la redefinición de funciones previamente declaradas.
PHP soporta pasar parámetros por valor (el comportamiento por defecto), por
referencia, y parámetros por defecto. Listas de longitud variable de parámetros sólo
están soportadas en PHP4 y posteriores.
Por defecto, los parámetros de una función se pasan por valor (de manera que si
cambias el valor del argumento dentro de la función, no se ve modificado fuera de ella).
Si se quiere que un parámetro de una función siempre se pase por referencia, se
antepone un símbolo & al nombre del parámetro en la definición de la función.
Una función puede definir valores por defecto para los parámetros escalares estilo
C++:
<?php
function makecoffee ($type = "cappucino")
{
return "Hacer una taza de $type.\n";
}
echo makecoffee ();
echo makecoffee ("espresso");
?>
Figura I.2.15 Ejemplo de valores por defecto para parámetros de una función
La salida del fragmento anterior es:
Hacer una taza de cappucino.
Hacer una taza de espresso.
El valor por defecto tiene que ser una expresión constante, y no una variable,
miembro de una clase ó llamada a una función. Destacar que cuando se usan parámetros
por defecto, estos tienen que estar a la derecha de cualquier parámetro sin valor por
defecto; de otra manera las cosas no funcionarán de la forma esperada.
Conversión de aplicación empresarial para permitir el acceso remoto usando PocketPC y PC
41
I Memoria
Los valores se retornan usando la instrucción opcional return. Puede devolverse
cualquier tipo de valor, incluyendo listas y objetos. No puedes devolver múltiples
valores desde una función, pero un efecto similar se puede conseguir devolviendo una
lista:
<?php
function small_numbers()
{
return array (0, 1, 2);
}
list ($zero, $one, $two) = small_numbers();
?>
Figura I.2.16 Retornando una matriz para obtener múltiples valores
Para retornar una referencia desde una función, se tiene que usar el operador de referencias & tanto
en la declaración de la función como en la asignación del valor de retorno a una variable:
<?php
function &returns_reference()
{
return $someref;
}
$newref =& returns_reference();
?>
Figura I.2.17 Retornando una referencia desde una función
PHP soporta el concepto de funciones variable, esto significa que si una variable
tiene unos paréntesis añadidos al final, PHP buscará una función con el mismo nombre
que la evaluación de la variable, e intentará ejecutarla:
<?php
function foo()
{
echo "En foo()<br>\n";
}
function bar($arg = '')
{
echo "En bar(); el argumento fue '$arg'.<br>\n";
}
// Función que envuleve a la función echo
function echoit($string)
{
echo $string;
}
$func = 'foo';
$func();
// Llama a foo()
$func = 'bar';
$func('test');
// Llama a bar()
$func = 'echoit';
$func('test'); // Llama a echoit()
?>
Figura I.2.18 Ejemplo de función variable
42
Conversión de aplicación empresarial para permitir el acceso remoto usando PocketPC y PC
Fundamentos teóricos
I.2.5.2 Funcionalidades
PHP facilita en gran medida las operaciones típicas que se pueden necesitar a la
hora de programar una página que genere código HTML de forma dinámica. Funciones
típicas que se usan son acceso a bases de datos, envío de correo electrónico,
transferencia de ficheros, etc. Se expone a continuación algunos detalles de las
funciones que se han comentado.
I.2.5.2.1 Acceso a bases de datos
Se podrá consultar cualquier motor de bases de datos SQL, bien en modo nativo
o mediante ODBC. Existe soporte para MySQL, PostgreSQL, mSQL, Informix,
Internase, SQL Server, Oracle, Solid, Sybase o trabajar con fichero DBF.
Hay que hacer notar que no todos los binarios precompilados en los que se
distribuye PHP estén compilados con soporte a todas las bases de datos. En tal caso
deberíamos compilar las fuentes de PHP incluyendo el soporte que se quiere.
El gestor de base de datos más utilizado es MySQL debido a su simplicidad y
rapidez frente a la solidez de PostgreSQL. Se pueden encontrar tanto tutoriales para usar
MySQL con PHP [19] como ejemplos de su uso [20].
I.2.5.2.2 Envío de correo electrónico
Se puede enviar correo electrónico o bien leyendo los datos del cliente en un
formulario Web, o bien ejecutando una aplicación de correo en el propio cliente.
I.2.5.2.3 Transferencia de ficheros
PHP permite la transferencia de ficheros, de manera que el cliente pueda
actualizar desde su navegador las páginas de su sitio.
También proporciona una serie de funciones para poder dialogar con un servidor
FTP y realizar las operaciones habituales.
I.2.5.3 Ventajas de usar PHP
Se señalan algunas de las razones de por qué escoger PHP frente a otras
alternativas para desarrollos Web:
•
•
•
•
•
•
Es muy fácil de aprender si se conocen lenguajes como C, Java, o
programación en Shell de Unix.
Se puede hacer cualquier cosa con PHP
Ampliamente probado como herramienta.
Se puede usar en cualquier plataforma.
Existen numerosas Web donde encontrar ayuda a problemas que se puedan
presentar aunque no tenga soporte comercial.
Existen recursos en la Web. Existen bibliotecas de clases que resuelven los
problemas más frecuentes con los que se puede encontrar el programador.
Conversión de aplicación empresarial para permitir el acceso remoto usando PocketPC y PC
43
I Memoria
•
•
No requiere muchos recursos: puede funcionar en un portátil 486 con 16Mb
de RAM.
La gran mayoría de alojamientos Web ofrecen soporte para PHP.
I.2.5.4 Software necesario
Se quiere usar PHP para ejecutar scripts en el lado del servidor. Se necesitan tres
cosas para que funcione. El analizador PHP (CGI ó módulo), un servidor web y un
navegador. Algunos servidores web son Apache en Linux y MacOS X ó IIS en
Windows.
Se tienen dos maneras de utilizar PHP. Existen módulos directos (también
llamados SAPI) para muchos servidores web, como Apache [44], Microsoft Internet
Information Server, Netscape e iPlanet. Muchos otros servidores soportan ISAPI. Si
PHP no soporta un módulo para el servidor web, siempre se puede usar como binario
CGI. Esto significa que el servidor se configura para usar el ejecutable para línea de
comandos de PHP en el procesado de peticiones de ficheros PHP.
Existen soluciones para instalar un servidor web, PHP y MySQL sobre Windows
[6] [7]. Es software gratuito.
Como entorno de desarrollo existen numerosas opciones aunque no todas son
gratuitas. Un buen entorno de desarrollo es por ejemplo PHP Designer [45].
I.2.6 Hojas de estilo
Hojas de Estilo en Cascada (Cascading Style Sheets) [22], es un mecanismo
simple que describe cómo se va a mostrar un documento en la pantalla, o cómo se va a
imprimir, o incluso cómo va a ser pronunciada la información presente en ese
documento a través de un dispositivo de lectura. Esta forma de descripción de estilos
ofrece a los desarrolladores el control total sobre estilo y formato de sus documentos.
CSS se utiliza para dar estilo a documentos HTML y XML, separando el
contenido de la presentación. Los estilos definen la forma de mostrar los elementos
HTML y XML. CSS permite a los desarrolladores Web controlar el estilo y el formato
de múltiples páginas Web al mismo tiempo. Cualquier cambio en el estilo marcado para
un elemento en la CSS afectará a todas las páginas vinculadas a esa CSS en las que
aparezca ese elemento.
La especificación CSS pertenece al W3C. Este organismo ofrece un gran soporte
para CSS en la página Web dedicada a hojas de estilo [24]. También ofrece un servicio
de validación de CSS [33].
Para tener una idea general de qué es y cómo funciona CSS podemos recurrir a
la guía breve de CSS que nos ofrece el W3C [23]. También podemos encontrar guías de
otros organismos para CSS [26] o incluso guías desarrolladas por terceras personas [27]
Si queremos ver cómo funciona mediante un ejemplo podemos encontrar
numerosos sitios Web donde nos explican detalladamente los ejemplos [28] [29].
44
Conversión de aplicación empresarial para permitir el acceso remoto usando PocketPC y PC
Fundamentos teóricos
I.2.6.1 Marcado del documento HTML
Los documentos HTML deben seguir el estilo marcado en las hojas de estilo.
Para ello se debe marcar el documento HTML con etiquetas análogas a las etiquetas
HTML, marcando de esta manera bloques sobre los que se aplicará un estilo.
Básicamente el marcado de los documentos consiste en el uso de dos elementos
o etiquetas, que son SPAN y DIV. A cada elemento se le puede asignar uno de los
posibles atributos, que son CLASS e ID. Los atributos son una manera de dar nombre a
los elementos de manera que se puedan distinguir. Si se quiere que varios elementos
tengan el mismo nombre tendremos que usar un atributo CLASS. Si el nombre del
elemento va a ser único en todo el documento entonces se puede asignar un atributo ID.
Una explicación en mayor detalle de cómo enlazar el estilo con un documento
HTML se puede encontrar el la Web [31].
Una vez que se tiene marcado nuestro documento HTML, el W3C nos ofrece un
servicio Web para la validación del marcado del documento [32].
I.2.6.2 Ejemplos de CSS
Con CSS se tiene un control absoluto sobre la presentación de la información
contenida en el documento HMTL y permite una gran facilidad en el cambio de su
aspecto con tan solo modificar el archivo de estilo.
Un buen ejemplo que muestra la flexibilidad y la potencia de las hojas de estilo
es un sitio Web donde se presenta un documento HTML que podemos ver en diferentes
estilos con tan solo pulsar uno de los posibles estilos [25].
Conversión de aplicación empresarial para permitir el acceso remoto usando PocketPC y PC
45
I Memoria
46
Conversión de aplicación empresarial para permitir el acceso remoto usando PocketPC y PC
Descargar