Entradas

Mostrando entradas de junio, 2013

JSF. 2 Crear Proyecto

Imagen
Creación de un proyecto web JSF en Netbeans.
New ProjectCategories: Java Web,Projects: Web Application. Click Next.
Escribimos el nombre del proyecto y seleccionamos su ubicación. Click Next.
Seleccionamos el servidor y la versión de Java EE a utilizar. Click Next. En la pestaña Frameworks activamos el Java Server Faces, esto hace que nos aparezcan tres pestañas de configuración: Libraries: la versión de JSF a utilizar.
Configuration: la ruta para acceder al servlet faces y que tipo de páginas utilizaremos en el proyecto: facelest (XHTML) o JSP.
Components: componentes específicos para utilizar.
No tocamos nada y Click Finish.
También puede crearse un proyecto maven:
New ProjectCategories: Maven,Projects: Web Application. Click Next.
Escribimos el nombre del proyecto y seleccionamos su ubicación. Click Next.
Seleccionamos el servidor y la versión de Java EE a utilizar. Click Finish. Botón derecho sobre el proyecto → Properties. En la pestaña Frameworks pulsamos Add y…

JSF. 1 Introducción

JSF (JavaServer Faces) es un framework basado en el patrón MVC que hace que la creación de aplicaciones web sea más fácil y sencillo, pretende normalizar y estandarizar el desarrollo de aplicaciones web.

La programación en JSF es mucho más cercana al estilo de Java Swing (escritorio), la programación de la interfaz se hace a través de componentes y está basada en eventos.

Una de las grandes ventajas de la tecnología JSF es que ofrece una clara separación entre el comportamiento y la presentación, además incluye una librería de etiquetas JSP personalizadas para crear la interfaz de usuario.

Existen algunas extensiones de componentes como PrimeFaces, ICEFaces, RichFaces. Estas extensiones agregan una serie de componentes nuevos con nuevas funcionalidades que complementan a JSF.

JSP. 26 Ejemplo MVC simple

Creamos un proyecto nuevo. Por motivos de seguridad colocaremos las páginas dentro de la carpeta WEB-INF. Todas las páginas serán *.jsp, pero en la navegación de la aplicación (URL) trabajaremos con *.htm. Esto lo indicaremos en el archivo web.xml, podemos crear el archivo web.xml individualmente o cuando creemos el Servlet Controlador indicando en el campo URL Pattern: *.htm.

Al crear el servlet con el asistente de Netbeans indicamos que añada la información al archivo web.xml e indicamos en su URL Patter: *htm. Esto hará que las peticiones que a nosotros nos interesan (todas las acabadas en *.htm) pasen todas por Servlet.

El archivo web.xml quedará
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3…

JSP. 25 Modelos de construcción de una aplicación web

Imagen
Modelo 1 La forma más simple de separar presentación y la lógica, es mover la mayor parte de la lógica de la aplicación desde JSP a clases Java, por ejemplo JavaBeans. Estos JavaBeans pueden ser usados dentro de JSP de forma fácil.

Es un método centrado en páginas, el flujo de navegación es gestionado por componentes web individuales. Pueden darse problemas de mantenimiento, ya que al introducir modificaciones el flujo de navegación está repartido entre distintas páginas y no concentrado en un único componente.

Un ejemplo de este modelo sería cualquier proyecto web Java que solo utilice páginas JSP y no haga uso de servlet.

Modelo 2 A la hora de construir aplicaciones con modelo 2 se hace uso del patrón de diseño Model-View-Controller (MVC). Los flujos de navegación se gestionan mediante un controlador y una serie de archivos de configuración que deciden en cada petición que página debe devolverse como respuesta.

Model-View-Controller divide el sistema en:
Model (modelo): capa de neg…

Java. Métodos con argumentos variables. Varargs.

Descripción Para utilizarlo el argumento del método se declara como Tipo..., indica que el número de parámetros de ese tipo es variable. Si se quiere un número de argumentos sin determinar de tipo cadena: String...

Ejemplo:
/** * Número de parámetros variable en métodos. */ private static void varargs() { hacerAlgo("uno"); hacerAlgo("dos", "tres"); hacerAlgo("cuatro", "cinco", "seis"); hacerAlgo(Color.BLUE); } private static <T> void hacerAlgo(T... cads) { System.out.println("Inicio método..."); for (int i = 0; i < cads.length; i++) { System.out.println("\tParámetro: "+cads[i]); System.out.println("\tTipo: "+cads[i].getClass()); } System.out.println("Fin método"); }
Resultado es:
Inicio método... Parámetro: uno Tipo: class java.lang.String Fin método Inicio método... Parámetro: dos Tipo: class java.lang.String Paráme…

Java. Genéricos

Descripción Permiten utilizar tipos concretos en tiempo de compilación con clases que trabajan con tipos arbitrarios. Las clases genéricas tienen tipos parametrizados y el tipo parametrizado se sustituye por un tipo específico. Una vez definido el tipo, la instancia creada solo trabaja con el tipo establecido.

Definición de la interface List:
public interface List<E> extends Collection<E> Definición de la clase ArrayList:
public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable Definición de la interface Map:
public interface Map<K,V> Definición de la clase HashMap:
public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable Ejemplo con List y Map:
// Declarar una lista sin tipo genérico List lista1 = new ArrayList(); // Al añadir objetos a la lista ella acepta objetos Objetc // Declarar una lista con un tipo específico …

Java. Aserciones (assert)

Descripción Las aserciones son sentencias que comprueban si una condición se cumple o no. Por defecto están desactivadas, para activarlas hace falta añadir -ea (enable asserts) al ejecutar el programa java -ea nombrePrograma o habilitar en el IDE con -ea.

