Desarrollo WEB.


Las practicas de programación orientadas a la web son muy cambiantes en el tiempo. Es necesario conocer e implementar tecnologías, conocer lenguajes,integrar comunidades,usar Ides, etc, recientes, para responder al mercado que se acerca.

Mostrando entradas con la etiqueta aplicaciones web. Mostrar todas las entradas
Mostrando entradas con la etiqueta aplicaciones web. Mostrar todas las entradas

domingo, 11 de agosto de 2013

Upload de archivos en una aplicación web con JSF 2.0

Upload con JSF 2.0
  • Carpeta destino
Es importante tener una carpeta definida en el contexto de la aplicación para crear los archivos subidos por el recurso java de fileupload y primefaces en jsf 2.0
nuestro directorio destino se encuentra en /modulos/rh/rhEmpleadoFoto/fotos

  • En el .xhtml

<h:form enctype="multipart/form-data" id="formfileupload" prependid="false">
     <!--aca neustro componente se ejecuta automaticamente apenas recibe el archivo-->
            <p:fileupload actualiza="" allowtypes="/(\.|\/)(gif|jpe?g|png)$/" auto="true" cancellabel="Cancelar" componente="" donde="" dragdropsupport="true" fileuploadlistener="#{rhEmpleadoFotoController.accionFileUpload}" foto="" grafico="" id="fileupload" imagen="" la="" label="Seleccionar" mi="" mode="advanced" rendered="true" renderiza="" se="" sizelimit="1000000" update=":formpersonal:idRhEmpleadoFoto" uploadlabel="Subir al servidor" xhtml="">
            </p:fileupload> 
            <!--
  para tener donde visualizar la imagen despues de ingresarse.
                El nombre en el contexto de la aplicacion para mi controlador es rhEmpleadoFotoController 
                -->
        <p:graphicimage cache="false" height="300" id="imagemTmp" style="margin: 0 auto;" value="#{rhEmpleadoFotoController.imagem}">
</p:graphicimage></h:form>
En nuestro xhtml ingresamos el anterior codigo, lo adaptamos de acuerdo al framework que estemos usando en mi caso primefaces.
  • Controlador
En el cuerpo de mi controlador ingreso estas funciones teniendo en cuenta que algunas propiedades se deben declarar como privadas en el controlador y se les debe crear métodos accesores y colocadores para que sean accedidos desde otros ámbitos de la aplicación en las .xhtml(UI)
    
