Programación , Domótica y microcontroladores.

Archivo para abril, 2012

Implementando Servicios web en PHP+Mysql

Soap

SOAP (Simple Object Access Protocol, Protocolo de acceso a objetos simple) es unprotocolo basado en XML que consiste de tres partes: la primera define cuál es el mensaje ycómo procesarlo, la segunda es un sistema de reglas de codificación para expresar tipos dedatos definidos y una tercera parte para representar respuestas de llamadas por parte deprocedimientos remotos.

La diferencia básica entre los dos protocolos anteriores es su complejidad. XML-RPC estádiseñado para ser sencillo, mientras que SOAP está hecho con la idea de ofrecer un soportecompleto de todo tipo de servicio web.

Por otro lado, también es conveniente describir qué es WSDL. Pues bien, WSDL es un formatoXML que describe los servicios de red como un conjunto de puntos finales que procesanmensajes contenedores de información orientada tanto a documentos como a procedimientos.Las operaciones y los mensajes se describen de manera abstracta y después se enlazan a unprotocolo de red y a un formato de mensaje concreto para definir un punto final de red.
Fuente:http://es.scribd.com/doc/16175477/Implementando-Servicios-Web-Con-Php

Desarrollo
Para realizar a punta de código , los servicios web son un poquito complejos porque debes conocer muy bien su estructura pero afortunadamente hay una librería llamada NuSoap, que hace ese trabajo por nosotros.Pero, aún así, se debe meter mano para obtener mejores resultados.

Hace unos 6 meses, yo quería realizar un servicio web para una aplicación; que tomaba los datos de una base de datos en Mysql y lo debía poner disponibles para los usuarios que desean consumirla.
Pero leyendo algunos sitios , concluí , que lo mejor era optar por la librería Nusoap.Pues , es así, como comencé a probar esta librería.Tuve algunos problemas pero los solucione.
En el proyecto , adjunto ejemplos desde los más básicos hasta los mas complejos.
Para lograr la implementación del servicio web(web service) , he utilizado la librería NuSOAP que viene adjunta al proyecto que posteo.

<?php
include('lib/nusoap.php');
$server = new soap_server;
$ns="http://localhost:88/Webserivce/";
$server->configureWSDL('Servicios',$ns);
$server->wsdl->schematargetnamespace = $ns;

$server->wsdl->addComplexType(
        'ArregloDeEstructuras',
        'complexType',
        'array',
        'sequence',
        'http://schemas.xmlsoap.org/soap/encoding/:Array',
        array(),
        array(array('ref' => 'http://schemas.xmlsoap.org/soap/encoding/:arrayType',
         'wsdl:arrayType' => 'tns:Estructura[]')
        ),
        'tns:Estructura'
);

$server->register('consultaPersonas',
                  array('$param' => 'xsd:string'),
                  array('return'=>'tns:ArregloDeEstructuras'),
                  $ns);




function consultaPersonas($param) {
    $arreglo = array();
    $arreglo[] = array('Nombre'=>"Juan", 'Apellidos'=>"Torres", 'Edad'=>18);
    $arreglo[] = array('Nombre'=>"Teresa", 'Apellidos'=>"Jiménez Sánchez", 'Edad'=>19);
    $arreglo[] = array('Nombre'=>"Efraín", 'Apellidos'=>"Ovalles López", 'Edad'=>22);
    return $arreglo;
}





// Use the request to (try to) invoke the service
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);
?> 

Y es así, como se realiza un servicio web usando la librería NuSoap.
Descargar ejemplo
No olvides comentar en forma de agradecimiento.

Cargar Tablas Mysql en Jtree en Java

Hace una semana , un amigo menciono que deseaba que le ayuden con este problema y en base a esa petición se realizo este ejemplo.Espero que les sirva de referencia para cualquier proyecto que tengan en mente.

Explicación:

  • 1. Para obtener las tablas que se tiene en una base de datos Mysql ,primero , debemos aplicar el «Show Tables».Esta sentencia nos devuelve todas las tablas de una base de datos determinada.
  • 2.-Una vez, que se tiene las tablas , se le pregunta a Mysql que queremos mostrar la descripción de cada una de ellas.Y para hacer eso aplicamos la siguiente sentencia «describe tabla_nombre».
    Nos devuelve los capos de la tabla con sus respectivo tipo de dato.

Teniendo esto podemos ya realizar nuestra pequeña aplicación que cargue las tablas y con sus respectivos campos.
Observemos las imágenes.

Ahora , menciono las clases que se utilizaron para el proyecto con sus respectivos códigos.

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 * @author Wilfo Martel S.
 * e-mail:logica_Razon@hotmail.com
 * cel:082502692
 * Usa este código para fines educativos,comerciales ,etc.  pero respeta el autor del código.
 */

package DAC;

/**
 *
 * @author Wilfo
 */
public class Global {
 public static  String strBD="";
  public static  String Url="";
  public static  String User="";
  public static  String Clave="";
  public static  String Driver="com.mysql.jdbc.Driver";

}

Ahora , la clase conexión.

 /*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 * @author Wilfo Martel S.
 * e-mail:logica_Razon@hotmail.com
 * cel:082502692
 * Usa este código para fines educativos,comerciales ,etc.  pero respeta el autor del código.
 */

package DAC;


import java.sql.*;


/**
 *
 * @author Wilfo
 */
public class Conexion {
  private String url;
  private String user;
  private String clave;
  private String Driver;
  public Conexion(){}

  public String getDriver(){
   return this.Driver;
  }

