Logo Studenta

Modulo_2-Java

¡Este material tiene más páginas!

Vista previa del material en texto

MÓDULO nº 2 	Aplicaciones Web con Java y PHP
2. APLICACIONES WEB CON JAVA Y PHP.
2.1. Introducción, objetivos y software recomendado.
Hablar de tecnología y ver el avance en el desarrollo de lenguajes de programación ligados a Internet, nos da una idea de la forma tan vertiginosa cómo ha evolucionado. Contrariamente a que los orígenes de estas tecnologías están conectados profundamente con los sistemas de visualización basados en textos, esto debido a las limitaciones de espacio de almacenamiento y memoria de los ordenadores con más data de antigüedad, es por ello que se han visto en la necesidad de crecer aceleradamente durante los últimos años y migrar a un medio más gráfico y usable. 
En este mismo contexto se habla que, esta evolución ha ido de la mano con el desarrollo de herramientas requeridas para proteger, generar y desarrollar contenidos empleando estas nuevas tecnologías. En otro orden de ideas, los creadores de esos contenidos o desarrolladores tratan de extraer todo el abanico de posibilidades que presentan las mencionadas nuevas tecnologías, las cuales necesitan herramientas de programación cada vez más robustas.
Desde esta perspectiva y, para satisfacer esta petición, se han diseñado y publicado muchas herramientas dirigidas a los desarrolladores Web. Se han creado lenguajes específicos, como HTML, PHP, ASP, JAVA, para colaborar a los programadores a diseñar y mostrar sus productos en Internet. Cada uno de estos patrones ya tiene muchos años de nacimiento, proporcionando a los desarrolladores web actuales un conjunto de materiales de una potencia increíble. Sin embargo, a pesar que estas herramientas adquieren fuerza con el paso de los días, aún se consiguen ciertas diferencias que dividen explícitamente las aplicaciones de Internet de las aplicaciones tradicionales de escritorio.
En el ámbito visual o interfaz gráfica de usuario, probablemente la diferencia más notoria sea que requiere tener que hacer la petición de páginas. Entonces, para que ocurra una interacción en una aplicación web, la petición se realiza al servidor. Y para ejecutar estas peticiones se debe recargar la página con el propósito de obtener la información actualizada que provee el servidor al cliente (que usualmente será un navegador web). Esta limitante no está impuesta por los navegadores, sino porque existe el protocolo HTTP mismo que está basado en un sistema de peticiones y respuestas al que deben ajustarse todos los navegadores (ver Figura 1). Sin embargo y aunque, en teoría, esta manera de funcionamiento es viable, los desarrolladores han comenzado a exigir un sistema más dinámico y flexible, de manera que los tiempos de respuestas de sus aplicaciones puedan reducirse hasta niveles similares a los de las aplicaciones de escritorio.
Figura 1. Modelo petición - respuesta
En las aplicaciones Web se presentan una serie de ventajas y desventajas o mejor llamados inconvenientes, los mismos se pueden diferenciar o comparar con las aplicaciones de escritorios, mismas que tienen la dificultad de cuestiones de compatibilidad entre las plataformas, o mejor dicho entre los sistemas operativos que existen, es donde deben desarrollarse distintas versiones para cada uno de ellos, mientras que las aplicaciones Web o de Internet son más sencillas de adaptar a los variados navegadores. Esto aunado a la idea que la mayor parte de los usuarios utilizan pocos navegadores, y es por ello que contamos con una vía más estable de publicación y de esta forma alcanzar a más clientes o usuarios.
Así mismo tenemos en cuenta que una de la más notable ventaja es que para las aplicaciones Web se tiene y se mantiene un solo código fuente, mientras que las aplicaciones de escritorio deben contar con varias versiones para poder corregir algún error y volver a compilar todo el programa para hacerlo funcionar en el ordenador y además no se tiene la forma de saber quién ha tocado el programa fuente.
Contrariamente, las aplicaciones Web se ubican en un servidor único al que pueden acceder todos los clientes. Algún cambio en la funcionalidad del código se realiza directamente en el servidor y de esta forma se encuentra disponible de forma inmediata para los usuarios. Además de quedar el registro de seguridad, de quién fue el desarrollador que realizó la mejora al código.
Por otro lado, encontramos algunos inconvenientes que se pueden presentar en las aplicaciones Web, como es la velocidad de respuesta que nos pueda ofrecer el servidor donde se encuentra alojada la misma, ya que éste depende de Internet y de las veces que las páginas deban de cargarse para ofrecer una respuesta oportuna al cliente. Caso contrario ocurre con las aplicaciones de escritorio, ya que al hacer click sobre un botón, obtenemos lo que necesitamos. 
Los objetivos de las aplicaciones web están ligados a que éstas, producen de forma dinámica páginas codificadas en HTML o XHTML que las sostiene cualquier navegador web. Es aquí donde entra la frase cliente – servidor, donde en el lado del cliente se emplean lenguajes tales como php, Java, etc., para incluir elementos que permitan al cliente visualizar una interfaz de usuario más interactiva, donde el usuario podrá dinamizar su experiencia con las páginas web. Por otra parte, esa información que puede visualizar el cliente está alojada en un servidor en Internet que pasando por el navegador web, la interpreta para luego ser enviada y recibida por parte del usuario final. 
Para el desarrollo de aplicaciones web los software más recomendados o sugeridos son Java, PHP, Python, Ruby, Perl, Javascript, entre otros. Es necesario cambiar considerablemente los hábitos como desarrolladores Web, es muy posible que estemos acostumbrados a entornos de diseño o a utilizar algún editor de texto y luego probar las aplicaciones en algún navegador web.
No significa que ahora no podamos utilizar esta forma de trabajar, pero a medida que la tecnología avanza, la complejidad de las aplicaciones desarrolladas también aumenta y es necesario contar con un número mayor de herramientas que nos colaboren con el arduo trabajo. 
NetBeans 
No es un clásico editor de desarrollo web, pero es un entorno de código abierto. Auspiciado por Sun Microsystems, hoy parte de Oracle, es una excelente alternativa para desarrollar aplicaciones Web, ya que posee un completo soporte a partir de su versión 6.5.
Una de las principales características de NetBeans para aplicaciones Web es que nos permite completar código y encontrar algún error mientras vamos programando, así como también permite depurar el código desde el mismo entorno al usar la herramienta Firebug.
Dentro de este marco, al utilizar NetBeans tendremos a nuestra disposición un panel que vigilará todas las peticiones del servidor. Los lenguajes de servidor que soporta NetBeans son Java (JSP o Servlets), PHP, Ruby o Grove. Es importante señalar que si se trabaja con el gestor de base de datos MySQL, se podrá administrar todo nuestro proyecto desde el mismo entorno de trabajo.
	
ENLACE DE INTERÉS
En el siguiente enlace podrás descargar, de forma gratuita, el entorno de desarrollo NetBeans.
https://netbeans.org 
 
	
EJEMPLO PRÁCTICO
Para tener una idea de lo que es una aplicación Web dejo este ejemplo que permitirá obtener una visión general de la misma.
Se tienen unos usuarios que deben acceder a una página de inicio de una venta on-line de teléfonos, donde podrán seleccionar el modelo que deseen en un catálogo para ver la información detallada de cada uno de ellos. Para ello, podrán filtrar el catálogo de teléfonos a partir de una categoría en concreto o acceder al listado completo de teléfonos.
Desde la página de inicio de los usuarios también deben poder acceder a las diferentes secciones de la aplicación. Concretamente existen tres secciones:
· Una sección que proporcione a los usuarios la posibilidad de consultar información del catálogo completo de teléfonos.
· Una sección dedicada exclusivamente a informar de las ofertas especiales relacionadas con los teléfonosen venta.
· Una sección que permita a los usuarios gestionar su perfil de cliente.
Por otra parte, será necesario suministrar una opción de login para que los clientes puedan identificarse como tal. Los clientes registrados deben tener el carrito de compra siempre accesible con el fin de permitirles consultar su estado y proceder con la compra del teléfono seleccionado.
2.2. Programación web con java. Introducción a JSP.
La tecnología JSP (Java Server Pages) facilita la creación de contenido web por medio de componentes estáticos y también dinámicos. Es una extensión de los Java Servlets que brindan un acercamiento más oriundo a la generación de contenidos. Ciertamente, JSP admite la creación de Servlets a partir de ficheros de textos que contienen una mezcla de HTML(o cualquier otro lenguaje de marcado) y scripts de código.
Una página JSP es un documento de texto que posee dos tipos de textos: datos estáticos, que se representan por medio de algún formato de texto (HTML, WML, XML, etc); y elementos JSP, que sirven de base para desarrollar el contenido dinámico.
La extensión sugerida para el fichero origen de una página JSP es .jsp, aunque puede tener otras como .jspf, si la página solamente genera un fragmento de otra página JSP, o .jsf si se trata de una aplicación Java Server Faces.
Los elementos de una página JSP pueden representarse en dos sintaxis (estándar y XML), no obstante, no pueden alternarse en un mismo fichero. 
JSP es un complemento a los Servlet no es un sustituto del mismo. Se presentan dos clases de contenidos web:
· Contenido estático: son las partes de una página web, que no varía, como por ejemplo el nombre y apellido de un paciente en un hospital.
· Contenido dinámico: son las porciones de una página web producidas por un Servlet, como pueden ser los datos de la historia y medicamentos del paciente, los cuales pueden variar a medida que cambian los síntomas de éste.
 
