Mostrando entradas con la etiqueta JAVA. Mostrar todas las entradas
Mostrando entradas con la etiqueta JAVA. Mostrar todas las entradas

domingo, 4 de abril de 2010

Expresiones regulares Uso en JAVA

Nuevamente Fabian Castro ha escrito un nuevo tutorial en su blog sobre expresiones regulares aplicado a JAVA, gracias a su infinita entrega y benevolencia me permitió colgarlo en este blog como recopilación de información.

JAVA + Expresiones regulares; lo prometido es deuda (eso es lo que enseñan los abuelos), en este post implementaremos las expresiones regulares en JAVA, la verdad es fácil, claro si ya sabemos cómo funcionan.


--


Expresiones regulares Uso en JAVA

JAVA + Expresiones regulares; lo prometido es deuda (eso es lo que enseñan los abuelos), en este post implementaremos las expresiones regulares en JAVA, la verdad es fácil, claro si ya sabemos cómo funcionan.

JAVA nos ofrece un paquete especial para el manejo de expresiones regulares el cual es
java.until.regex presentándose dos clases: Pattern y Matcher donde dichas clases son finales (final) y con método constructor privado (Private) por ende no se puede crear Objetos ni heredar de dichas clases… ¿Cómo?!! ¿No puedo crear objetos de estas clases? No, no puedes crear objetos ni heredar de estas clases, ahí es donde uno dice “que clases tan inservibles” pero no es así porque al no poder heredar de ellas no se pueden modificar sus funciones y así las clases sirven para lo que fueron hechas, además al no poder crear objetos ellas nos entregan un objeto estándar para la clasificación y uso de las Expresiones regulares.

Muy bien la clase
Pattern tiene un método que es: compile(String regex), este método recibe como parámetro un String el cual es la expresión regular con la que queremos validar nuestros datos, dicho método nos devuelve un objeto estándar de la clase Pattern usándolo de la manera que queramos.

Después de tener el objeto de la clase
Pattern, que es el que nos ayudara a contener el patrón, necesitamos la clase Matcher este compara los datos contra la expresión regular, para obtener el objeto de dicha clase se usa el método matcher(CharSequence input) cuyo parámetro es en pocas palabras un String el cual es el dato que se quiere validar, al tener ya el objeto que valida el patrón contra el dato, podemos usarlo de cualquier forma, para identificar si el dato coincide con el patrón se usa el método .find() que retorna un booleano pero dicho método se entiende mejor en la práctica.

Nota: el siguiente ejemplo esta desarrollado en Netbeans 6.8, los archivos podrán ser descargados en formato .java y en proyecto Netbeans.

El ejemplo está basado en la validación de un correo electrónico, creare un formulario JAVA (JFrame) el cual contendrá un campo de texto y un botón; no me extenderé mucho con la creación de botones y campos de texto dentro del formulario la idea principal es entender cómo se implementan las expresiones regulares, en un próximo tutorial profundizaremos sobre la interfaz grafica en java; para la creación del formulario usaremos el siguiente fragmento de código:


import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.regex.*;
import javax.swing.*;

public class Main extends JFrame {

JTextField texto;
JButton boton;

public Main(){
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setLayout(null);
this.setLocation(200, 200);
this.setSize(225,100);
texto = new JTextField();
texto.setLocation(10, 10);
texto.setSize(200, 20);
this.add(texto);
boton = new JButton();
boton.setLocation(60, 30);
boton.setSize(100, 30);
boton.setText("Validar");
boton.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
validar(texto.getText());
}
});

this.add(boton);
}

private void validar(String dato){
}

public static void main(String[] args) {
new Main().setVisible(true);
}

}

Lo que nos interesa es que al pulsar el botón se ejecutara el método validar(String dato), en este momento dicho método se encuentra vacio, así que le daremos el código de la validación para que el método quede así:

private void validar(String dato){
Pattern pat = Pattern.compile("^[a-zA-Z0-9_-]{2,}@[a-zA-Z0-9_-]{2,}\\.[a-zA-Z]{2,4}(\\.[a-zA-Z]{2,4})?$");
Matcher mat = pat.matcher(dato);
if(mat.find()){
JOptionPane.showMessageDialog(null, "el texto escrito es un correo");
}else{
JOptionPane.showMessageDialog(null, "el texto escrito NO! es un correo");
}
}