  public String getUser(){
    return this.user;
  }

  public String getClave(){
   return this.user;
  }
  public String getUrl(){
   return this.url;
  }

  public Conexion (String Driver,String Url,String User,String Clave){
   this.Driver=Driver;
   this.url=Url;
   this.user=User;
   this.clave=Clave;
  }
/**
 * Para mostrart regustros
 * @param sql
 * @return
 * @throws Exception
 */
  public ResultSet ejecutaQuery(String sql) throws Exception
  {
      ResultSet res=null;
      try{
            Class.forName(this.Driver);
            try{
                Connection con=DriverManager.getConnection(this.url,this.user,this.clave);
                Statement pstm=con.createStatement();
                res=pstm.executeQuery(sql);
            }catch(SQLException ex){ throw new Exception(ex.getMessage());   }

      }catch(ClassNotFoundException e)
      {
          throw  new Exception(e.getMessage());
      }
      return res;
  }




  

  /**
   * Muestra  registros pero con parametro PrepareStament
   * @param pstm
   * @return
   * @throws Exception
   */
    public ResultSet ejecutaPrepared(PreparedStatement pstm) throws Exception {
        ResultSet res = null;
        try {
            res = pstm.executeQuery();
        } catch (SQLException e) {
            throw new Exception(e.getMessage());
        }
        return res;
    }


    /**
     * Seleccion de datos
     * @param sql
     * @return
     * @throws Exception
     */
    public PreparedStatement  crearPreparedStm(String sql) throws Exception {
      PreparedStatement pstm=null;
      try{
          Class.forName(this.Driver);
           try
           {
               Connection con=DriverManager.getConnection(this.url,this.user,this.clave);
               pstm=con.prepareStatement(sql);
           }catch(SQLException ex){
               throw new Exception(ex.getMessage());
           }
      }catch(ClassNotFoundException e){
        throw new Exception(e.getMessage());
      }
      return pstm;
    }


    
}

Ahora , en el paquete ejemplo tenemos dos clases.La primera se llama «Bll» y la otra «Tabla_cls»

Bll.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package ejemplo;
import DAC.Conexion;
import DAC.Global;
import java.sql.*;
import java.util.ArrayList;
import java.util.Vector;
/**
 *
 * @author Wilfo Martel S.
 * e-mail:logica_Razon@hotmail.com
 * cel:082502692
 * Usa este código para fines educativos,comerciales ,etc.  pero respeta el autor del código.
 */
public class Bll {

    public static Vector ListarTablas() throws Exception  {
        ResultSet res = null;
        Vector vec = new Vector();
        try {
            Conexion con = new Conexion(Global.Driver, Global.Url, Global.User, Global.Clave);
            String sql = "SHOW TABLES";
            PreparedStatement pstm = con.crearPreparedStm(sql);
            res = con.ejecutaPrepared(pstm);
            while (res.next()) {
                vec.add(res.getString(1));
            }
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        }
        return vec;
    }
    public static ArrayList<Tabla_cls> ListarColumnaTabla(String nomtabla) throws Exception {
        ResultSet res = null;
        Tabla_cls tabla = null;
        ArrayList<Tabla_cls> lstTabla = new ArrayList<Tabla_cls>();
        try {
            Conexion con = new Conexion(Global.Driver, Global.Url, Global.User, Global.Clave);
            String sql = "DESCRIBE " + nomtabla;
            PreparedStatement pstm = con.crearPreparedStm(sql);
            res = con.ejecutaPrepared(pstm);
            while (res.next()) {
                tabla = new Tabla_cls();
                tabla.setField(res.getString(1));
                tabla.setType(res.getString(2));
                lstTabla.add(tabla);
            }
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        }
        return lstTabla;
    }

}


Tabla_cls.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package ejemplo;

/**
 *
 * @author Wilfo Martel S.
 * e-mail:logica_Razon@hotmail.com
 * cel:082502692
 * Usa este código para fines educativos,comerciales ,etc.  pero respeta el autor del código.
 */
public class Tabla_cls {
String field;
String type;

public Tabla_cls(){}

    public Tabla_cls(String field, String type) {
        this.field = field;
        this.type = type;
    }

    public String getField() {
        return field;
    }

    public void setField(String field) {
        this.field = field;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getType() {
        return type;
    }
}
  • Link de descarga.Descargar aquí
  • Espero que les haya gustado.No olviden sus comentarios.
    Muy pronto un mini-framework php para agilitar la programación.

Jsp avanzado +Jquery+Mysql

Hola amigos , esta vez les traigo algo muy caliente.Es una aplicación que realice para una universidad que consiste básicamente en llevar una evaluación de los estudiantes.No esta toda la aplicación , ya que tuve que hacer otra plantilla, cambiar código y hacer algo similar para fines autodidactas para todos ustedes.Porque se debe respetar la ética y el profesionalismo.Pero funciona correctamente amigos.A lo largo de mi trayectoria como desarrollador siempre me han gustado investigar nuevas cosas y compartir para agilitar el camino a los demás.Esta vez, comparto secretos de programación para la web, sobre todo de ajax , algo que quizas nadie publica.Encontraras comentarios en las plantillas sobre ajax y los posibles causas , cuando y como utilizarlos.
Bueno , basta de palabras y veamos unas imagenes para ver como es la aplicación.

Espero sus comentarios.
Si deseas contratar me, como desarrolaldor web , bienvenido sea.Puedes ver mis datos personales si deseas.

Link de descarga de la aplicación.

Descaragr aplicación
Enlace 2