Ciclo de vida de una JSP
Una JSP sirve peticiones como un Servlet. Por tanto, el ciclo de vida y algunas características de la JSP (particularmente, los aspectos dinámicos) están determinadas por la tecnología Java Servlet.
Cuando una petición es recibida por una JSP, el contenedor web verifica si el Servlet de la JSP es más antiguo que la JSP. En caso positivo, el contenedor web interpreta la JSP a un Servlet y compila la clase que resulta del proceso. Todo este ciclo es automático.
Siguiendo el ciclo, a continuación, se presenta la fase de traducción donde cada tipo de datos de la JSP se trata de forma diferente. La información estática se convierte en código fuente que se irá directamente a el flujo de la respuesta. No obstante, los componentes de la JSP se manipulan de la siguiente forma:
· Las directivas se utilizan para controlar cómo el contenedor web traduce y ejecuta la página JSP.
· Los elementos de scripting se agregan en el Servlet de la página JSP.
· Las expresiones del lenguaje se pasan como parámetros al evaluador de expresiones de JSP.
· Los elementos jsp:[set│get]Properti se transforman en las llamadas correspondientes a los métodos de los JavaBeans.
· Los elementos jsp:[include│forward] se convierten en peticiones al API Java Servlet.
· Los elementos jsp:plugin se convierten en el código de marcado determinado para activar el applet.
· Las llamadas a etiquetas personalizadas se convierten en llamadas al manejador de etiquetas.
Tanto en la traducción como en la compilación pueden ocurrir errores que se mostrarán cuando se hace la solicitud a la página por primera vez. Si el error se encuentra durante cualquiera de estas dos fases, el servidor devolverá una excepción JasperException y un mensaje que presenta el nombre de la página JSP y la línea en la que ha ocurrido el error. 
Una vez que la página ha sido traducida y compilada, el Servet de la JSP sigue el ciclo de vida del Servlet:
· Si no existe ninguna instancia del Servlet de la JSP, el contenedor:
· Carga la clase del Servlet de la JSP.
· Instancia la clase del Servlet de la JSP.
· Inicializa la instancia del Servlet llamando al método jspInit.
· El contenedor invoca al método _jspService, pasándole los objetos de petición y respuesta.
Si el contenedor necesita eliminar el Servlet de la JSP llama al método jspDestroy.
Escribir una página JSP
Una página JSP posee tres clases de elementos, cada cual con su etiqueta propia parecida a HTML:
· Sriptlets: sentencias Java ejecutadas cuando la página es cargada. Cada una de estas sentencias se encierra entre etiquetas < % y % >
· Expresiones: expresiones Java que son evaluadas, produciendo una salida visualizada en la página. Están encerradas en etiquetas <%= y %>
· Declaraciones: sentencias para crear variables de instancia y manejar otras tareas de configuración necesarias en la presentación de la página. Están encerradas entre etiquetas <%! y %>
Sintaxis JSP básica
La tabla n°1 presenta la sintaxis básica que se puede utilizar para desarrollar una JSP.
	Sintaxis 
	Descripción 
	Plantilla de texto
	La plantilla de texto está conformada por los textos que se encuentran fuera de un elemento JSP y, no obstante, no sea interpretado por el contenedor Web. La plantilla es enviada al cliente directamente, sin ningún tipo de modificación.
	Espacio en blanco
	Todos los espacios en blanco que se encuentran en el código de la plantilla se devuelven al cliente de la misma manera en que se incluyeron en la JSP.
	Etiquetas de comienzo y final
	Las etiquetas de inicio y fin de los elementos JSP se deben insertar en el mismo fichero.
	Valores de los atributos
	Todas las propiedades de los elementos JSP van encerrados entre comillas, bien sean comillas simples o dobles.
<%@ page contentType = “text/plain” %>
	Comentarios 
	Se conocen dos tipos de comentarios en JSP:
· Comentarios del contenido: se insertan en la salida de la JSP. El usuario los puede leer en los navegadores Web, examinando el código fuente. Su sintaxis sería:
<!- -Comentario visualizado --> 
· Comentarios JSP: es contrario al caso anterior, no se insertan en la salida de la JSP y el único modo de visualización es en el código fuente de la página. Su sintaxis sería:
<% Comentario código fuente %>
Es posible incluir comentarios en los scriptlets que, ciertamente, serán transparentes a los clientes:
<% Sentencia SQL a comentar %>
Tabla n°1. Sintaxis básica JSP
	
EJEMPLO PRÁCTICO
El siguiente ejemplo contiene una página JSP que incluye una expresión, es una llamada al constructor Java.until.Date(). Este constructor produce una cadena de texto que contiene la fecha y hora actual. Esto lo podrá escribir en cualquier editor de texto o en los entornos de programación Java que tenga disponible.
<html>
<head>
<title>Fecha y hora actual</title>
</head>
<body>
<h1 align="Center">
<%= new java.util.Date() %>
</h1>
</body>
</html>
Elementos de scripting
Estos elementos definen el código contenido en una JSP y se codifican según la sintaxis de la estructura Java. La tabla n°2 muestra estos elementos principales:
	Elemento 
	Descripción 
	Sintaxis 
	declaration
	Crea definiciones en el entorno de la JSP
	<%! declaration %>
	scriptlet
	Se encuentra el código de script en la página
	<% script code %>
	expression
	Son las sentencias evaluadas en el servidor previo a ser enviadas a la salida de la página del cliente.
	<%= expression %>
Tabla n°2. Elementos de scripting
Directivas
Las directivas proporcionan las propiedades de las JSP y del Servlet resultante. se trata de elementos de preprocesado que se evalúan durante el tiempo de compilación. Existen tres tipos de directivas a continuación se presentan en la tabla n°3:
	Directiva
	Descripción 
	Sintaxis 
	page
	Define propiedades de la página
	<%@ page attribute=”value”… %>
	include
	Incluye un fichero dentro de una JSP
	<%@ include file = “path”… %>
	taglib
	Inserta una librería de etiquetas dentro de la JSP
	<%@ taglib uri =”tagLibraryURI” prefix=”tagPrefix” %>
Tabla n°3. Tipos de directivas
Documentos JSP
Cuando hablamos de documentos JSP, estamos hablandode páginas JSP escritas en XML, es por ello que un documento JSP es también un documento XML y, no obstante, permite la flexibilidad y las ventajas de este tipo de tecnología:
· Se puede emplear cualquier herramienta XML para modificar páginas JSP, de forma tal que se garantice que el documento JSP este bien conformado.
· Se puede validar el documento JSP con su correspondiente DTD
· Puede existir una anidación de los espacios de nombres en los documentos JSP.
· Se puede emplear un documento JSP para intercambiar datos entre aplicaciones Web y XML en el momento de la compilación.
La siguiente tabla (tabla n°4) presenta un resumen de cómo convertir la sintaxis de una JSP estándar a un documento JSP:
	Elementos de sintaxis
	Sintaxis Estándar 
	Sintaxis XML 
	Comentarios 
	<%- - … - -%>
	<!- - … - ->
	Declaración 
	<%! … %>
	<jsp:declaration>…</jsp:declaration>
	Directivas 
	<%@ include …%>
	<jsp:directive.include… />
	
	<%@ page …%>
	<jsp:directive.page… />
	
	<%@ taglib …%>
	xmlns:prefix=”tag library URL”
	Expresiones 
	<%= … %>
	<jsp:expression>…</jsp:expression>
	Scriptles
	<% … %>
	<jsp:scriptlet>…</jsp:scriptlet>
Tabla n°4. Conversión entre sintaxis JSP estándar y sintaxis XML JSP
Actividades:
1. ¿Qué elementos JSP usan las etiquetas <%= y %>?
a. Declaraciones 
b. Expresiones 
c. Sentencias 
2. ¿Cuál de las directivas JSP incluye una librería de etiquetas?
a. Page
b. Include
c. Taglib 
3. Son las partes de una página web, que no varía
a. Contenido estático
b. Contenido dinámico
c. Contenido animado
2.3. Programación web con java. Trabajo con Servlets.
Un Servlet es un componente Java que se ejecuta en el servidor y que se encarga de administrar conexiones HTTP guiado por el ciclo de vida que revisaremos más adelante. El Servlet procesa la petición del cliente y proporciona una respuesta más adecuada (Ver Figura 2). No obstante, los Servlet también se pueden emplear para sincronizar peticiones concurrentes o reenviar peticiones a otros Servlets o a otros componentes web.
Figura 2. Modelo de respuesta a peticiones HTTP
Ciclo de vida de un Servlet
Un Servlet tiene un ciclo de vida que se detalla en la interfaz javax.servlet.Servlet y todos los Servlets siguen el mismo ciclo de vida (ver figura 3)
Figura 3. Ciclo de vida del Servlet
Explicando un poco la figura anterior, cuando el contenedor web se inicializa, busca los descriptores de despliegue de cada una de sus aplicaciones. Si encuentra un Servlet en dichos descriptores, creará una instancia de la clase del Servlet. En ese instante, el Servlet está cargado, pero no inicializado y, por tanto, no puede servir peticiones.
Seguidamente, el contenedor web lo arranca llamando al método init (1). Hasta que la inicialización no se complete, el Servlet no estará en condiciones de servir peticiones de los clientes. El método init solamente se llama una vez y no se volverá a llamar sino se recarga el Servlet, lo cual no puede suceder sino se llama antes al método destroy(4).
La utilización del método init para inicializar el Servlet significa que es factible modificar su configuración editando el descriptor de despliegue sin necesidad de recompilar ni cambiar el código Java del Servlet. Por otra parte, puesto que el método init se llama una única vez, la nueva configuración no tendrá validez hasta que no vuelva a ejecutarse. Una forma de asegurarse que esto ocurre es reiniciar el contenedor.
Una vez que se recibe una petición de un cliente, el contenedor llama al método service del Servlet (2) y éste remitirá la respuesta el control al contenedor Web (3). El ciclo finaliza cuando ya no es fundamental que el Servlet siga ejecutándose, el contenedor llama al método destroy (4). Así como ocurría con el método init, el método destroy solamente se ejecuta una vez, esta ejecución del método destroy, podría ocasionar problemas de concurrencia.
Gestión de los eventos del ciclo de vida
Es factible visualizar y reaccionar a los eventos del ciclo de vida del Servlet precisando oyentes(listeners) con métodos que se llaman cuando suceden dichos eventos. Estos oyentes son clases que implementan una interfaz definida, así como se detalla en la tabla (tabla n°5). Cuando un método de un oyente es invocado, se le envía un evento con la información relacionada a dicho evento. Por ejemplo, el evento HttpSessionEvent posee información sobre la sesión HTTP.
	Objeto 
	Evento 
	Interfaz de oyentes y Clases Event 
	
