Servidores web y Java

¿Qué es un servidor web?

Para tener una descripción sencilla de lo que es un servidor web podríamos pensar en ella como una gran computadora que está encendida las 24 horas, los 365 días del año. Esta misma computadora se encarga de almacenar datos que alguien más ya ha ingresado, para que al momento de que nuestro equipo necesite interactuar con esos datos en la web, se le sea permitido.
Entonces el servidor web realiza dos procesos: Almacena los datos que necesitamos, y los procesa para mostrarlos al quien hace la petición.
Estos funcionan mediante la IP del dispositivo que esté realizando la consulta, de esta manera el servidor web sabe a quien enviarle específicamente la información requerida o de quien recibir información.


  • Apache Tomcat:
    Apache Tomcat, un software que cumple la función de servidor web, para brindar soporte a servlets. Este mismo es de código abierto y es desarrollado en Java.
  • GlassFish:
    Este es un servidor que contiene cantidad de aplicaciones para que puedan ser implementadas y usadas por el Usuario que implementa la plataforma JavaEE(Java Enterprise Edition, que es una edición de Java para poder crear aplicaciones para empresas, y que esta sea portable conectada a un servidor, sin importar en que equipo sea ejecutara), es de código abierto, por lo que cualquiera puede aportar a mejorar su código y su funcionamiento.
  • Apache:
    Apache es el servidor web más antiguo y confiable (Según estadísticas el 46% de páginas web funcionan con este servidor). Cumple el funcionamiento como servidor web pero así mismo trae implementados servidores de aplicaciones para realizar los procesos con los datos del mismo.
  • WildFly
    WildFly es un servidor de aplicaciones para funcionamiento con Java, así mismo este implementa el JavaEE, así mismo este por estar escrito en Java y funcionar para el mismo, puede ser ejecutado en cualquier equipo y/o plataforma.

Arquitectura Cliente-Servidor:

La arquitectura Cliente-Servidor se basa en petición y respuesta.
Funciona de la siguiente manera: El cliente hace una petición desde su equipo, está misma es enviadas al servidor por un puerto predeterminado, a lo que el servidor envía una respuesta al cliente.


Tipos de datos Java:

Resultado de imagen para tipos de datos en java


Variables, constantes, identificadores, comentarios:

  • Variables: Las variables dentro de cualquier lenguaje son aquellos valores los cuales (como su nombre lo indica) pueden variar su valor, pueden ser predefinidos pero en el proceso pueden adquirir uno nuevo.
  • Constantes: Las constantes tienen casi el mismo propósito de una variable, con la única diferencia de que el valor que adquiere esta es constante, osease nunca cambia su valor.
  • Identificadores: Los identificadores son aquellos nombres que le asignamos a nuestras variables y/o constantes para un mejor uso. Es recomendado que estos empiecen en letra minúscula, aplicando un camelCase y así mismo que lleven relación con el uso que se le dará a la misma (Ejemplo sería una variable para almacenar direcciones podría tener el identificador de direccion.
  • Comentarios: Los comentarios son aquellas lineas que nuestro programa no ejecutará, solamente son lineas que pueden tener múltiples usos; el más común de ellos es para explicar el funcionamiento de cierta linea de código, señalar algún factor importante, que función desarrollará determinado método, etc.

Operadores:
Resultado de imagen para operadores java

Clases para manejo de Fechas en Java:

Java.util.Date: Esta clase nos permite tomar una fecha especifica con una presición de milisegundos, o sea no solo almacena una cadena de tipo DD/MM/YY si no permite tomar los milisegundos de esa misma fecha.

Java.sql.Date: Esta clase hereda de Java.util.Date y nos sirve para trabajar y obtener los campos de tipo fecha en bases de datos, puede que estas vengan con horas o solamente el formato DD/MM/YY.
Otra de las diferencias es que esta clase solo muestra la fecha en el formato anterior, mientas que la Date muestra los milisegundos utilizados.



Funciones para manejo de Cadenas

Una cadena es una secuencia de caracteres. Los programas siempre utilizan este tipo de cadenas.
En otras palabras una cadena es un texto. Este paquete de Java incluye dos tipos de clases
Las String y las StringBuffer.

La clase String la utilizamos cuando hacemos uso de cadenas que no pueden cambiar su valor
La clase StringBuffer la utilizamos para cadenas de las cuales queremos o vamos a necesitar cambiar su valor.


Funciones matemáticas:



Funciones de la clase Math completas:
https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html

Estructuras selectivas:

Las estructuras controlan el comportamiento de un método o programa, a su vez que no son útiles para combinar instrucciones o sentencias individuales en una simple expresión lógica con un principio y un fin. Entre estas sentencias tenemos:


  • If
  • If-else
  • If-else anidadas
  • Switch



Sentencia IF
La sentencia If tiene el siguiente formato o sintaxis:

If(condicion) accion;


Aquí se evalúa la condición entre paréntesis que viene después de if si la condición lógica es verdadera, ejecuta la acción siguiente en caso contrario no la ejecuta.

SENTENCIA IF-ELSE
Una segunda manera de emplear la sentencia if es la siguiente:
if (expresión) 
                                                                      sentencia1
                                                                      else
                                                                      sentencia2

Aquí se evalúa a expresión, si expresión es verdadera, se ejecuta sentencia1 y en caso contrario se ejecuta sentencia2


IF-ELSE ANIDADAS

Una sentencia if es anidada cuando la sentencia de la rama verdadera o falsa es a su vez también
 un if, es decir, cuando dentro de un if ó un else hay otro if su sintaxis es la siguiente:

if (expresión1) 
                                                                     sentencia1; 
                                                                    else if (expresión2) 
                                                                    sentencia2; 
                                                                    …………..else if (expresiónx)
                                                                    sentenciax


Estructura de control (Ciclicas):

Estas estructuras nos permiten realizar la repetición o ejecución de una o varias instrucciones un número ya sea conocido o no conocido de veces. En java existen tres tipos de estructuras cíclicas:

  • For
  • While
  • For each
Estructura cíclica for
Esta es conocida como un ciclo con duración conocida, cual puede ser fijada plenamente por el programador. Su sintaxis es la siguiente:

If(valorInicial;Condición;Incremento/Decremento){



Estructura cíclica while

Es una estructura de repetición en la cual el número de repeticiones, o tiempo de duración es desconocido, la terminación de dicho ciclo depende de la expresión lógica, una forma en como se comporta dicha estructura es mientras la expresión lógica es verdadera se ejecutan todas las instrucciones internas. Al menos visualizaremos 2 casos:

a)
int i=0;
while(i<'limite){
instrucción(es);
i++;
}

b)
int resp=0;
while(resp==0){
intruccion(es);
System.out.println("Para continuar pulsa 0");
resp=Integer.parseInt(entrada.readLine());
}