Si señores la expresión regular que esta hay valida un correo, casualmente es la misma que usamos para el tutorial anterior y ahora expliquemos línea por línea:


Pattern pat = Pattern.compile("^[a-zA-Z0-9_-]{2,}@[a-zA-Z0-9_-]{2,}\\.[a-zA-Z]{2,4}(\\.[a-zA-Z]{2,4})?$");


Esta Línea de código Activa el patrón a usar; es decir compila la expresión regular para poderla usar.

Matcher mat = pat.matcher(dato);


Esta línea de código crea el objeto de la clase
Matcher para comparar el patrón con el dato que queremos validar, pero para que eso ocurra debemos usar el método find() de dicha clase así:

if(mat.find()){
JOptionPane.showMessageDialog(null, "el texto escrito es un correo");
}else{
JOptionPane.showMessageDialog(null, "el texto escrito NO! es un correo");
}


El método find() devuelve un booleano el cual es verdadero si el dato coincide con el patrón y un false en caso contrario.

Este es el Final del Tutorial, espero haya sido de gran utilidad para ud's y pronto tutoriales de como crear interfaz gráfica en JAVA

DESCARGABLES

Proyecto NEtBeans 6.8

Archivos .JAVA

Archivo ejecutable .JAR


Leer más...

martes, 30 de marzo de 2010

Flex y JAVA con BlazeDS

Uno de los grandes enemigos de Flex, es su “imposibilidad” para acceder directamente a las bases de datos o al disco duro de usuario cuando se utiliza en entornos web (SWF), por lo que siempre es necesario utilizar lenguajes diferentes del lado del servidor, lenguajes como JSP, PHP, ASP, ColdFusion entre otros, y en la mayoría de las oportunidades se hace por medio de archivos XML, que para iniciar son muy buenos, pero cuando se manejan grandes volúmenes de datos, es necesario manejar herramientas más poderosas, por eso es que vamos a trabajar con BlazeDS, como puente entre Flex y JAVA.

imagen Flex y JAVA



--

Antes de empezar, tenemos que definir que es BlazeDS, y porque debemos trabajar con él.

BlazeDS: es un servidor remoto, hecho con JAVA para la interacción entre los lenguajes ActionScript 3.0 y JAVA, sirve como un puente de comunicación que se encarga de “traducir” de un lenguaje a otro, para que la interacción entre lenguajes y tecnologías sea transparente y no sea necesario hacer trucos raros a la hora de enviar información de una lado para otro.

¿Cómo empiezo? Es fácil (no me pareció tan fácil al comienzo, sufrimos mucho con unos aprendices para lograrlo, pero esto es para que no le pase a los demás…muchos soldados murieron en la guerra solo para que TU, si TU puedas hacer las cosas sin dificultades, lo menos que puedes hacer es al final de esto dejar tus comentarios!... ese fue el último deseo de los caídos en guerra), primero que todo debes ir a la página de proyectos de código abierto de Adobe, donde encontraras información del SDK de Flex, del proyecto BlazeDS y el proyecto Tamarin, que es un proyecto en conjunto con Mozilla Foundation para el manejo del estándar ECMAScript para el lenguaje ActionScript 3.

Lógicamente debemos ir al link de BlazeDS, donde se encuentra una leve descripción de la herramienta, el link de descarga de los archivos ejecutables y del código fuente del proyecto. Después de presionar donde dice Download BlazeDS now, iremos a la página de detalles de la descarga, donde se explican los términos de uso y nuevas posibilidades para descargar buscamos la primera opción (Release Builds), esto nos lleva a una nueva página donde debemos descargar el BlazeDS Turnkey.

Es un archivo .ZIP que contiene una serie de carpetas y archivos, .WAR, estos últimos archivos, son aplicaciones que nos permiten ver ejemplos de prueba, una consola para el monitoreo de nuestros proyectos y el BlazeDS que cuenta con el código que debemos utilizar para crear los proyectos, sin embargo no vamos a utilizar estos archivos.