Web context
	Inicialización y destrucción
	javax.servlet.
ServletContextListener y
ServletContextEvent
	
	Adición, borrado o modificación de atributo
	javax.servlet.
ServletContextAttributeListener y
ServletContextAttributeEvent
	
Session 
	Creación, invalidación, activación, paso a modo pasivo y tiempo excedido
	javax.servlet.http.
HttpSessionListener,
HttpSessionActivationListener y 
HttpSessionEvent
	
	Adición, borrado o modificación de atributo
	javax.servlet.http.
HttpSessionAttributeListener y
HttpSessionBindingEvent
	
Request 
	Una petición de Servlet ha sido iniciada, siendo procesada por componentes web
	javax.servlet.
ServletRequestListener y
ServletRequestEvent 
	
	Adición, borrado o modificación de atributo
	javax.servlet.
ServletRequestAttributeListener y
ServletRequestAttributeEvent
Tabla n°5. Eventos del ciclo de vida de un Servlet
Inicialización del Servlet
Cuando el contenedor Web carga e instancia el Servlet y previo a recibir peticiones de los clientes, el contenedor debe ser inicializado. Este proceso de inicialización puede ser personalizado, donde para leer datos de configuración de la capa de persistencia, por ejemplo, inicializar recursos o cualquier otra acción, y no ocurre la inicialización por algún motivo, se lanzaría una excepción del tipo UnavailableException.
	
¿SABÍAS QUE...?
La Excepción UnavailableException generalmente implica que el Servlet se compiló inicialmente con clases que el servidor no puede ubicar.
El proceso de inicialización va a depender del origen de la inicialización. Si lo parámetros inciden a los Servlet de forma individual, entonces se empleo el objeto ServletConfig, si por el contrario, la inicialización se realiza común a todos los Servlet, se utilizaría el objeto ServletContext.
Métodos de servicio
Los Servlet proporcionan un servicio donde implementan el método service de GenericServlet, en los métodos doXXXX de HttpServlet o en otros métodos del protocolo que siga la clase que implementa la interfaz Servlet.
Sin embargo, estos métodos están vacíos, por cuanto al escribir un Servlet es indispensable sobreescribirlos. Dado el caso de un HttpServlet, los métodos que se necesitan implementar son:
· doGet(): el método GET de HTTP es uno de los más usuales. Se solicita cuando un cliente pulsa sobre el enlace URL en su navegador. Una petición GET puede contener varios parámetros:
	
EJEMPLO PRÁCTICO
http://algunsitio.com/login,htm?usuario=nombre&tipo=estud
El primer parámetro de la lista está indicado por un signo de interrogación y el valor se especifica con el signo ‘=’. Los demás parámetros se separan con el signo ‘&’
· doPost(): se utiliza en formularios HTML y permite el envío de grandes volúmenes de datos oculta en el cuerpo de la petición.
· doHead(): funciona exactamente como el método GET, la diferencia es que devuelve la cabecera HTTP. Se utiliza para verificar la disponibilidad del enlace.
· doPut(): es similar a FTP, ya que sube archivos al servidor, pero su uso es poco utilizado.
Invocación de un Servlet
Un Servlet HTTP recibe una petición HTTP oculta en un objeto HttpServletRequest, que posee, la URL de la petición y cualquier otra información. Esta el pasada con el formato http://[host]:[port][request path]?[query string], donde:
· Ruta del contexto (Context path): es la unión de la barra de dirección y el contexto raíz de la aplicación Web del Servlet.
· Ruta del Servlet (Servlet path): es la porción de la ruta que identifica al componente cuyo alias se activa con esta petición. 
· Información de ruta (Path info): es la partede la ruta de la petición (request path) que no pertenece ni a la ruta del Servlet ni a la ruta del contexto.
· Cadena de consulta: está formada por un conjunto de atributos y sus valores.
Peticiones y respuestas HTTP
Los Servlet son llamados cuando una petición HTTP hace referencia al mismo, ya sea directamente como en el caso de un Servlet Java o indirectamente por medio de una JSP. Fundamentalmente, el Servlet se nutrirá de la información contenida en la petición, la procesará y generará los resultados insertándolos en una respuesta HTTP (ver Figura 4):
 
Figura 4. Funcionamiento básico de un Servlet
Las peticiones HTTP poseen la información enviada al cliente y es factible acceder a ella, puede ser a través del objeto javax.servlet.HttpServletRequest, mismo que define los métodos utilizados para obtener esa información, si se trata de un Servlet o si se trata de una JSP, a través del objeto implícito, con los mismo métodos del caso anterior.
Si vemos el caso de la respuesta HTTP, el Servlet la construye a partir de un objeto tipo javax.servlet.HttpServletResponse que, puede ser manipulado directamente (si hablamos de un Servlet) o indirectamente (si hablamos de una JSP).
Generación de la respuesta
Este proceso, la respuesta del Servlet, posee los datos devueltos al cliente como respuesta del procesamiento de la información que éste proporcionó. En un Servlet, todas las respuestas instauran la interfaz ServletResponse que incluye métodos para diversos puntos, a seguir:
· Adquirir el flujo de salida utilizado para enviar los datos al cliente. Esto facilita el envío de caracteres con el PrinterWritter devuelto por el método getWriter() o enviar datos MIME en el cuerpo de la respuesta a través del ServletOutputStream que proporciona el método getOutputStream().
· Señalar el tipo de contenido de la respuesta (por ejemplo, text/html o application/pdf) con el método setContentType. Lógicamente, este método debe invocarse antes que se genere la respuesta.
· Establecer si se guarda la salida en un buffer o no, con el método setBufferSize(int). Este almacenamiento permite escribir la salida antes de hacer efectivo el envío al cliente, de forma que el Servlet tenga más oportunidad para diseñar las cabeceras o para esperar los resultados de otro componente Web.
· Especificar la información de localización con el locale (configuración regional) y el juego de caracteres utilizados.
Específicamente el caso de HTTP, el manejo de las peticiones de los clientes que lleva a cabo el método service, se suele confiar en los métodos doGet y doPost, dependiendo del tipo de petición.
Finalización de un Servlet
Una vez que el contenedor de Servlet nota que el Servlet debe ser borrado (esto ocurre cuando el contenedor necesite más memoria o cuando el contenedor se esté apagando), entonces, el contenedor llama al método destroy del Servlet. Este método permite liberar los recursos que esté utilizando el Servlet y almacenar cualquier estado persistente. Todos los métodos de servicio se deben completar antes que el Servlet sea borrado.
	
COMPRUEBA LO QUE SABES
1. ¿Qué incluye cabeceras, datos de formularios, variables CGI, cookies y variables de URL?
a. La petición cliente web – servidor web
b. La respuesta motor de Servlet – servidor Web
c. La petición servidor web-motor de Servlet
2. ¿Cuál es el método que finaliza a un Servlet?
a. Service()
b. Init()
c. Destroy()
3. ¿Qué es un componente Java que se ejecuta en el servidor y que se encarga de gestionar conexiones HTTP siguiendo un ciclo de vida?
a. JSP
b. Servlet
c. Servidor Web
2.4. Programación web con java. Seguridad en JSP.
La seguridad en los sitios Web es imprescindibles, ya que en estos se maneja mucha información relevante y confidencial para todos los usuarios que navegan en este maravilloso mundo de Internet. Es por ello que existen una serie de protocolos de seguridad que son aplicados a las JSP y los Servlet, que son sus aliados. A continuación, se enumeran y describen cada uno de ellos:
· Autenticación (authenticate): este método certifica a un usuario por medio de un proceso de inicio de sesión configurado en el Servlet. La sintaxis se muestra a continuación:
boolean authenticate(HttpServletResponse response))
Este método de autenticación se puede ver representado en la siguiente figura (ver Figura 5).
Figura 5. Proceso de Autenticación Servlet – JSP
El proceso anterior muestra claramente el proceso a seguir, cuando la autenticación resulta verdadera, el resultado de la validación es satisfactorio. En caso contrario, que la información suministrada sea incompleta o errada, se presenta un error java.io.IOException cuando se está guardando la respuesta.
· Usuarios y roles (login): este método permite a los clientes validarse por medio de un identificador y una clave de acceso. Estos usuarios deben tener roles asignados para que la seguridad sea mayor, ya que los servidores Web asocian los roles de los usuarios a las restricciones de seguridad y a algunos recursos de las JSP. La sintaxis utilizada es la que se presenta a continuación:
login(java.lang.String username, java.lang.String password)
Donde el username es el identificador que se emplea para acceder a la JSP y el password es la clave.
En este punto puede ocurrir una excepción ServletException si el módulo para iniciar sesión dispuesto no aguanta la autenticación del identificador de usuario y clave, si ya se ha certificado con anterioridad (antes de la llamada al inicio de sesión) o si la verificación del identificador de usuario y la clave suministrada no es correcta.
· Finalizar sesión (logout): con este método estaremos finalizando la sesión de los usuarios y deshabilitando la sesión HTTP. Este proceso tiene varios pasos a saber:
· Elimina las cookies 
· Inhabilita la sesión HTTP 
· Borra el usuario de la memoria caché de autenticación 
· Especifica el tipo de autenticación en null.
Después que se cierra la sesión se necesita volver a iniciar sesión, para poder acceder a los recursos de la JSP. La sintaxis para el método finalizar sesión es:
logout()
	