Ciclo For-Each

La segunda forma de for implementa un ciclo de estilo “for-each”(para cada uno). Un bucle for-each recorre una colección de objetos, como una matriz, de forma estrictamente secuencial, de principio a fin. En los últimos años, el estilo de bucle for-each ha ganado popularidad entre los diseñadores de lenguaje y programadores. Originalmente, Java no ofrecía un bucle de estilo for-each. Sin embargo, con el lanzamiento de JDK 5, el bucle for se mejoró para proporcionar esta opción.



Manejo de excepciones:

Instrucción Try - Catch
Cuando sabemos que un código podría lanzar un error, como por ejemplo una división entre cero, debemos encerrarla entre un bloque try-catch. Veamos un ejemplo:

int a = 5 / 0;
esta linea nos lanzaría la siguiente excepción:
Exception in thread "main" java.lang.ArithmeticException: / by zero

Si en cambio atrapamos esta excepción podremos controlarla:

try{
    int a = 5 / 0;
}catch(ArithmeticException err){
    int a = 0;
}

El Bloque Finally
Finally se utiliza cuando el programador solicita ciertos recursos al sistema que se deben liberar, y se coloca después del último bloque catch. Veamos un ejemplo en el que intentamos leer un archivo:

FileReader lector = null;
try {
    lector = new FileReader("archivo.txt");
    int i=0;
    while(i != -1){
        i = lector.read();
        System.out.println((char) i );
    }
} catch (IOException e) {
    System.out.println("Error");
} finally {
    if(lector != null){
            lector.close();
    }
}

el código contenido en finally se ejecutará tras terminar el bloque try, haya habido o no excepción, lo que permite liberar los recursos reservados para abrir el archivo. (Más sobre finally en la documentación de Oracle)

La Cláusula Throws
Esta cláusula advierte de las excepciones que podría lanzar un método, van entre la declaración del método y su cuerpo (pueden ser varias), así:

public static void metodo() throws ArithmeticException{
    try{
        int a = 5 / 0;
    }catch(ArithmeticException err){
        int a = 0;
    }
}

La palabra clave throw
throw nos permite lanzar una excepción propia, esto lo veremos en el siguiente ejemplo en el que aprovechamos para englobar todo lo visto aquí:

public static void main(String[] args) {
    int a;
    try{
        a = dividir(5,0);
    }catch(MalNumeroADividir err){
        System.out.println(err);
    }finally{
        a = 0;
    }
    System.out.println("Valor de a = "+a);
}

public static int dividir(int a, int b)throws MalNumeroADividir{
    if(b == 0){
        throw new MalNumeroADividir();
    }
    return a / b;
}

public static class MalNumeroADividir extends Exception {
    MalNumeroADividir() {
       super("No es posible dividir entre cero");
   }
}

¿Para qué sirven los filtros en Java Servlet?

Los filtros son clases Java que nos permiten interceptar una petición y modificarla antes de que sea procesada por el Servlet, o interceptar una respuesta antes que que la misma sea enviada al cliente, para crear estas clases es necesario implementar la interface javax.servlet.Filter, la cual define los siguientes tres métodos que debemos implementar:

init(FilterConfig cfg). Es invocado por el contenedor una vez que el filtro entra en funcionamiento.
destroy(). Este método lo llama el contenedor cuando el filtro de Servlet deja de funcionar.
doFilter(ServletRequest req, ServletResponse res, FilterChain chain). El contenedor llama a este método para cada solicitud de Servlet correlacionada con este filtro antes de invocar el Servlet. El Servlet original solicitado se ejecuta cuando el filtro llama al método chain.doFilter(...).

Diagrama básico de funcionamiento de un filtro.


No hay comentarios.:

Publicar un comentario