Professional Documents
Culture Documents
Presentacin
1. Conceptos y elementos bsicos 2. Programacin con TCL 3. Formas y documentos HTML 4. Inclusiones del lado del servidor
Cuando?
Para generar documentos dinamicamente. Para interatuar con el usuario
Como?
Cualquier lenguaje de programacion puede ser utilizado con CGI siempre y cuando permita accesar las variables de ambiente del sistema y permita accesar la entrada y salida estandar.
nota
La programacin es un arte (Knuth 1969) y una ciencia (Gries 1991) . . . La programacin es una disciplina de ingenieria y como tal est fundamentada. PROGRAMAR: es aplicar mtodos para disear y escribir programas.
nota
Modelar la solucin.
ESTRUCTURA = datos + estructuras de control
Codificar.
Utilizar un lenguaje de programacin
Opciones.
C/C++, Visual Basic, Perl, TCL, C shell, etc.
Necesidades.
Facilidades para manipular informacin Acceso a sistemas DBMS.
Una solucin
TCL (Tool Command Languaje) una opcin para sistemas UNIX ...
Encabezado.
La primera informacion que un programa CGI debe enviar a la salida estandar.
Datos
El programa puede generar cualquier dato que corresponda con un tipo MIME (Multi-purpose Internet Mail Extension) y enviarlo al servidor: texto, imagenes, audio, video, etc.
Encabezado.
Indica el tipo de documento que ser enviado: nombre:valor nombre Content-type Location Content-length Content-encoding descripcion tipo MIME (tipo/subtipo) URL para redireccionar longitud en bytes codificacion de los datos (x-zip x-compress)
Encabezado.
Separamos el encabezado de los datos con una linea en blanco y cada linea con un fin de linea.
Datos.
Salida estandar del programa. Resultados de la ejecucin.
encabezado
#!/bin/sh # procesar informacin # enviar datos al cliente cat <<EOF Content-type: text/html <html> . . </html> EOF # fin del programa
tipo MIME
datos
Variables de ambiente.
Para comunicar informacion a nuestros programas el servidor define variables de ambiente : Variables de entrada Variables del cliente Variables del servidor Valores de Formas. Proporcionan al servidor informacion del cliente. Proporcionan informacion sobre el servidor y sus recursos.
Variables de entrada
QUERY_STRING PATH_INFO PATH_TRANSLATED REQUEST_METHOD CONTENT_TYPE CONTENT_LENGTH
Reglas de codificacin
La informacion que es enviada a un programa CGI desde un cliente es codificada utilizando dos reglas: 1. Los espacios se convierten a +. 2. Cualquier caracter puede ser representado como un valor hexadecimal precedidio por %
Consideraciones:
CGI provee acceso directo a los recursos de nuestro sistema. Implican un hoyo de acceso.
Tecnicas basicas:
Verificar datos provenientes del cliente. Autenticacin. Verificar accesos al sistema de archivos.
Formas
Es la manera ms comn de llevar datos del usuario a un programa CGI. Permiten introducir datos utilizando diversos elementos grficos: cuadros de texto, botones y menus. Interfaz para introducir datos a los programas CGI
Estructura.
<FORM ACTION=[url] METHOD=[metodo]> [cuerpo de la forma] </FORM> ACTION Define el URL del programa CGI al cual se le enviar la forma. METHOD Es el mtodo que se utiliza para enviar la forma: GET o POST. CUERPO HTML y sealadores de especificacin.
INPUT
Especifica un elemento de entrada simple, el cual puede ser un boton, un cuadro de verificacin o un campo de texto. <input type=[tipo] name=[nom] value=[val] [otros]> TYPE text,passwd,checkbox,radio,submit,reset NOMBRE nombre simbolico VALOR para texto o passwd contenido inicial. para un boton el valor cuando es electo para submit y reset la etiqueta del boton
INPUT (2)
CHECKED SIZE MAXLENGTH Boton selecto por omision Tamao en caracteres para text y passwd Caracteres que se aceptan
SELECT
Define menus desplegables y listas deslizantes.
<select name=nom> <option> texto1 <option> texto2 ... </select>
NAME Nombre simblico SIZE Define menu o lista de seleccion MULTIPLE Permite la seleccion multiple SELECTED opcion seleccionada.
TEXTAREA
Permite colocar un campo para insertar multiples lineas de texto con contenido inicial optativo.
<textarea name=nom> [texto opcional] </textarea>
Mtodo GET.
El contenido de la forma se ensambla en el URL: URL_prg?nombre=valor&nombre=valor& ...
Mtodo POST.
La codificacion de la informacion es la misma que para el mtod GET pero en lugar de anexar la in_ formacion al URL esta se envia al stdin del programa.
Caracteristicas de TCL
Facilidad en el manejo de la informacion, es un lenguaje funcional (estilo LISP). Es interpretado. Cuenta con extensiones diversas: (oratcl) Es portable ya que existen versiones TCL para diversos equipos y sistemas operativos.
Ejemplo:
# este es un comentario puts hola mundo - entre comillas; #comentario puts {hola - entre llaves} puts linea 1; puts linea 2 puts hola mundo;
<ver ejemplo>
switch
switch cadena { patron1 cuerpo1 }
if
if { condicion } {accion1} else {accion2}
while
while { condicion} { acciones }
for
for {inicializar} {condicion} {incremento} { acciones }
El comando proc
Anexa un nuevo comando a la lista de comandos conocidos.
Sintaxis:
proc nombre {arg1 arg2} { cuerpo1 }
Listas
Coleccin ordenada de objetos: numeros, palabras, cadenas, etc.
Creacin
set lista [list elem1 elem2 ... elemN] set lista [split cadena caracter]
Comandos varios
lindex lista indice llength lista foreach variable $lista { cuerpo }
Cadenas
Grupo de caracteres
Creacin
set cadena valor
Comandos varios
string length cadena string index cadena indice string match patron cadena string tolower cadena string toupper cadena string trim cadena
Arreglos
TCL utiliza arreglos cuyos indices son cadenas, ARREGLOS ASOCIATIVOS.
Creacin
set arreglo(indice) valor
Comandos varios
array exist arreglo array names arreglo array size arreglo set lista [array get arreglo] array set arreglo lista
Bsqueda
regexp expresion cadena arg1 arg2 ... argN <ver tabla> Retorna un valor boleano.
Sustitucin
Sustituye un grupo de caracteres de una cadena. sintaxis: regsub -all expresion cadena remplazo variable
Manejo de archivos.
set archivoID [open nom_arch modo] puts $archivoID datos set linea [gets $archivoID] set datos [read $archivoID numbytes] eof $archivoID seek $archivoID desplazamiento origen origen -> start, current, end close $archivoID