ENLACE DE INTERÉS
Para conocer más sobre la seguridad JSP, te recomiendo el siguiente enlace.
https://www.ibm.com/support/knowledgecenter/es/SSEQTP_9.0.5/com.ibm.websphere.base.doc/ae/rsec_secgetru.html 
2.5. Programación web con java. Introducción a Enterprise JAVA BEANS.
Enterprise JavaBeans (EJB) es una arquitectura de componentes del lado del servidor que simplifica el proceso de creación de aplicaciones de componentes distribuidos de clase empresarial en Java. Al utilizar EJB, puede escribir aplicaciones escalables, confiables y seguras sin escribir su propio marco complejo de componentes distribuidos. 
EJB se trata de un rápido desarrollo de aplicaciones para el lado del servidor; puede construir rápida y fácilmente los componentes del lado del servidor en Java mediante el uso de una infraestructura distribuida proporcionada por la empresa. EJB está diseñado para admitir la portabilidad y la reutilización de las aplicaciones en todos los servicios de middleware de la empresa. 
EJB es un estándar para construir componentes del lado del servidor en Java. Define un acuerdo (contrato) entre componentes y servidores de aplicaciones que permite que cualquier componente se ejecute en cualquier servidor de aplicaciones. Los componentes de EJB (llamados Enterprise Beans) son desplegables, y pueden importarse y cargarse en un servidor de aplicaciones, que aloja esos componentes. Las tres proposiciones principales de EJB son las siguientes: 
· La industria está de acuerdo en beneficiarse de su uso generalizado. Debido a que todos estarán en la misma página, en el futuro será más fácil contratar empleados que entiendan sus sistemas (ya que pueden tener experiencia previa con EJB), aprender las mejores prácticas para mejorar su sistema, asociarse con empresas (la tecnología será compatible) y vender software (ya que los clientes aceptarán su solución). Se aplica el concepto de “entrenar una vez, codificar en cualquierlugar”.
· La portabilidad es más fácil. La especificación EJB se publica y está disponible de forma gratuita para todos. Dado que EJB es un estándar, no es necesario apostar en una arquitectura única y exclusiva del proveedor. Y aunque la portabilidad nunca será gratuita, es más barata que sin un estándar.
· Desarrollo rápido de aplicaciones. Su aplicación se puede construir más rápido porque obtiene servicios de infraestructura de middleware, como transacciones, agrupación, seguridad, etc. del servidor de aplicaciones.
La arquitectura EJB solo soporta el lenguaje Java hasta ahora. Aunque suena un poco restrictivo, la buena noticia es que Java es uno de los lenguajes más adecuados para la construcción de componentes por los siguientes motivos: 
· Separación de interfaz / implementación. Necesitamos un lenguaje que admita una separación clara entre la interfaz e implementación para mantener al mínimo las actualizaciones y el mantenimiento de los componentes. Java admite esta separación a un nivel sintáctico a través de las palabras clave de la interfaz y la clase.
· Segura. La arquitectura de Java es mucho más segura que los lenguajes de programación tradicionales. En Java, si un hilo muere, la aplicación permanece activa. Los punteros ya no son un problema. Las pérdidas de memoria ocurren menos a menudo. Java también tiene un amplio conjunto de bibliotecas, de modo que Java no es solo la sintaxis de un lenguaje, sino todo un conjunto de bibliotecas preescritas y depuradas que permiten a los desarrolladores evitar reinventar la rueda de una manera defectuosa. Esta seguridad es extremadamente importante para aplicaciones de misión crítica. Claro, la sobrecarga requerida para lograr este nivel de seguridad puede hacer que su aplicación sea más lenta, pero el 90% de todos los programas de negocios son interfaces gráficas de usuario (GUI) glorificadas a bases de datos. 
El ecosistema EJB
Para que una implementación de EJB se ejecute con éxito, necesita más que solo un servidor de aplicaciones y componentes. De hecho, EJB fomenta la colaboración de más de seis partes diferentes. Cada una de estas partes es un experto en su campo y es responsable de una parte clave de una implementación exitosa de EJB. Debido a que cada parte es un especialista, el tiempo total requerido para construir una implementación de clase empresarial se reduce significativamente. Juntos, estos elementos forman el ecosistema EJBE. Veremos quiénes son los elementos en el ecosistema EJB. A medida que siga leyendo, piense en el modelo de negocios de su empresa para determinar qué función desempeña. Si no está seguro, pregúntese cuál es la competencia principal de su empresa. También piense qué funciones podría desempeñar en los próximos proyectos.
	
PARA SABER MÁS
Es posible que hayas oído hablar de otro estándar llamado JavaBeans. Los JavaBeans son completamente diferentes de los Enterprise JavaBeans. En pocas palabras, los JavaBeans son clases Java que tienen métodos get / set. Son componentes Java reutilizables con propiedades, eventos y métodos (similares a los controles ActiveX de Microsoft) que se pueden conectar fácilmente para que puedan ser conectados fácilmente a menudo visuales) aplicaciones Java. El marco JavaBeans es ligero en comparación con Enterprise JavaBeans. Puede usar JavaBeans para ensamblar componentes más grandes o para compilar aplicaciones completas. JavaBeans, sin embargo, son componentes de desarrollo y no son componentes desplegables. Normalmente no se implementa en JavaBean; más bien, JavaBeans lo ayuda a construir software más grande que es desplegable. Y debido a que no se pueden implementar, JavaBeans no necesita vivir en un entorno de ejecución y, por lo tanto, en un contenedor. Como los JavaBeans son solo clases de Java, no necesitan un servidor de aplicaciones para crear instancias, destruirlas y proporcionarles otros servicios. Una aplicación EJB puede usar JavaBeans, especialmente cuando se están compaginando datos de la capa EJB a otra, por ejemplo, a los componentes que pertenecen a un nivel de presentación o a una aplicación que no sea J2EE escrita en Java.
El despliegue de EJB
Después que el ensamblador de aplicaciones genere la aplicación, la aplicación debe implementarse (y ponerse en funcionamiento) en un entorno operativo en ejecución. Algunos de los desafíos que se presentan aquí son los siguientes: 
· Asegurar la implementación con un firewall de hardware o software y otras medidas de protección 
· Integrarse con los repositorios de políticas y seguridad de la empresa, el cual es un servidor LDAP como Sun Java System Directory Server (anteriormente Netscape Directory Server), Novell Directory Server, o Microsoft Active Directory 
· Selección del hardware que proporciona el nivel de calidad requerido para ser viceversa 
· Proporcionar hardware redundante y otros recursos para la confiabilidad y la tolerancia a fallas
· Ajuste del sistema. 
Con frecuencia, el ensamblador de aplicaciones (que normalmente es un desarrollador o analista de sistemas) no está familiarizado con estos problemas. Aquí es donde el despliegue EJB entra en juego. Los implementadores de EJB conocen los requisitos operativos específicos y realizan las tareas anteriores. 
El administrador del sistema
Una vez que se implementa el EJB, el administrador del sistema interviene para supervisar la estabilidad de la solución operativa. El administrador del sistema es responsable del mantenimiento y la supervisión del sistema implementado y puede hacer uso de las herramientas de administración y monitoreo en tiempo de ejecución que proporciona el servidor EJB.
Por ejemplo, un servidor EJB sofisticado podría avisar a un administrador del sistema si se produce un error grave que requiera atención inmediata. Algunos servidores EJB logran esto mediante el desarrollo de enlaces en productos de monitoreo profesional.
Tipos de Beans
La figura 6 define tres tipos diferentes de beans empresariales:
· Beans de sesión. Los beans de sesión modelan los procesos de negocio. Son como los verbos porque realizan acciones. La acción podría ser cualquier cosa, agregar nuevos números, acceder a una base de datos, llamar a un sistema heredado o llamar a otros beans empresariales. Los ejemplos incluyen un motor de fijación de precios, un motor de flujo de trabajo, un motor de catálogo, un autorizador de tarjeta de crédito o un motor de negociación de acciones 
· Beans de entidad. Datos de modelo empresarial de beans de entidad. Son como sustantivos porque son objetos de datos, es decir, objetos de Java que almacenan información en la base de datos. Los ejemplos incluyen un producto, un pedido, un empleado, una tarjeta de crédito o un stock. Los beans de sesión suelen aprovechar los beans de entidad para lograr objetivos comerciales, como un motor de negociación de acciones (bean de sesión) que se ocupa de las acciones (beans de entidad).
· Beans controlados por mensaje. Los beans controlados por mensaje son similares a los beans de sesión en que realizan acciones. La diferencia es que puede llamar a beans controlados por mensajes solo de forma implícita enviando mensajes a esos beans. Los ejemplos de beans controlados por mensajes incluyen beans que reciben mensajes de comercio de acciones, mensajes de autorización de tarjetas de crédito o mensajes de flujo de trabajo. Estos beans controlados por mensajes también pueden llamar a otros beans empresariales.
Fuente: Mastering Enterprice JavaBeans
Figura 6. Interacción con componentes EJB
	
COMPRUEBA LO QUE SABES
1. Los beans que modelan los procesos de negocios son:
a. Beans de mensaje
b. Beans de entidad
c. Beans de sesión
2. ¿Cómo podemos definir los EJB?
a. Como un estándar para construir componentes del lado del servidor en Java
b. Para proporcionar hardware redundante y otros recursos para la confiabilidad y la tolerancia a fallas
c. Como sustantivos porque son objetos de datos
3. El método que certifica a un usuario por medio de un proceso de inicio de sesión configurado en el Servlet(para la seguridad de las JSP)
a. Autenticación
b. Logout
c. Login
2.6. Programación web con java. Introducción al patrón MVC.
MVC, son las siglas de Modelo-Vista-Controlador que es uno de los paradigmas de arquitectura de software.
Previo al abordaje por completo de este paradigma, vamos hacer una introducción a la arquitectura de software, para entender mejor de que trata.
Arquitectura de Software
	