Activar assert en Netbeans:
Botón derecho sobre el proyecto → Properties.Categories: Run.VM Options: -ea
Su sintaxis es:
assert condiciónBooleana : [expresión] condiciónBooleana es obligatoria y expresión es opcional.
Si condiciónBooleana:
true, todo correcto.false, muestra un error y si expresión está definida la muestra.
Ejemplo:
int x = 0; //assert x == 1; assert x == 1 : "x=" + x;
Resultado de assert x == 1 : "x=" + x; es:
Exception in thread "main" java.lang.AssertionError: x=0 ...
Utilidad Permiten obtener información sobre determinadas condiciones que el programador quiere inspeccionar. No se utilizan para comprobar todo el código, sino solo ciertas condiciones. Además no hace falta quitarlas y…

Java 7. Sintaxis diamante

Descripción Al hacer uso de genéricos, por ejemplo al trabajar con listas e indicar el tipo del objeto a usar.

Antes:
List<string> lista = new ArrayList<string>(); Ahora:
List<string> lista = new ArrayList<>();
Tiene sentido, ya que si el lado izquierdo del igual es el que define el tipo del objeto a utilizar, para que repetirlo en el lado derecho del igual.

Utilidad El programador escribe menos código.

Java 7. try-catch AutoCloseable

Descripción En Java 7 podemos hacer uso de bloques try-catch sin necesidad de escribir código destinado a cerrar flujos.

Ejemplo:
String fileName = "miFile.txt"; String fileOut = "fileOut.txt"; // Copiar un archivo en otro try (OutputStream os = new FileOutputStream(fileOut); InputStream is = new FileInputStream(fileName);) { byte[] buf = new byte[4096]; int len; while ((len = is.read(buf)) > 0) { os.write(buf, 0, len); } } catch (IOException ex) { Logger.getLogger(App.class.getName()).log(Level.SEVERE, "tryCatch() : copiar archivo", ex); }
Hay que tener en cuenta que no todo el código se cerrará bien, por ejemplo:
// El siguiente código no se cerrará bien, ya que uno de los // objetos (FileReader) no se almacena en una variable. try (BufferedReader br = new BufferedReader(new FileReader(fileName));) { String line; while ((line = br.readLine()) != null) { System.out.println(line); } …

Java 7. Excepciones multicatch

Descripción Utilización de | para separar entre excepciones.

Utilidad Agrupar excepciones bajo un solo control de excepción.

Ejemplo:
try { ... } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException | ClassNotFoundException ex) { }

Java 7. Uso de cadenas en switch

En Java 7 puede hacerse uso de switch con cadenas, antes solo se podían usar números.

Ejemplo:
public void imprimirMensaje(String dia) { switch (dia) { case "Lunes": System.out.println("Hoy es Lunes."); break; case "Martes": System.out.println("Hoy es Martes."); break; case "Miercoles": System.out.println("Hoy es Miercoles."); break; case "Jueves": System.out.println("Hoy es Jueves."); break; case "Viernes": System.out.println("Hoy es Viernes."); break; } }

JSP. 24 Ejemplo, obtener parámetros definidos en web.xml

Creamos un proyecto web maven nuevo. Creamos 2 servlet añadiendo su información al archivo web.xml. Creamos un servlet con parámetros de inicialización y lo añadimos al web.xml. Netbeans nos facilita el trabajo con el archivo web.xml. Abrimos web.xml, en la pestaña General hacemos click en Context Parameters y añadimos un parámetro cualquiera y su valor. Si pulsamos la pestaña Source debería verse algo tal que así: <?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0"           xmlns="http://java.sun.com/xml/ns/javaee"           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"           xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">     <context-param>         <param-name>iniParam1</param-name>         <param-value>valor iniParam1</param-value>     </context-param>     <servlet>         <servl…

JSP. 23 Ejemplo, Servlet definido en web.xml

En el proyecto actual o en uno nuevo vamos a creamos un Servlet: New File. Categories: Web, File Types: Servlet. Click Next. Class Name: DisplayServlet, Package: donde queramos que se cree. Click Next. Seleccionamos Add information to deployment descriptor (web.xml). Servlet Name: DisplayServlet URL Pattern(s): /display/*
El archivo WEB-INF/web.xml quedaría: <?xml version="1.0" encoding="UTF-8"?><web-appversion="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<servlet>
<servlet-name>DisplayServlet</servlet-name>
<servlet-class>com.me.jsp.servlets.DisplayServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DisplayServlet</servlet-name>
<url-pattern>/display/*</url-pattern>
</servlet-mappi…

JSP. 22 Archivo web.xml

Una aplicación web puede estar formada por: Servlets. Páginas JSP. JavaBeans y clases de utilidades. Documentos estáticos (html, imágenes, sonido, etc).
Existe una estructura de carpetas en la construcción de aplicaciones web Java: WEB-INF/web.xml. Archivo de implementación, que proporciona información de configuración relativa a la aplicación. WEB-INF/classes. Esta carpeta incluye servlets, JavaBeans y clases de utilidad en forma de archivos compilados .class. WEB-INF/lib. Contiene ficheros JAR. Librerías a utilizar.
El archivo web.xml: Parámetros de inicialización. Pueden ser utilizados por el programador para transmitir información de configuración. Esta información se puede incluir en la etiqueta . Configuración de sesión. El elemento define los parámetros de sesión de la aplicación web. Por ejemplo, el tiempo de duración de la sesión. Definiciones de Servlet/JSP. Mediante se pueden definir los servlets a utilizar, el nombre y la clase que lo implementa. Asignaciones S…