public void accionFileUpload(FileUploadEvent event) { //evento propio del framework
        try {
            file = event.getFile();
            byte[] foto = event.getFile().getContents();
            String nomeArquivo = event.getFile().getFileName();
            FacesContext facesContext = FacesContext.getCurrentInstance();
            ServletContext scontext = (ServletContext) facesContext.getExternalContext().getContext();
            String archivo = scontext.getRealPath("/modulos/rh/rhEmpleadoFoto/fotos/" + nomeArquivo); //guardar en ruta basica para luego mover
            crearArchivo(foto, archivo);
            imagem = new DefaultStreamedContent(event.getFile().getInputstream()); //agregar geter y seter para poder ser accedida desde otros xhtml
            
            selectedEntidad = new RhEmpleadoFoto(); //entidad para persistir en la base de datos
            selectedEntidad.setNombre(nomeArquivo);
            selectedEntidad.setIdRhEmpleado(idRhEmpleado);
            long peso = event.getFile().getSize();
            int x = (int) peso;
            selectedEntidad.setPeso(x);
            selectedEntidad.setRuta("/modulos/rh/rhEmpleadoFoto/fotos");
            selectedEntidad.setLlaveUnica(GenerarRandom().toString());
            selectedEntidad.setEstadoEliminado(Boolean.FALSE);
            getFacade().create(selectedEntidad); //crea el objeto(RhEmpleadoFoto) en la bd

     //dos objetos para hacer renombrado de archivo y copiado a carpetas
            RhEmpleadoFoto current = ejbFacade.findObjeto(selectedEntidad);
            RhEmpleadoFoto current2 = new RhEmpleadoFoto();
            RhEmpleadoFoto current2 = ejbFacade.findObjeto(selectedEntidad);
            
            
            if (renombrarArchivo(current2.getRuta() + "/" + current2.getNombre(), current2.getRuta() + "/" + (idRhEmpleado.getIdRhEmpleado() + ""))) {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Mensaje:", "Ingreso Exitoso"));
            } else {
                if (renombrarArchivo(current2.getRuta() + "/" + current2.getNombre(), current2.getRuta() + "/" + (idRhEmpleado.getIdRhEmpleado() + ""))) {
                    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Mensaje:", "Ingreso Exitoso")); //para enviar el mensaje a la growl del framework
                } else {
                    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Mensaje:", "" + current2.getRuta() + "/" + current2.getNombre() + " " + current2.getRuta()));
                }
            }

            recreateModel();
            FacesMessage msg = new FacesMessage("Succesful", file.getFileName() + " Fue Cargado Exitosamente.");
            FacesContext.getCurrentInstance().addMessage(null, msg);
            //cerrarPanelFoto(); //una funcion booleana para renderizar el contenido en el xhtml de acuerdo a lo sucedido
        } catch (Exception ex) {
            Logger.getLogger(IngenieriaProductoImagenController.class.getName()).log(Level.SEVERE, null, ex.getMessage());
            FacesMessage msg = new FacesMessage("Succesful", file.getFileName() + " Error en la carga:" + ex.getMessage());
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }
    
     /**
     * Funcion para mover y renombrar un archivo
     *
     * @param String archivo Archivo o directorio a renombrar
     * @param String directorio Directorio destino
     * @exception RCException Se genera una excepción genérica.
     * @return boolean
     */
    public boolean renombrarArchivo(String archivo, String directorio) {
        try {
            FacesContext facesContext = FacesContext.getCurrentInstance();
            ServletContext scontext = (ServletContext) facesContext.getExternalContext().getContext();
            String Sarchivo = scontext.getRealPath(archivo);
            File archivos = new File(Sarchivo);
            String Sdirectorio = scontext.getRealPath(directorio);
            File dir = new File(Sdirectorio);
            String name = archivos.getName();
            int j = name.indexOf(".");
            String newname = "" + GenerarRandom() + "" + name.substring(j, name.length());
            boolean semovio = archivos.renameTo(new File(dir, newname));
            if (!semovio) {
                System.out.print("El archivo no se ha Movido ...");
                return false;
            } else {
                current.setNombre(newname);
                current.setRuta("/modulos/rh/rhEmpleadoFoto/fotos/" + idRhEmpleado.getIdRhEmpleado()); //una carpeta con el id del objeto que lo contiene, en mi caso empleado
                ejbFacade.edit(current);
                System.out.print("Se Movio ...");
                return true;
            }
        } catch (Exception e) {
            System.out.print("" + e.getMessage());
            return false;
        }
    }

     /**
     * Funcion para crear un archivo
     *
     * @param byte[] bytes objeto
     * @param String archivo archivo
     * @exception RCException Se genera una excepción genérica.
     * @return void
     */
    
    public void crearArchivo(byte[] bytes, String archivo) {
        FileOutputStream fos;
        try {
            fos = new FileOutputStream(archivo);
            fos.write(bytes);
            fos.close();
        } catch (FileNotFoundException ex) {
            Logger.getLogger(IngenieriaProductoImagenController.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(IngenieriaProductoImagenController.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
  • Web.xml
Anexar estas lineas al archivo de configuración de la aplicación web, pero depende del framework usado, en mi caso primefaces.
   <filter>
        <filter-name>PrimeFaces FileUpload Filter</filter-name>
        <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class> //de mi framework
        <init-param>
            <param-name>thresholdSize</param->
<!--tamaño maximo de los archivos para el contexto de la aplicacion-->
            <param-value>512000</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>PrimeFaces FileUpload Filter</filter-name>
        <servlet-name>Faces Servlet</servlet-name>
    </filter-mapping>
    <filter>
        <mime-mapping>
        <extension>png</extension>
        <mime-type>image/png</mime-type>
    </mime-mapping>
  •  Librerías 
 usar la librería commons-fileupload-1.2.2.jar y sus librerías dependientes

 Para una opcion mas clara en lenguaje nativo descargue este ejemplo. >>

jueves, 28 de marzo de 2013

Primefaces y su evolución.!

En noviembre del 2011 conocí primefaces, y empecé de lleno en producción con él, un framework que va de maravilla con las aplicaciones web realizadas en JSF (java server faces), es muy fácil de implementar y sobre todo muy hermoso y con una documentación excelente, tiene infinidad de componentes visuales que se integran con controladores java, esto hace que la programación orientada a la web sea muy eficiente, sobre todo que su mantenimiento sea muy fácil y agradable para cualquier desarrollador de nuevas tecnologías.

Pero como todo lo bueno tiene su evolución, primefaces no es la excepción, cuando inicie, fue con la versión 3.0, ahora vamos en la 3.5, claro que aun estoy en la 3.4 debido a que los cambios en la 3.5 son muy críticos y se necesita mucho tiempo para realizar ajustes en los códigos.

Estas son algunas de las adaptaciones que se deben realizar para migrar a la versión 3.4
  • Diferenciar entre valores de la propiedad id y valores de propiedad widgetVar, deben ser diferentes.
  • Los selects con filtros deben tener altura (height)
  • Los selects normales deben tener  style="min-width: 120px;", es decir un ancho mínimo.
  • ... entre otros que iré colocando poco a poco a medida que me valla acordando.
Todavía no hay mucha eficiencia en los filtros de tablas cuando se trata de grandes cantidades de datos, pero con un poco de astucia indígena se pueden realizar filtros personalizados para búsquedas óptimas. 

El framework es libre pero con un poco de dinero se puede obtener una versión pro (licenciada) donde el soporte es su mayor fortaleza.

Muchas técnicas se van aprendiendo con el uso diario del framework, la idea es optar por uno y aprender a usarlo bien, con eso podemos brindar a nuestras empresas una herramienta segura para implementar aplicaciones java web empresariales o bien llamadas J2EE.

Para los iniciados en primefaces les recomiendo suscribirse al foro, la comunidad de primefaces es grande y hay moderadores del foro con prime que son unos excelentes colaboradores.


lunes, 25 de marzo de 2013

Jquery layout y carga dinámica de paginas mediante Ajax.!

Jquery layout es un plugin para simular un conjunto de marcos, incluso el uso de templates como usa zend o simphony o algunos frameworks jsf. Plasmo esta sencilla técnica para realizar pequeñas aplicaciones web usando cargas de paginas dinámicas sin mayores conocimientos de código complejo.


El código fuente se encuentra en el siguiente enlace. descargar codigo fuente

domingo, 17 de marzo de 2013

OpenERP. una herramienta practica.!

OpenERP es una herramienta software para la planeación de recursos empresariales, es completamente libre y sus dueños ganan a partir del soporte que brindan a sus partners o socios independientes en todo el mundo. Han llegado a Colombia promoviendo su Implementación. Lo puedes descargar desde su pagina web https://www.openerp.com/es/pricing. Las empresas que requieran este tipo de software, si cuenta con un buen ingeniero encargado de tecnologías software, podrá llevar a cabo este proceso de Implementación de OpenERP, de lo contrario seria muy complicado, es un software que en su complejidad, también es complejo usarlo. Lo mejor seria crear uno a partir de cero, escoger un buen lenguaje de programación, un buen motor de base de datos, orientarlo a la web y realizar ingeniería de requerimientos acorde al modelo de negocio de la empresa al cual lo requiere.

lunes, 5 de diciembre de 2011

Aplicacion WEB JSF Multi-Idioma

Las aplicaciones java web, específicamente las desarrolladas bajo un framework JSF, nos proporciona de forma optima la configuración y creación de un archivo de idioma para cada país o región donde se ejecute nuestra aplicación. 


Es decir podremos configurar nuestra aplicación para que sea usada en otros países y en otro idioma sin la necesidad de acudir al código de las interfaces de la aplicación para realizar las modificaciones en cada etiqueta de texto.
Claro este beneficio nos obliga a ser meticulosos y organizados en el desarrollo.

Debemos Iniciar y encapsular cada valor de etiqueta en un parámetro de la aplicación, estos parámetros los almacenaremos en un archivo llamado Bundle.properties. que se ubicara en nuestro paquete de recursos .java

Archivo bundle.properties y su ubicacion (Click para ver la imagen original)
luego, para usarlo solo se invoca el nombre del archivo, siendo este su apuntador que invoca a una propiedad parametro:

implementación del archivo bundle.properties (Click para ver la imagen original)
Cuando hacemos el proceso de generación de código usando una herramienta como netbeans 8.x, el IDE nos prepara un archivo bundle.properties por defecto. Este se localiza en el directorio que muestran las imágenes anteriores, debemos hacer una copia de este archivo y realizar las diferentes traducciones.

Ahora configuramos nuestro archivo faces-config.xml para que la aplicación quede a la escucha del cliente.

Archivo bundle.properties y su ubicacion (Click para ver la imagen original)
 
Una mejor forma de configurar y de llenar nos ofrece el netbeans 8.x

Archivo bundle.properties y su ubicacion (Click para ver la imagen original)


Al usar netbeans 8.x podremos ir desde el archivo en uso donde se contiene la etiqueta traducida y dar CONTROL + Click sobre el codigo para ir directamente a la propiedad o el método en el caso de ser otro tipo de archivo como un controlador. 


martes, 23 de noviembre de 2010

Modelado de Software mediante UML2

Aplicación WEB para el Control en Línea de Reservas de Salas del Departamento de TICS en la I.E. Los Pinos.

Este proyecto es desarrollado como trabajo final en la asignatura de Ingenieria de Software II  bajo la supervicion del Ingeniero Edwardo Millan a quien agradezco profundamente por las enseñanzas brindadas en clase.


Propósito del sistema

Sistema de información en línea (Aplicación Web), que permite llevar a cabo el control general para un departamento de TIC (Tecnologías de la información y la comunicación), en la Institución Educativa Los Pinos de la Ciudad de Florencia.

Sistema propuesto

Se Propone el desarrollo de un sistema de control orientado a la web para el control de un Departamento de Tecnologías de la Información y la Comunicación permitiendo realizar gestión de recursos, usuarios y control de salas de sistemas. Como el proyecto abarca gran tiempo en el desarrollo de sus módulos se desarrollara para esta primera versión solo el modulo de reserva de salas en línea.

Requerimientos funcionales 
    • ·         Consultar Horario de Disponibilidad de las Salas. 
    • ·         Ver historiales de reservas y ver reserva actual en servicio. 
    • ·         Realizar reservas en línea. 
    • ·         Un administrador de salas debe aprobar o rechazar la solicitud de una reserva y enviar por correo electrónico un mensaje de aprobación o rechazo al solicitante. 
    • ·         Ingresar novedades por parte del administrador o ingresar recomendaciones de parte del usuario servido, si existen, al terminar cada uso de sala (reserva). 
    • ·         Gestionar Inventarios de salas de sistemas (Hardware y Software) y actualizar inventarios a medida que vallan surgiendo novedades durante el préstamo de las salas. (Pendiente por falta de tiempo)
    • ·         Gestionar usuarios del Sistema (Listar, editar, eliminar, agregar, actualizar). 
    • ·         Entregar y Recibir salas por parte del administrador de las salas y el usuario que usa el servicio de reserva. 
    • ·         El Administrador deberá Generar Reportes en .PDF de forma mensual para cada sala.

    Requerimientos no funcionales 

      • ·         El software debe estar desarrollado (construido) en una herramienta libre (NetBeans 6.8) y con almacenamiento de datos en un motor libre (mysql). 
      • ·         Desarrollo en lenguaje Java (JSP) en combinación con tecnología ajax usando el Framework Ext.js de Sencha. 
      • ·         Debe estar Desarrollado aplicando una arquitectura J2EE
      • ·         Uso de la metodología de desarrollo de software RUP 
      • ·         Uso de la herramienta Visual Paradigm para modelamiento UML.

        domingo, 9 de mayo de 2010

        Tecnologia Arrastrar y soltar elementos WEB con AJAX (JSP, Java, MySql, Javascript, CSS,JQuery)

        La respuesta rapida y eficiente a una peticion realizada por un usuario (cliente) acredita y potencializa la vida actual del software y su sobrevivencia al medio (Servidor e Internet).
        Como dijo mi amigo Darwin Todo es Evolucion, aun la mas simple libreria existente actualmente para el ambiente web, empezo con unas pequeñas lineas de codigo con redundancia y simpleza. Hoy en dia las librerias evolucionan a un ritmo impresionante con tecnicas que en realidad me asustan. Sino Veamos Algunas de ellas y de quienes vivo muy agradecido por brindar sus recursos a la comunidad desarrolladora del mundo.

        Hablemos un poco de AJAX. Ajax no es un lenguaje, ni un API mucho menos, Ajax es un a tecnica de  pogramacion para el engranaje de apis en diferentes lenguajes de forma eficiente y adaptable a los nuevos entornos web 2.0
        Si bien diversos navegadores existen en la actualidad es porque la limitacion de la evolucion en la tecnologia no existe en esta era ni mucho menos lo sera en las que vienen, y bien, tambien muchos desarrolladores se han ido involucrando en la creacion de mecanismos (Api´s,. IDE´s, Motores de BD, Servidores, Librerias, Frameworks, etc) que con mucho esfuerzo y dedicacion nos hacen la vida facil a muchos que los usamos sus creaciones y las adaptamos a nuestras aplicaciones web.

        Es Gracias a Todos Ellos que ahora puedo escribir personalizadamante este tipo de recursos y compartirlos con ustedes.

        • JQuery
        • Mootools
        • Mail
        • JfreeChart
        • Itext
        • JDom
        • etc.
        Hasta Este momento supongo que la persona que va a observar este tutorial sabe de:
        • Tecnologia Java y JSP (Servlet)
        • Hojas de Estilo CSS
        • Javascript - Jquery (Framework Javacript)
        • Mysql (SQL)
        • Servidores TOMCAT o RESIN 
        • AJAX
        Bueno ahora si vamos a ver el Ejemplo 100% Funcional
        Para ahorrarme la descripcion del ejemplo he puesto los comentarios en todos los codigos (API) usados.

        SQL
        -- 
        -- Estructura de tabla para la tabla `tabla`
        -- 
        CREATE TABLE `tabla` (
        &nbsp; `nombre_li` varchar(50) NOT NULL,
        &nbsp; `posicion` varchar(100) NOT NULL,
        &nbsp; `id` int(11) NOT NULL
        ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
        
        INSERT INTO `tabla` VALUES (\'listItem_1\', \'2\', 1);
        INSERT INTO `tabla` VALUES (\'listItem_2\', \'1\', 2);
        INSERT INTO `tabla` VALUES (\'listItem_3\', \'3\', 3);
        INSERT INTO `tabla` VALUES (\'listItem_4\', \'4\', 4);
        INSERT INTO `tabla` VALUES (\'listItem_5\', \'5\', 5);
        INSERT INTO `tabla` VALUES (\'listItem_6\', \'6\', 6);
        

        Stylo Visual CSS
        /* Estilo Visual para la GUI
        * Es muy importante conocer CSS y la aplicacion de estos
        * estilos de manera dinamica con Javascript.
        */
        * { margin: 0; padding: 0; }
        
        body {
         font: 0.9em Arial;
         padding: 10px;
        }
        
        #info {
         display: block;
         padding: 10px; 
            margin-bottom: 5px;
         border: 1px solid #333;
         background-color: #efefef;
        }
        
        #test-list {
         list-style: none;
        }
        
        #test-list li {
         display: block;
         padding: 20px 10px; margin-bottom: 3px;
         background-color: #efefef;
        }
        
        #test-list li img.handle {
         margin-right: 20px;
         cursor: move;
        }
        #test-lista {
         list-style: none;
        }
        
        #test-lista li {
         display: block;
         padding: 20px 10px; margin-bottom: 3px;
         background-color: #efefef;
        }
        
        #test-lista li img.handles {
         margin-right: 20px;
         cursor: move;
        }
        #tabla{
            border: 1px solid black;
        }
        

        Java JSP

        <%@page import="java.sql.*, java.util.Date, javax.swing.*, javax.servlet.*, java.util.*"  session="true" %>
        <jsp:useBean id="conect" scope="session" class="Control.BeanConnection" />
        <jsp:useBean id="consulta" scope="session" class="Control.Consultas" />
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml">
            <head>
                <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
                <title>Tecnologia Arrastrar y soltar elementos con AJAX (JSP, Java, MySql, Javascript, CSS)</title>
                <!--Llamado a los componentes Jquery
                La mejor manera de no consumir recursos en nuestro servidor
                es llamar directamente las librerias desde la zona de recursos
                de JQUERY en google Sources
                Excelente.! siempre se mantienen actualizadas.
                -->
                <!--<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js" type="text/javascript"></script>-->
                <script type="text/javascript" src="jquery-1.3.2.min.js"></script>
                <script type="text/javascript" src="jquery-ui-1.7.1.custom.min.js"></script>
                <link rel=\'stylesheet\' href=\'styles.css\' type=\'text/css\' media=\'all\' />
                <script type="text/javascript">
                    $(document).ready(function() {/*Nos ponemos a la Escucha*/
                        $("#test-list").sortable({//Creamos el elemento
                            placeholder: \'tabla\',/*Le Programos sus propiedades y Acciones*/
                            containment: "ul",
                            items: "li",
                            axis: \'y\',
                            opacity: 0.6,
                            handle : \'.handle\',
                            update : function () {//Al Actualizarse
                                var order = $(\'#test-list\').sortable(\'serialize\');//Toma en serie los componentes y almacenelos en una variable arreglo order
                                $("#info").load("sortable.jsp",{ordenar: order, evento: "Run"}),//envio de Parametros a la Pagina Sortable.jsp
                                //Quien sera la encargada de procesar la informacion con la BD 
                                alert(order);
                            }
                        });
                    });
                </script>
            </head>
            <body>
                <pre>
        <div id="info">Esperando Para Actualizar</div>
                </pre>
                <ul id="test-list" >
                    <%
                                int cont = 0;//
                                ResultSet ListaImagenes = consulta.ListaImagenes(conect);//Llamamos el resultet
                                while (ListaImagenes != null && ListaImagenes.next()) {//Lo vaciamos y tiene registros
                                    cont++;
                    %>
                    <li id="listItem_<%=cont+ ""/*Valor de la Serie*/%>"><img src="img.png" alt="move" width="16" height="16" class="handle" /><strong><%=ListaImagenes.getString("id") + " con nombre de fila:" + ListaImagenes.getString("nombre_li") + ""%> </strong></li>
                    <%}%>
                </ul>
            </body>
        </html>
        

        Clase Java para consulta SQL

        /*
         * To change this template, choose Tools | Templates
         * and open the template in the editor.
         */
        package Control;
        
        import java.sql.ResultSet;
        import java.sql.SQLException;
        
        /**
         *
         * @author Yovany Suarez Silva
         */
        public class Consultas {
        
            public Consultas() {
            }
              /**
               * Este es el metodo que consulta y almacena en un componente tipo
               * resultSet todos los valores de la Tabla
               *
               * @ListaImagenes Arreglo de Registros  en la Tabla
               */
        
            public ResultSet ListaImagenes(BeanConnection conect) throws SQLException {
                String strSQL = "select * from tabla";
                ResultSet ListaImagenes = conect.ejecutar_select_catch(strSQL);
                return ListaImagenes;
            }
        }
        

        Pagina JSP de ACCION

        <%--
            Document   : index
            Created on : 2/05/2010, 07:36:48 PM
            Author     : Yovany Suarez Silva
        --%>
        <%@page import="java.sql.*,  javax.servlet.*, java.util.*"  session="true" %>
        <jsp:useBean id="conect" scope="session" class="Control.BeanConnection" />
        <%//Esto es Java Basico De VI Semestre
                    try {//Las Excepciones No permiten reventar nuestras aplicaciones y nos informan de los errores.
                        if (request.getMethod().equals("POST")) { //Se recibe el metodo
                            String evento = request.getParameter("evento"); //Se recogen los parametros
                            String order = request.getParameter("ordenar");
                            if (evento.equals("Run")) {
                                String palabras[] = order.split("&");//Se separan los items que vienen en el arreglo JSON
                                for (int i = 0; i < palabras.length; i++) { //Se vacea el arreglo
                                    String palabras2[] = palabras[i].split("=");
                                    String b = palabras2[0];
                                    String a = palabras2[1];
                                    String consulta = "UPDATE tabla SET posicion=\'" + a + "\' " +
                                            "WHERE nombre_li=\'" + (b.substring(0, 8)) + "_" + (i + 1) + "\' ";//Se Actualiza y con se escribe la respuesta
                                    conect.ejecutar_sql_catch(consulta);//se llama al metodo de ejecucion para enviar datos a la bd
                                    out.println(consulta);
                                }
                            }
                        }
                    } catch (SQLException e) {//Si hay una Excepcion en SQL
                        out.println(e.getMessage());
                    }
        
        %>
        

        BEAN De Conexion

        package Control;
        /**
         *
         * @author Yovany Suarez Silva
         */
        import java.sql.*;
        
        public class BeanConnection{
            private Connection con = null;
            private PreparedStatement st = null;
            private Statement st1;
            private ResultSet rs;
        
            private int id=0;
        
            public BeanConnection() {
        
            }
            public int getId(){
                return id;
            }
            public void setId(int _id){id=_id;}
            String cadena="";
        
            public void instituciones(){
                cadena="ajax?user=root&password=";
            }
            public void conecta(){
                instituciones();
                try {
                    Class.forName("com.mysql.jdbc.Driver").newInstance();
                    con =  (Connection) DriverManager.getConnection("jdbc:mysql://localhost/"+cadena);
                } catch(Exception e) {
                    System.out.println("\nERROR pool: " + e.toString());
                }
            }
            public Connection getConect(){return con;}
            public void close() {
                try {
                    
                } catch(Exception e) { }
            }
            public void closing() {
                try {
                    st.close();
                    con.close();
                } catch(Exception e) { }
            }
            public ResultSet ejecutar_select_catch(String la_sql) throws SQLException {
                conecta();
                rs = null;
                st= con.prepareStatement(la_sql);
                rs = st.executeQuery();
                return rs;   
            }
            public int ejecutar_sql_catch(String la_sql) throws SQLException {
                conecta();
                int num_filas = 0;
                st=con.prepareStatement(la_sql);
                num_filas = st.executeUpdate();
                return num_filas;
            }
        }
        

        Espero le Aprovechen, lo remodelen y me cuenten como les fue, a traves de pequeños comentarios.
         y Termino con Esta magnifica Frase "Todo lo que no Se Comparte se Pierde", Hafary.


        martes, 1 de diciembre de 2009

        Aplicaciones JSP (Java Orientado a la Web)

        Bien, en esta publicacion hablare un poco sobre el desarrollo de aplicaciones web alojadas bajo servidores java (resin, tomcat), explicare como configurar los archivos para el resin y como enlazar la base de datos. Como se que muchos lo estaban esperando, lo he organizado de la mejor manera para que sea lo mas entendible posible. No apto para cardiacos.

        Nuestros Requerimientos.
        1. Sitio Web para la Gestion de Imagenes Fotograficas (Galeria Fotografica).
        2. Arquitectura J2EE.
        3. Patron de diseño MVC.
        4. Metodologia XP (Programacion Extrema).
        5. Modelado de Datos.
        6. Modelado UML.
        Nuestras Herramientas.
        1. Motor de Base de datos Access.
        2. Servidor de Aplicaciones Resin (Caucho Tecnology)
        3. IDE Netbeans
        4. IDE Dreamweaver
        5. IDE TopStyle
        6. Acces de Microsoft Oficce
        7. Configurar Conexion ODBC
        Nota.
        1.  Si desea conectarse a POSTGRES o MYSQL Pegar el driver de postgresql-8.4-701.jdbc3.jar y el de mysql en el directorio c:archivos de programa/java/jdk6/jre/lib/ext.
        2. Crear la odbc con windows desde herramientas administrativas con el nombre ConectToAcces
          y seleccionando la bd acces de nombre contacto, porque asi esta referenciado en el bean conexion de nuestro proyecto web.
        3. Si se conecta con postgres arrancar Postgrest para que cuando se use la opcion de conectar con postgrest este este activado.
        4. Copiar y pegar el contenido sql del archivo sqlcontactoPostgrestoMysql.sql, anexo en esta carpeta.
        5. Si se conecta con postgres arranque el servicio de postgres desde herramientas administrativas, servicios. (No olvidar) para que no presente problemas de conexion.

        Mediante un ejemplo para descargar, se muestra este pequeño proyecto web realizado a bajo costo, pero en el que al principio tuve que invertir mucho tiempo en lecturas y practicas para entender la verdadera usabilidad de este tipo de aplicaciones.