PARA SABER MÁS
A rasgos generales, se puede decir que “La Arquitectura de Software es la forma en la que se organizan los componentes de un sistema, interactúan y se relacionan entre sí y con el contexto, aplicando normas y principios de diseño y calidad, que fortalezcan y fomenten la usabilidad a la vez que dejan preparado el sistema, para su propia evolución”.
Fuente: Eugenia Bahit
Existen diversos tipos de arquitecturas de software, pero en este apartado, por ser introductorio, sólo hablaremos de dos tipos:
· La Arquitectura de Software Orientada a Objetos
· La Arquitectura Estructurada
Ambas arquitecturas presentan propiedades de calidad que mencionaré a continuación y que cuando se cumplan estas propiedades, se habla que la calidad del software es completamente satisfactoria. Estas propiedades, nacen desde la arquitectura de software y se enumeran a continuación:
Atributos de calidad durante la ejecución del software:
1. Disponibilidad de uso
2. Confidencialidad
3. Respeto de la funcionalidad
4. Desempeño del sistema con relación a la capacidad de respuesta
5. Confiabilidad
6. Seguridad externa
7. Seguridad interna
Atributos de calidad del proceso de desarrollo del software:
1. Configurabilidad a los usuarios
2. Integrabilidad
3. Integridad
4. Interoperabilidad
5. Modificabilidad
6. Mantenibilidad
7. Portabilidad
8. Reusabilidad
9. Escalabilidad
10. Testeabilidad
El patrón Modelo-Vista-Controlador (MVC) es el patrón de diseño más adecuado y recomendado para aplicaciones interactivas que distribuyen las funcionalidades de dicha aplicación entre los distintos objetos que la componen, de manera que el grado de acoplamiento entre los objetos de la aplicación sea mínimo.
MVC divide una aplicación interactiva en tres áreas: procesamiento, salida y entrada. Para esto, utiliza las siguientes abstracciones (ver figura 7):
Figura 7. Patrón Modelo-Vista-Controlador
· Modelo: encapsula la información que maneja el sistema, incluyendo la información de negocio y las lógicas de acceso a los mismos. El modelo avisa a la vista cuando se produce alguna modificación de los datos del modelo y permite consultar el estado de los mismos. También permite al controlador acceder a las funcionalidades de la aplicación encapsuladas por el modelo. El modelo es independiente de cualquier representación de salida y/o comportamiento de entrada.
· Vista: es la interfaz de usuario, es decir, decide cómo se presenta la información del modelo al usuario, actualizando la interfaz cuando se produce alguna modificación en los mismos. La vista también reenvía la entrada del usuario controlador. Pueden existir múltiples vistas del modelo. Cada vista tiene asociado un componente controlador.
· Controlador: recibe las entradas, usualmente, como eventos que codifican los movimientos o pulsación de botones del ratón, pulsaciones de teclas, etc. Responde a dichos eventos modificando el modelo y pudiendo producir, por tanto, cambios en la vista. Así pues, el controlador interpreta la entrada del usuario y la correspondencia en acciones que serán llevadas a cabo por el modelo. Un controlador escoge la siguiente vista a mostrar basándose en las interacciones del usuario y los resultados de las operaciones del modelo.
Para implementar la capa de presentación de una aplicación, siguiendo el patrón MVC, se opta por utilizar el framework Java Server Faces (JSF). Para implementar la vista, JSF propone el uso de páginas JSP (Java Server Pages). Cada página JSP contiene componentes web como formularios, cajas de texto o botones. Estos componentes se definen mediante etiquetas JSTL (JSP Standard Tag Library). Cada vez que el usuario interactúa con estos componentes (por ejemplo, pulsando sobre algún botón) ocurre un evento. Este evento es notificado vía HTTP a un Servlet especial que se sitúa en el lado del servidor denominado Faces. Este Servlet Faces constituye el controlador de JSF. Este Servlet viene incorporado en el framework y no necesita ser implementado por el desarrollador. Constituye el auténtico motor de las aplicaciones JSF. Cada aplicación, aun ejecutándose en el mismo servidor que otras, tiene un Servlet propio. Por último, la parte del modelo recae sobre los beans de respaldo o backing beans. El bean de respaldo define las propiedades y las lógicas de manejo asociadas con los componentes de interfaz de usuario utilizados en la página JSP. Cada propiedad del bean de respaldo está unida a un componente. Un bean de respaldo también define un conjunto de métodos que realizan funciones para el componente, como validar sus datos, manejar los eventos que dispara y realizar el procesamiento asociado con la navegación cuando éste se activa.
	
ENLACE DE INTERÉS
En el siguiente enlace podrás encontrar información sobre el framework Java Server Faces (JSF)
http://www.jtech.ua.es/j2ee/publico/jsf-2012-13/sesion01-apuntes.html
	
PARA SABER MÁS
Un Framework es un marco de trabajo o esquema que permite escribir un programa o código en un lenguaje de programación específico.
	
COMPRUEBA LO QUE SABES
Explica lo que entendiste del patrón MVC, sabiendo que el Modelo representa la lógica de negocio, que la vista es la encargada de mostrar la información a los usuarios de forma gráfica y el controlador es el intermediario entre la vista y el modelo.
2.7. Programación web con php. Introducción a PHP.
PHP es el lenguaje de programación para procesar hipertextos que más se ha utilizado en el desarrollo de la aplicación de visualización, haciendo alguna diferencia en la interacción de la web con la base de datos. En principio, permite establecer una conexión con la base de datos y modificar dinámicamente el contenido de una página, lo cual resulta esencial en el desarrollo de las aplicaciones Web.
El lenguaje PHP suele procesarse directamente en el servidor, aunque también puede usarse a través de software capaz de ejecutar comandos específicos. Es una tecnología de código abierto o mejor dicho libre. El código PHP, como mencioné, se ejecuta en el servidor y está encapsulado para el cliente Web, es ventajoso trabajar con él, puesto que existe una comunidad de programadores muy amplia y existe muy buena información sobre este lenguaje en distintos medios.
Es importante señalar que, PHP es un lenguaje de programación orientado a objetos y también se puede trabajar de forma estructurada, dependiendo de las habilidades de cada programador.
PHP toma un poco de su sintaxis de otros lenguajes, como C, shell, Perl e incluso Java. Realmente es un lenguaje híbrido, que toma las mejores funciones de otros lenguajes y crea un lenguaje de scripting potente y fácil de usar. 
2.7.1. Introducción e instalación de apache, php y mysql
Un servidor web local es un programa que procesa una aplicación del lado del servidor, realizando conexiones bidireccionales o unidireccionales, síncronas o asíncronas con el cliente y generando o cediendo una respuesta en cualquier lenguaje o aplicación del lado del cliente, además puede formar parte de una red que dota de servicios a otros equipos. El código recibido por el cliente es renderizado por un navegador web. Para la transmisión de todos los datos suele utilizarse algún protocolo (HTTP), perteneciente a la capa de aplicación del modelo OSI (Open Systems Interconnection o Interconexión de Sistemas Abiertos).
Entonces podemos decir que Apache es un servidor web local codificado en software libre y de código abierto, de manera que los desarrolladores web puedan disponer de él, gratuitamente. Fue desarrollado por Apache Software Foundation, y es una herramientaque los programadores pueden utilizar para probar sus sistemas web antes de ser subidos a un servidor Web.
Este servidor por ser diseñado con modularidad permite incluir varios elementos a saber: 
· Bases de datos (MySQL)
· Lenguajes de programación (PHP, Python o Perl)
Y de esta manera tenemos un entorno completo para generar páginas y sistemas Web. 
Este servidor Web (Apache) esta incluido en paquetes comerciales, libres y de distribución gratuita, que permiten instalar tanto el servidor (apache) como el lenguaje de programación (PHP), en este caso, y la base de datos (MySQL). Estos son: XAMPP, WAMP, LAMP.
En este libro te mostraré la instalación del paquete XAMPP, los demás son muy similares y poseen las mismas funcionalidades del XAMPP.
Instalación de XAMPP
1. Descargar
	
ENLACE DE INTERÉS
para las versiones con PHP 5.5, 5.6 o 7 se descargan gratuitamente desde la página del proyecto 
https://www.apachefriends.org/es/download_success.html
2. Ejecutar archivo.exe
Cuando el paquete es descargado en nuestro ordenador, se debe pulsar sobre el archivo.exe para ejecutarlo
3. Iniciar asistente de instalación
En este punto aparecerá una pantalla de instalación, a la cual pulsaremos el botón next.
Figura 8. Pantalla inicio para instalar Xampp
4. Seleccionar los componentes a instalar
En este paso, se pueden seleccionar o no seleccionar algunos componentes que considere no apropiados para su servidor, sin embargo, se recomienda dejar seleccionados los componentes por defecto que trae fijado el servidor. Como se muestra en la siguiente figura.
Figura 9. Componentes para la instalación del Xampp
5. Seleccionar directorio 
Ya en este paso, se selecciona el directorio donde se desea instalar el Xampp. Si en el paso anterior seleccionó la opción por defecto, la ubicación de la instalación será en el disco C y este a su vez creará una carpeta llamada xampp. Como se muestra en la figura 10.
Figura 10. Directorio para la instalación del Xampp
6. Arrancar proceso de instalación
En este punto iniciará la instalación del servidor, en la ubicación seleccionada para tal fin; dicho proceso puede tardar un poco, y su progreso puede verse con una barra, como se muestra en la figura 11.
Figura 11. Progreso de la instalación del Xampp
7. Configuración de Firewall
Cuando iniciamos la instalación del servidor, es probable que aparezca en el asistente de instalación, una pantalla que indique un bloqueo de Firewall, aquí podemos marcar el check que indica la comunicación del Apache con una red de trabajo o una red privada. No es recomendable utilizarlo en red pública.
Figura 12. Alerta de bloqueo de Firewall
8. Fin de la instalación
Una vez terminado el proceso de instalación, aparecerá una pantalla que permitirá pulsar sobre el botón Finish para terminar con la misma, pero tendremos la opción de marcar sobre la casilla para ir al panel de control de Xampp.
Figura 13. Finalización instalación del Xampp
Panel de control del Xampp
En la figura 14, se muestra la imagen del panel de control del Xampp, donde podremos configurar (activar y desactivar) los servicios que este servidor nos provee, es una interfaz de usuario muy intuitiva y usable.
 Figura 14. Panel de control del Xampp