Antes de empezar recomiendo crear una copia de seguridad del paquete que descargamos, ya que por efecto de las pruebas varios de esos archivos se pueden dañar.

Después de hacer la copia de seguridad vamos a la carpeta Tomcat, que contiene las carpetas habituales dentro de un Servidor Tomcat Instalado, la idea de este paquete, es instalarlo ya que tiene incorporadas todas las herramientas de BlazeDS sin embargo en ocasiones esto resulta muy dispendioso y genera muchos problemas, así que no vamos a utilizar este tomcat sino que vamos a utilizar uno instalado con el instalador del tomcat que se puede encontrar en su sitio web.

Nota: a la hora de instalar el apache tomcat, recuerda poner usuario y contraseña, preferiblemente admin, admin, ya que es la configuración más utilizada.

Dentro de la carpeta Tomcat que estábamos viendo, vamos a ir a esta ruta: Tomcat/webapps/samples/ en ella encontraremos todos los ejemplos que vienen con este paquete y dos carpetas muy comunes de los proyectos WEB de java, encontramos la carpeta WEB-INF y META-INF, ahora copiamos la carpeta WEB-INF y la pegamos en una nueva carpeta, que puede estar en cualquier sitio dentro de nuestro sistema de archivos, recomiendo poner una carpeta llamada con el nombre de nuestro proyecto, luego una nueva carpeta con el mismo nombre, que es donde vamos a almacenar el código del proyecto y dentro de esa carpeta ponemos la carpeta WEB-INF que acabamos de copiar.

En este caso voy a trabajar con esta ruta: D:/TestBlazeDS/TestBlazeDS

Para la carpeta WEB-INF esta: D:/TestBlazeDS/TestBlazeDS/WEB-INF

Además de eso debemos crear una carpeta para las páginas así: D:/TestBlazeDS/TestBlazeDS/WebPages

Ahora abrimos el IDE Netbeans, también es posible hacerlo con Eclipse o el IDE de desarrollo que utilicen para JAVA, primero que todo debemos crear un nuevo proyecto de JAVA de esta manera:

En Netbeans, Proyecto Nuevo, en categorías seleccionamos JAVA Web y en los tipos de proyectos, ponemos la opción Aplicación Web con código existente (Web Application with existing sources), siguiente.

En la siguiente ventana: Nombre y Ubicación, dejamos los valores de este modo:

Location: Se busca la carpeta que creamos dentro del disco D en mi caso

D:\ TestBlazeDS\ TestBlazeDS

Project name: Es el nombre de nuestro proyecto, podemos poner cualquier nombre, sin embargo es preferible manejar el nombre de la carpeta.

TestBlazeDS

Project folder: Es la misma ubicación del proyecto.

D:\ TestBlazeDS\ TestBlazeDS

Presionamos siguiente, ahora se deben poner los valores del nuevo servidor.

La última ventana de configuración del proyecto es quizás la más importante, debemos dejarla de esta manera:

Web Pages Folder: D:/TestBlazeDS/TestBlazeDS/WebPages

WEB-INF content: D:/TestBlazeDS/TestBlazeDS/WebPages/WEB-INF – Se debe especificar la carpeta WEB-INF que habíamos copiado hace un rato.

Libraries Folder: D:/TestBlazeDS/TestBlazeDS/WebPages/WEB-INF/lib – Se especifica la ubicación de las librerías, que se encuentran dentro de la carpeta WEB-INF.

Source Package Folders: D:/TestBlazeDS/TestBlazeDS/WebPages/WEB-INF/src -- Se indica la ubicación del código de nuestro proyecto, debe ser la carpeta src.

Presionamos terminar y ahora creamos un nuevo paquete llamado Test y una clase de prueba donde debemos crear un método simple que retorno un valor sin recibir parámetros y otro que reciba parámetros y retorne un dato.

clase Prueba con métodos

Tenemos dos métodos, el primero retorna un String y el segundo recibe un par de enteros y devuelve la suma de los dos.

Al tener los métodos listos, ahora debemos registrar la clase en un archivo de configuración. El archivo se encuentra en WEB-INF/flex/remoting-config.xml, al abrirlo debemos ir al final del archivo, antes del último nodo y poner esto:

Nodos destination

Nota: No olviden poner el atributo id para el primer nodo.

Finalmente en el archivo web.xml que se encuentra dentro de la carpeta Configuration Files, debemos poner esto al final, y antes del último nodo:

Configuración de web.xml

Limpiamos y construimos el proyecto y lo cargamos en el Tomcat, por medio del archivo .WAR que se crea cuando seleccionamos la opción Clean And Build, este es todo el proyecto por parte de JAVA.

Ahora, abrimos Flash Builder 4 (con respecto a Flex Builder 3 no hay muchos cambios) y creamos un nuevo proyecto WEB y en la opción de tecnologías del servidor, seleccionamos J2EE, Use remote object Access service y seleccionamos BlazeDS.

Presionamos siguiente y ahora debemos configurar la información del servidor de esta manera:

En Root Folder: C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\TestBlazeDS

En Root URL: http://localhost:8080/TestBlazeDS/

Context Root:/TestBlazeDS/

Cuando hacemos esta configuración, debemos presionar el botón Validate Configuration, que evalúa si la información es adecuada y si se puede hacer la conexión, en la parte inferior el campo Output Folder, debe quedar asi:

C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\TestBlazeDS\TestBlazeF-debug

Presionamos finalizar ya que no vamos a añadir librerias al proyecto y creamos un formulario de esta manera:


formulario Flash Builderr 4

RemoteObject, es el encargado de generar la conexión entre JAVA y Flex, y el atributo destination debe llamarse igual a como está en la configuración de JAVA. finalmente agregamos el código:


El método init() se llama desde la propiedad applicationComplete de la etiqueta Application, el método saludar() es llamado por el evento click del botón saludar y el método sumar() es llamado por el botón sumar.

Esto es TODO, realmente es solo un poco comparado con todo lo que permite hacer BlazeDS, en un próximo tutorial mostraré como enviar objetos entre clases, y manejar vectores de JAVA como proveedores de datos para controles de Flex.

Espero que les sirva, y dejen sus comentarios!
------

Leer más...

sábado, 27 de marzo de 2010

Expresiones Regulares

Fabian Castro probablemente familiar y quizás el sobrino favorito de Fidel el amable Castro, escribió un tutorial muy interesante en su blog sobre el manejo de expresiones regulares y después de horas y horas de ruegos, sobornos, calumnias y finalmente de secuestrar a su hermano y empezar a enviarle uno a uno los dedos de las manos y los pies en sobres de manila, aceptó que lo copiara y pegara en este blog como un articulo escrito por mi pero que tiene toda la autoría de él.

^[a-zA-Z0-9_-]{2,}@[a-zA-Z0-9_-]{2,}\.[a-zA-Z]{2,4}(\.[a-zA-Z]{2,4})?$ ¿Alguna vez han visto algo como esto? Tal vez en las clases de matemáticas o calculo algebraico ya que esto parece una fórmula matemática o física, o algo así, que solo lo entendería un ingeniero de la NASA (¿porque siempre ellos son los mejores?), pero no amigos esto es una expresión regular una sección de código universal que se usa en los buscadores de palabras o simplemente en una validación de datos, pero ¿cómo que validación de datos? Si eso se puede hacer contra una Base de datos y ya!, pero la verdad amigos del conocimiento eso gasta mucho recurso de sistema y además es tedioso para el usuario final de alguno de nuestros programas, por ejemplo datos como correos, teléfonos, celulares, direcciones entre otros datos que tienen una estructura definida o estándar.

Banner, expresiones regulares


--
por ejemplo:
• Un correo siempre tendrá un símbolo
@ en la mitad del correo
• Un Teléfono sea fijo o celular siempre serán números
Eso por mencionar algunos, esos datos se pueden validar en el lado del usuario, solo con unas pocas líneas de código en cualquier lenguaje de programación.

La mayoría por no decir todos los lenguajes de programación soportan expresiones regulares entre ellos están:
• JAVA
• .Net Framework
• javaScript
• PHP
• Pyton
• Pealr
• ActionScript 3 (AS3)