A continuación, te presento esos servicios que podrás configurar:
· Config: para configurar XAMPP así como otros componentes aislados.
· Netstart: muestra todos los procesos en funcionamiento en el ordenador local.
· Shell: lanza una ventana de comandos UNIX.
· Explorer: abre la carpeta XAMPP en el explorador de Windows.
· Services: muestra todos los servicios en funcionamiento.
· Help: incluye enlaces a foros de usuarios.
· Quit: se usa para salir del panel de control.
Fuente: https://www.ionos.es/digitalguide/servidores/herramientas/instala-tu-servidor-local-xampp-en-unos-pocos-pasos/
Administrar los módulos
Los módulos que posee el Xampp tiene cada uno su administrador “Admin” con funciones propias para cada uno, las podemos enumerar de la siguiente manera:
· Cuando se pulsa sobre el botón “Admin” del servidor Apache, podremos ingresar a la ruta web del servidor por medio del navegador Web que posea tú ordenador. Una vez allí el navegador nos conducirá a la página principal de XAMPP en el servidor local (localhost), y el dominio de nuestro ordenador personal. Si se introduce la dirección localhost/dashboard/ podremos acceder a la página principal del servidor Apache, se muestra en la siguiente figura (ver figura 15).
Figura 15. Página principal del servidor Apache
· Para poder acceder a la base de datos (MySQL), es necesario pulsar sobre el botón “Admin” de la base de datos y se podrá ingresar al su administrador en phpMyAdmin, que es el encargado de soportar todas las bases de datos de nuestros proyectos Web. Si deseamos ingresar a la interfaz de usuario por medio del servidor Web, debemos ingresar en la barra de dirección de nuestro navegador Web localhost/phpmyadmin/.
Figura 16. Interfaz gráfica del phpMyAdmin
	
VIDEO DE INTERÉS
En este vídeo podrás ver como se realiza la instalación del Xampp
https://www.youtube.com/watch?v=BdqsA0DvlZI
	
COMPRUEBA LO QUE SABES
Escribir una página Web para poder probar la instalación correcta del Xampp, para ello te doy algunas sugerencias, a saber:
· Abrir el directorio htdocs, que se encuentra ubicado en el directorio donde instalamos el Xampp, en nuestro caso C://xampp/htdocs
· Crear una nueva carpeta, en esa dirección, con el nombre del proyecto que realizaremos, puede ser Prueba
· Crear una página Web de prueba sencilla, como un contenido sencillo que te presento a continuación, puede ser en un editor de texto que posea tú ordenador 
 <html>
 <head>
 <title>Página de Prueba</title>
 </head>
 <body>
 <?php echo '<p>Estoy probando Xampp</p>'; ?>
 </body>
 </html>
· Guárdala en la carpeta creada en el paso anterior, puede ser con el nombre prueba.php
· A continuación, debes abrir el navegador Web y escribir en la barra de dirección c://xampp/htdocs/Prueba/prueba.php
· Si todo está bien aparece el mensaje en el navegador Web la frase “Estoy probando Xampp”, esto indica que se instaló correctamente el Xampp
2.7.2. Sintaxis de PHP
Etiquetas de PHP 
Cuando PHP revisa un archivo, localiza las etiquetas de apertura y cierre, que son <?php y ?>, éstas le indican al lenguaje dónde iniciar y dónde culminar la lectura del código. Esta estructura permite incrustar a PHP en los documentos HTML, puesto que lo que se encuentre fuera de las etiquetas de inicio y fin de PHP será interpretado de la forma que se identifique cada documento, en este caso HTML. 
Si un archivo posee únicamente programación PHP, se sugiere obviar la etiqueta de fin de PHP, una vez terminado el código. De esta forma se evita la inclusión de espacios en blanco posterior a la etiqueta antes mencionada, mismo que produciría efectos negativos dentro de la programación. Un ejemplo de ello sería:
	
EJEMPLO PRÁCTICO
Puedes intentar programar este ejemplo en tú editor de texto o programa que tengas instalado para codificar PHP.
<HTML>
<HEAD>Ejemplo etiquetas PHP</HEAD>
 <BODY>El programa deberá mostrar "Hola Mundo":
 <?php 
 echo "Hola Mundo"; 
 ?>
 </BODY>
 </HTML>
En este ejemplo, podrás ver que su el código PHP se encuentra incrustado en el HTML. Cada vez que el intérprete de PHP alcanza una etiqueta abierta de PHP <? PHP, ejecuta el código adjunto hasta el marcador de delimitación ?>. PHP luego reemplaza ese código PHP con su salida (si existe) mientras que cualquier texto que no sea PHP (como HTML) se transfiere al cliente web. Por lo tanto, ejecutar el script mencionado llevaría a la siguiente salida:
<HTML>
<HEAD> Ejemplo etiquetas PHP</HEAD>
<BODY> El programa deberá mostrar "Hola Mundo":
 Hola Mundo 
</BODY>
</HTML>
Separaciónde Instrucciones
El lenguaje PHP necesita que las sentencias finalicen en punto y coma (;) al concluir cada instrucción, automáticamente si existe una nueva sentencia y está presente el punto y como (;), asumirá ésta como nueva. 
	
EJEMPLO PRÁCTICO
<?php
    echo 'Probando';
?>
<?php echo 'Probando de nuevo' ?>
<?php echo 'Se ha omitido la etiqueta final'; 
Comentarios
Lo siguiente que vamos a aprender sobre PHP es cómo escribir comentarios, ya que la mayoría de los códigos, de los buenos programadores, tienen comentarios. Puedes escribir comentarios de tres maneras diferentes:
	
EJEMPLO PRÁCTICO
<?php echo 'Comentario una línea';
// Esto es un comentario de una sola línea
echo 'Comentario multilínea';
/* Esto es un comentario con más de una línea
 y escribimos otra línea de comentarios */
echo 'Comentario tipo consola'; 
 # Esto es un comentario tipo consola de una sola línea
 ?> 
Los tipos de comentarios que poseen "una sola línea" se pueden tomar como comentarios sólo hasta que llega el fin de la línea comentada de código de PHP. Significando entonces, que el código HTML que pueda estar escrito posterior de “// ... ?>” o “# ... ?>” el compilador lo imprimirá en pantalla.
Variables
Las variables en PHP son bastante diferentes de los lenguajes compilados como C y Java. Esto se debe a que su naturaleza de tipo débil, que en resumen significa que no es necesario declarar las variables antes de usarlas, no es necesario declarar su tipo y, como resultado, una variable puede cambiar el tipo de su valor como lo desee. 
Las variables en PHP están precedidas por el signo $, y similares a la mayoría de los lenguajes modernos, pueden comenzar con una letra (A-Za-z) o _ (guion bajo) y pueden mantener tantos caracteres alfanuméricos y guiones bajos como desee. 
Ejemplos de los nombres de variables pueden ser:
$contar
$ _Objeto
$A123
Ejemplo de los nombres de variables que no se pueden declarar, pueden ser: $123 
$*ABCA
Como te mencioné, no es necesario declarar las variables o su tipo antes de usarlas en PHP. El siguiente ejemplo de código utiliza variables:
	
EJEMPLO PRÁCTICO
<?php $PI = 3.14;  
$radio = 5;
$circunsferencia = $PI * 2 * $radio;// circusferencia = π*d(diámetro) ?> 
Podemos notar que ninguna de las variables se declara antes de usarlas. Además, el hecho que $PI es un número de coma flotante y $radio (un entero) no se declara antes de que se inicialicen y ambos funcionan perfectamente. 
PHP no admite variables globales como muchos otros lenguajes de programación. Las variables son locales a su alcance, y si se crean en una función, solo están disponibles durante el tiempo de vida de la función. Las variables que se crean en el script principal (no dentro de una función) no son variables globales; No puedes ver dentro de las funciones, pero puede acceder a ellas usando una matriz especial $ GLOBALS [], usando el nombre de la variable como el desplazamiento de la cadena. El ejemplo anterior se puede reescribir de la siguiente manera: 
	
EJEMPLO PRÁCTICO
<?php $PI = 3.14;  
$radio = 5;
$circunsferencia = $GLOBALS[“PI”] * 2 * $GLOBALS [“radio”];// circusferencia = π*d(diámetro) ?> 
Referencias indirectas a variables
Una característica extremadamente útil de PHP es que puede acceder a las variables usando referencias directas, o, para decirlo simplemente, puede crear y acceder a las variables por su nombre en el tiempo de ejecución. Considere el siguiente ejemplo: 
	
EJEMPLO PRÁCTICO
<?php $nombre = “Juan”;  
 $$nombre = “Usuario registrado”;
 print $Juan;
?> 
Este código presenta como resultado la impresión de “Usuario registrado” La línea en negrita usa un $ adicional para acceder a la variable con el nombre especificado por el valor de $nombre ("Juan") y cambiando su valor a "Usuario registrado". Por lo tanto, se crea una variable llamada $Juan. Puede usar tantos niveles de direccionamiento como desee agregando $ signos adicionales delante de una variable.
Superglobales 
Como regla general, PHP no admite variables globales (variables a las que se puede acceder automáticamente desde cualquier ámbito). Sin embargo, ciertas variables internas especiales se comportan como variables globales similares a otros lenguajes. Estas variables se denominan superglobales y están predefinidas por PHP para su uso. Algunos ejemplos de estos superglobales son
· $ _GET []. Una matriz que incluye todas las variables GET que PHP recibió del navegador del cliente.
· $ _POST []. Una matriz que incluye todas las variables POST que PHP recibió del navegador del cliente. 
· $ _COOKIE []. Una matriz que incluye todas las cookies que PHP recibió del navegador del cliente.
· $ _ENV []. Una matriz con las variables de entorno.
· $ _SERVER []. Una matriz con los valores de las variables del servidor web. 
Es importante saber que puedes acceder a estas variables en cualquier parte de tú código, ya sea función, método, o alcance global. No tienes que usar la matriz $ GLOBALS [], que permite acceder a las variables globales sin tener que declararlas de antemano o utilizar la palabra clave global en desuso.
Tipos de datos básicos
Existen ocho tipos de datos diferentes en PHP, cinco de los cuales son escalares y cada uno de los tres tiene su propia singularidad. Las variables presentadas anteriormente pueden contener valores de cualquiera de estos tipos de datos sin declarar explícitamente su tipo. La variable "se comporta" según el tipo de datos que contiene.
Los enteros (int)
Este tipo de variables son números enteros y son equivalentes en rango como el valor más largo de su compilador, eso significa un entero con signo de 32 bits con un rango entre –2,147,483,648 y + 2,147,483,647. Los enteros se pueden escribir en decimal, hexadecimal (con el prefijo 0x), y notación de los octetos (con el prefijo 0), y puede incluir signos +/-. 
Algunos ejemplos de números enteros incluyen: 
240000
0xABCD
007
-100
Números de punto flotante (float)
Los números de punto flotante (también conocidos como números reales) representan números decimales y son equivalentes al doble tipo de datos de su compilador. En las plataformas comunes, el tamaño del tipo de datos es de 8 bytes y tiene un rango de aproximadamente 2.2E –308 a 1.8E + 308. Los números de punto flotante incluyen un punto decimal y pueden incluir un signo +/- y un valor exponente. 
Los ejemplos de números de punto flotante pueden ser:
3.14 
+ 0.9e-2
-170000.5
54.6E42
Cadenas de caracteres (String) 
Las cadenas en PHP son una secuencia de caracteres que siempre son terminados en nulo internamente. Sin embargo, a diferencia de otros lenguajes, como C; PHP no se encuentra en el nulo de terminación para calcular la longitud de una cadena, pero recuerda su longitud internamente.
Esto permite un fácil manejo de los datos binarios en PHP, por ejemplo, creando una imagen sobre la marcha y enviándola al navegador. La longitud máxima de las cadenas varía según la plataforma y de su compilador, pero puede esperar que admita al menos 2 GB. No es recomendable escribir programas que lleguen a este límite porque es probable que primero alcance el límite de memoria del procesador. 
Al escribir valores de cadena en su código fuente, puedes usar comillas dobles ("), comillas simples ('). A continuación, te explico cada uno:
· Comillas dobles: algunos ejemplos son: 
"PHP: lenguaje de alto nivel"
 "Alguna palabra" 
"1234567890" 
Las cadenas pueden contener prácticamente todos los caracteres. Sin embargo, algunos caracteres no pueden escribirse tal como están y requieren una notación especial:
	\n
	Nueva línea
	\t
	Tabulador 
	\"
	Comillas dobles
	\\
	Barra invertida
	\0
	ASCII 0 (nulo)
	\r
	Retorno de carro
	\$
	Escape $ para que no se trate como una variable sino como el carácter $.
	\{Octal #}
	El carácter representado por el # octal especificado —por ejemplo, \ 70 representa la letra 8.
	\x{Hexadecimal #}
	El carácter representado por el # hexadecimal especificado: por ejemplo, \ 0x32 representala letra 2
Tabla n°6. Caracteres con notación especial, comillas dobles
Una característica adicional de las cadenas de comillas dobles es que ciertas notaciones de variables y expresiones se pueden incrustar directamente dentro de ellas. Sin entrar en detalles, aquí hay algunos ejemplos de cadenas válidas, que incorporan variables. Las referencias a las variables se reemplazan automáticamente con los valores de las variables, y si los valores no son cadenas, se convierten a sus representaciones de cadena correspondientes (por ejemplo, el número entero 123 se convertiría primero en la cadena "123"). 
" El resultado es $ resultado \ n "
" El desplazamiento de la matriz $ i contiene $ arreglo [$ i] "
En los casos de querer concatenar cadenas con valores (como variables y expresiones) y esta sintaxis no te funciona, puedes utilizar el . (punto) Operador para concatenar dos o más cadenas. 
· Comillas simples: además de las comillas dobles, las comillas simples también pueden limitar las cadenas. Sin embargo, a diferencia de las comillas dobles, las comillas simples no admiten el escape de todas las comillas dobles y la sustitución de variables. La siguiente tabla (tabla n°7) incluye los dos únicos escapes admitidos por comillas simples:
	\’
	Comilla simple
	\\
	Barra invertida, que se usa cuando se quiere representar una barra diagonal inversa seguida de una comilla simple, por ejemplo, \\ '.
Tabla n°7. Caracteres con notación especial, comilla simple
	Ejemplos:
	‘Hola Mundo’
	‘Esta es una prueba de cadenas encerradas en comilla simple’
Booleanos (Boolean)
Los tipos de datos booleanos se introdujeron por primera vez en PHP 4 y no existían en versiones anteriores. Un valor booleano puede ser verdadero o falso. Como mencioné anteriormente, PHP convierte automáticamente los tipos cuando es necesario. Boolean es probablemente el tipo de dato que cualquier otro tipo, se convierten más a menudo en la encapsulación. Esto se debe a que, en cualquier código condicional como condicionales, ciclos, etc., los tipos se convierten en booleanos para verificar si se cumple la condición. Además, los operadores de comparación dan como resultado un valor booleano. Consideremos el siguiente fragmento de código:
	
EJEMPLO PRÁCTICO
$numerador = 1;
$denominador = 5;
if ($denominador == 0) {
print " El denominador debe ser un número distinto de cero. \n";
 }
El resultado del operador igual, que es un booleano; en este caso, sería falso y, por lo tanto, no se ingresaría la instrucción if (). Ahora, considere el siguiente fragmento de código:
$numerador = 1;
$denominador = 5;
if ($denominador) {
/* Realizar el cálculo */
} else {
print " El denominador debe ser un número distinto de cero. \n";
}
Puedes ver que no se utilizó ningún operador de comparación en este ejemplo; Sin embargo, PHP automáticamente convirtió $denominador internamente o, para ser más preciso, el valor 5 en su equivalente booleano, verdadero, para realizar la sentencia if () y, por lo tanto, ingresa el cálculo. 
Nulo (null)
Null es un tipo de datos con un solo valor posible: el valor NULL. Marca las variables como vacías, y es especialmente útil para diferenciar entre la cadena vacía y los valores nulos de las bases de datos. El operador isset ($ variable) de PHP devuelve false para NULL, y verdadero para cualquier otro tipo de datos, siempre que la variable estás probando que existen. El siguiente es un ejemplo de uso de NULL: 
$valor = NULL;
Arreglos o Matrices (Arrays)
Un array en PHP es una colección de pares clave / valor. Esto significa que asigna claves (o índices) a los valores. Los índices de matriz pueden ser enteros o cadenas, mientras que los valores pueden ser de cualquier tipo (incluidas otras matrices).
	
¿SABÍAS QUE...?
Las matrices en PHP se implementan utilizando tablas hash, lo que significa que el acceso a un valor tiene una complejidad promedio de O (1).
Tipos de arreglos:
· array () constructor: arreglo que se puede declarar usando el array () lenguaje constructor, que generalmente toma la siguiente forma (los elementos entre paréntesis, son opcionales):
array([key =>] value, [key =>] value, ...)
La clave es opcional, y cuando no se especifica, la clave se asigna automáticamente (comenzando con 0). Puede combinar el uso con y sin la clave incluso dentro de la misma declaración. El valor en sí puede ser de cualquier tipo de PHP, incluida una matriz. Las matrices que contienen matrices dan un resultado similar a las matrices multidimensionales en otros lenguajes. A continuación, se incluyen algunos ejemplos:
	
EJEMPLO PRÁCTICO
· array (1, 2, 3) es igual que el array más explícito (0 => 1, 1 => 2, 2➥ => 3).
· array ("nombre" => "Juan", "edad" = > 28). 
· array (1 => "UNO", "DOS", "TRES") es equivalente a la matriz (1 => "UNO", 2 => ➥ "DOS", 3 => "TRES"). 
· array () un array vacío. 
Aquí hay un ejemplo de una declaración de matriz anidada: 
array (array ("nombre" => "Juan", "edad" => 28), array ("nombre" => ➥ "Barbara”, "edad" => 67)) 
El ejemplo anterior muestra una matriz con dos elementos: Cada uno es una colección (matriz) de la información de una persona.
· Se puede acceder a los elementos de Array usando la notación $ arr [clave], donde clave es un entero o una expresión de cadena. Cuando use una cadena constante para clave, debemos asegurarnos de no olvidar las comillas simples o dobles, como $ arr ["clave"]. Esta notación se puede utilizar tanto para leer elementos de una matriz como para modificar o crear nuevos elementos.
· Lectura de valores de matriz: Podemos utilizar la notación $ arr [clave] para leer los valores. A continuación, ejemplos que explicarán mejor la teoría: 
	
EJEMPLO PRÁCTICO
$arr1 = array("nombre" => "Juan”, "edad" => 28);
$arr2["nombre"] = "Juan";
$arr2["edad"] = 28;
if ($arr1 == $arr2) {
 print '$arr1 y $arr2 son iguales' . "\n";
}
 print $arr2["nombre"];
 if ($arr2["edad"] < 35) {
 print " Es muy joven\n"; 
 }
Este ejemplo imprime a Juan es muy joven.
· Acceso a matrices anidadas (o matrices multidimensionales): Al acceder a matrices anidadas, podemos agregar tantos corchetes como sea necesario y así alcanzar el valor relevante. A continuación, te muestro un ejemplo de cómo se pueden identificar matrices anidadas:
	
EJEMPLO PRÁCTICO
array (array ("nombre" => "Juan", "edad" => 28), array ("nombre" => ➥ "Barbara”, "edad" => 67)) 
Podría obtener el mismo resultado con las siguientes afirmaciones: 
$ arr [1] ["nombre"] = "Juan"; 
 $ arr [1] ["edad"] = 28; 
 $ arr [2] ["nombre"] = "Barbara"; 
 $ arr [2] ["edad"] = 67; 
La lectura de un valor de matriz anidada es trivial con la misma notación. Por ejemplo, si deseas imprimir la edad de Juan, la siguiente declaración hace lo siguiente: 
 print $ arr [1] ["edad"];
Constantes 
En PHP, puede definir nombres, llamados constantes, para valores simples. Como su nombre lo indica, no puede cambiar estas constantes una vez que representan un cierto valor. Los nombres de las constantes tienen las mismas reglas que las variables de PHP, excepto que no tienen el signo de dólar inicial. Es una práctica común en muchos lenguajes de programación, incluido PHP, usar letras mayúsculas para nombres de constantes, aunque no es obligatorio. 
	
PARA SABER MÁS
Solo use las constantes que distinguen entre mayúsculas y minúsculas para que sean consistentes con los estándares de codificación aceptados y porque no está claro si las constantes que no distinguen entre mayúsculas y minúsculas continuarán siendo compatibles con versiones futuras de PHP.
A diferencia de las variables, las constantes, una vez definidas, son accesibles globalmente. No debe (y no puede) volver a declararlos en cada nueva función y archivo PHP. Para definir una constante, use la siguiente función:
define ("NOMBRE DE CONSTANTE", valor [, según el caso])
Donde: 
· “NOMBREDE CONSTANTE" es una cadena. 
· valor es cualquier expresión PHP válida, excluyendo matrices y objetos. 
· Según el caso es un valor booleano (verdadero / falso) y es opcional. 
Por defecto, es verdadero.
A continuación, se incluye un ejemplo simple para definir y usar una constante:
	
EJEMPLO PRÁCTICO
define ("SIN_ERROR", 0); 
define ("MI_ERROR", 1); 
... 
if ($ error_code == MI_ERROR) {
print ("Hubo un error \ n");
 }
Operadores
PHP contiene tres tipos de operadores: operadores unarios, operadores binarios y un operador ternario. 
Los operadores binarios se utilizan en dos operandos: 
2 + 3
14 * 3.1415 
$ i - 1 
Estos ejemplos también son ejemplos simples de expresiones. El PHP solo puede realizar operaciones binarias en dos operandos que tienen el mismo tipo. Sin embargo, si los dos operandos tienen tipos diferentes, PHP convierte automáticamente uno de ellos al tipo del otro, de acuerdo con las siguientes reglas (a menos que se indique lo contrario, como en el operador de concatenación).
· Operadores Binarios
· Operadores numéricos: todos los operadores binarios (excepto el operador de concatenación) funcionan solo en operandos numéricos. Si uno o ambos de los operadores son cadenas, booleanos, nulos o recursos, se convierten automáticamente a sus equivalentes numéricos antes de que se realice el cálculo.
	Operador 
	Nombre 
	Valor
	+
	Adición 
	Suma dos o más operandos
	-
	Sustracción 
	Resta dos o más operandos
	*
	Multiplicación 
	Multiplica dos o más operandos
	/
	División 
	Cociente de dos operandos
	%
	Módulo 
	Ambos operandos se convierten en enteros. El resultado es el resto de la división del primer operando por el segundo operando.
Tabla n°8. Operadores numéricos
· Operador de concatenación (.): este operador concatena dos cadenas. El siguiente ejemplo imprimirá "El año es 2000": 
$ anio = 2000; 
print "El año es". $anio; 
El entero $ anio se convierte internamente a la cadena "2000" antes que se coincida con el prefijo de la cadena, "El año es".
· Los operadores de asignación nos permiten escribir un valor en una variable. El primer operador (el que se encuentra a la izquierda del operador de asignación o valor l) debe estar disponible. El valor de una asignación es el valor final asignado a la variable; por ejemplo, la expresión $ var = 5 tiene el valor 5 (y asigna 5 a $ var).
Además del operador de asignación normal =, varios otros operadores de asignación son compuestos de un operador seguido de un signo igual. Estos operadores opuestos aplican el operador que toma la variable de la izquierda como el primer operando y el valor de la derecha (el valor de r) como el segundo operando, y asigna el resultado de la operación a la variable de la izquierda. 
Por ejemplo: 
$ contador + = 2; // Esto es idéntico a $ contador = $ contador + 2; 
$ offset * = $ contador; // Esto es idéntico a $ offset = $ offset * ➥ $ contador; 
La siguiente lista muestra los operadores de asignación compuestos válidos: + =, - =, * =, / =, % =, ^ =, . =, & =, | =, << =, >> =
· Los operadores de comparación nos permiten determinar la relación entre dos operandos. Cuando ambos operandos son cadenas, la comparación se realiza de forma léxico-gráfica. La comparación da como resultado un valor booleano. Para los operadores de comparación siguientes, se realizan conversiones automáticas de tipo, si es necesario.
	Operador 
	Nombre 
	Valor
	==
	Igual a
	Verifica la igualdad entre dos argumentos que realizan conversión de tipo cuando es necesario: 1 == "1" da como resultado verdadero 1 == 1 da como resultado verdadero
	!=
	Diferente 
	Inverso al ==
	>
	Mayor que
	Comprueba si el primer operando es mayor que el segundo
	<
	Menor que
	Comprueba si el primer operando es menor que el segundo
	>=
	Mayor o igual que 
	Comprueba si el primer operando sea mayor o igual que el segundo
	<=
	Menor o igual que
	Comprueba si el primer operando sea menor o igual que el segundo
Tabla n°9. Operadores de comparación
Para los dos operadores siguientes, las conversiones de tipos automáticas no se realizan y, por lo tanto, se comparan tanto los tipos como los valores.
	Operador 
	Nombre 
	Valor
	===
	Idéntico a
	Igual que == pero los tipos de los operandos tienen que coincidir. No se realizan conversiones de tipo automáticas: 1 === "1" da como resultado falso. 1 === 1 resulta en verdadero.
	!==
	No idéntico a 
	Inverso al ===
Tabla n°10. Operadores de comparación de tipos y valores
· Los operadores lógicos primero convierten sus operandos a valores booleanos y luego realizan la comparación respectiva.
	Operador 
	Nombre 
	Valor
	&&, and
	AND lógico
	El resultado de la operación lógica AND entre los dos operandos.
	||, or
	OR lógico
	El resultado de la operación lógica OR entre los dos operandos
	xor
	XOR lógico
	El resultado de la operación lógica XOR entre los dos operandos
Tabla n°11. Operadores lógicos
· Los operadores de negación aparecen antes de su operando, por ejemplo, ! $ Var (! Es el operador, $ var es el operando)
	Operador 
	Nombre 
	Valor
	!
	Negación lógica
	Verdadero si el operando se evalúa como falso. Falso si el operando se evalúa como verdadero.
	~
	Negación Bitwise
	En el caso de una operación numérica, la negación a nivel de bits de su representación a nivel de bits (los valores de punto flotante se convierten primero en números enteros). En el caso de cadenas, una cadena de igual longitud, en la que cada carácter es el bit negación de su carácter correspondiente en la cadena original.
Tabla n°12. Operadores de negación
· Los operadores incrementar / decrementar son únicos en el sentido de que operan solo en variables y no en ningún valor. La razón de esto es que, además de calcular el valor del resultado, el valor de la variable también cambia.
	Operador 
	Nombre 
	Efecto en $var
	Valor de la expresión
	$var++
	Post-incremento
	$ var se incrementa en 1.
	El valor anterior de $ var.
	++$var
	Pre-incremento
	$ var se incrementa en 1.
	El nuevo valor de $ var (incrementado en 1).
	$var--
	Post-decremento
	$ var se decrementa por 1
	El valor anterior de $ var.
	--$var
	Pre-decremento
	$ var se decrementa por 1
	El nuevo valor de $ var (decrementado por 1).
Tabla n°13. Operadores incrementar/decrementar
Estructuras de Control
PHP admite una variedad de las estructuras de control, más comunes y disponibles que en otros lenguajes de programación. Básicamente, se pueden dividir en dos grupos: estructuras de control condicional y estructuras de control de bucle. Las estructuras de control condicionan el flujo del programa y ejecutan u omiten el código según los criterios, mientras que las estructuras del control ejecutan un código arbitrario según el criterio especificado.
· Estructuras de control condicional: Las estructuras de control condicional son cruciales para permitir que nuestro programa tome diferentes caminos de ejecución en función de las decisiones que tome en tiempo de ejecución. PHP soporta las estructuras de control condicional if y switch.
· Sentencias if, su sintaxis es la siguiente.
if (expresión)
	sentencias
elseif (expresión)
	sentencias
…
else
	sentencias
Si las sentencias son las construcciones condicionales más comunes, y existen en la mayoría de los lenguajes de programación. La expresión en la sentencia if se refiere como la expresión de verdad. Si la expresión de verdad evalúa verdadero, la sentencia o la lista de sentencias que se siguen se ejecutan; de lo contrario, no lo son. Puede agregar un condicional else a una sentencia if para ejecutar código solo si todas las expresiones de verdad en la sentencia if se evalúan como falsas:
if ($var >= 50) {
print '$var está en el rango;
} else {
print '$var es inválida';
}
	
· Sentencias Switch, su sintaxis es la siguiente.
switch (expr){
case expr:listado de sentencias
case expr:listado de sentencias
...default:
listado de sentencias
}
Puede usar el constructor de switch para reemplazar ciertas construcciones largas if / elseif. Se le da una expresión y la compara con todas las posibles

Continuar navegando