Las expresiones regulares o también llamados patrones nos sirven como ya mencionamos para validar datos, pero para ello usan una estructura estándar para realizar las validaciones por ejemplo en
^[a-zA-Z0-9_-]{2,}@[a-zA-Z0-9_-]{2,}\.[a-zA-Z]{2,4}(\.[a-zA-Z]{2,4})?$ cada símbolo representa algo y sirve para algo dentro de la cadena expliquemos primero los símbolos básicos como son :
^ : representa el inicio de la cadena, eso quiere decir que el dato a validar debe empezar por el carácter o grupo de caracteres inmediatamente siguiente
$ : representa el fin de la cadena, es decir que el dato a validar debe terminar en el carácter o grupo de caracteres inmediatamente anterior
[] : representa un grupo de meta-caracteres, es decir un rango de caracteres por ejemplo [a-z] representa que solo habrán letras en minúscula mientras que [A-Z] representaría letras en mayúscula, dentro de ellos se pueden colocar varios rangos y el los validara igual por ejemplo [a-zA-Z0-9_-] representa todas las letras ya sean mayúsculas o minúsculas y todos los números del 1 al 9 además de ellos acepta los caracteres de línea(-) y línea baja(_).
{} : representa un cuantificador de valor, es decir que el carácter inmediatamente anterior solo se repetirá sienta cantidad de veces por ejemplo A{3} quiere decir que la letra A mayúscula se repetirá 3 veces ni más ni menos, mientras A{2,} representara que la letra A se repetirá mínimo 2 veces máximo infinito, y A{2,5} representa que la letra A mayúscula se repetirá entre 2 a 5 veces
(): representa un grupo de caracteres especifico por ejemplo (a|b|c)al quiere decir que la palabra tiene que empezar en a, b o c siendo validas aal, bal y cal ya que b y c están en el grupo de caracteres
| : representa una decisión de OR en los grupos de caracteres. Solo se aplica en paréntesis ()
\ : representa el escape de un carácter: es decir que encuentre ese carácter en especifico, por ejemplo si queremos que nuestra expresión regular encuentre cadenas que contengan {} o [] tendríamos que colocarlas asi \{\} \[\] ya que [] y {} son usados por las expresiones regulares en los patrones creados.
? : Es un cuantificador que dice que el carácter o grupo de caracteres inmediatamente anterior puede aparecer cero (0) o una (1) vez en la cadena
* : es un cuantificador que dice que el carácter o grupo de caracteres inmediatamente anterior se repite de cero (0) a muchas veces
+ : es un cuantificador que dice que el carácter o grupo de caracteres inmediatamente anterior se repite de una(1) a muchas veces

Estos son los símbolos más importantes en la creación de expresiones regulares y los más usados por ende.

Ya que sabemos cuál es la utilidad de cada simbolito ahora si expliquemos que hace y como lo hace nuestra expresión regular :
^[a-zA-Z0-9_-]{2,}@[a-zA-Z0-9_-]{2,}\.[a-zA-Z]{2,4}(\.[a-zA-Z]{2,4})?$

cojamos parte por parte de la expresión y expliquémosla paso a paso :


Esta parte indica que la cadena a validar inicia con cualquier carácter alfanumérico línea o línea baja y que mínimo deben existir 2 caracteres


Esta parte de la cadena indica que continua un carácter obligatorio en cual es el
@, si ese símbolo es obligatorio esto es un correo, luego es seguido de varios caracteres alfanuméricos donde son mínimo 2 y debe continuar con un punto (.), ya que el punto también significa cualquier carácter en las expresiones regulares se le coloca el carácter de escape ( \ ). Representa en nombre del dominio donde esta el correo ya sea Hotmail o Yahoo


Representa la segunda parte del dominio ya sea
.com o .es


Representa una parte opcional en los correos por ejemplo en dominios que sean como entidad.edu.co sirve para validar la ultima parte si es que existe y además indica el fin de la línea

En un próximo Tutorial explicaremos como implementarlas en el lenguaje de programación JAVA.

Repito, este tutorial es de la autoria de @dexterfcp (Fabian) si hay que comentar o agradecerle por hacernos menos ignorantes, se le debe hacer a él.

Leer más...