Blog

Dorni-Recetas

Hoy te presentamos una nueva aplicación escrita en Java con la que podrás gestionar tus recetas de cocina. La aplicación tiene tres partes:

1-Añadir: En esta sección podrás añadir recetas de cocina con sus ingredientes, métodos de preparación, comentarios, autor de la receta, podrás seleccionar si es privada o pública y podras elegir si la receta necesita de la elaboración de otra receta.
Tambien podrás añadir tus comensales habituales.

2-Actualizar receta: En esta sección podrás actualizar la receta, pudiendo modificar todos los campos de la receta, podras añadir los comentarios de los comensales y añadir mas elaboraciones necesarias para la receta.

3-Buscador: En esta sección podras buscar una receta por ingredientes separados por comas o buscar por nombre de receta o mostrar todas las recetas, una vez seleccionada una receta podras ver su contenido e imprimir la receta a un archivo txt que se ubica en el mismo lugar que el ejecutable.

Lo puedes descargar desde:

Dorni-Recetas

Y tambien está el manual de usuario para descargar, aunque es muy fácil de usar:

Manual usuario Dorni-Recetas

Esperamos que te guste 😉

Introducción a webservices con aplicación Java 8 y servidor PHP

Hola, en el artículo de hoy trataré el tema de webservices.
Los webservices son muy útiles cuando queremos distribuir nuestra aplicación y, en vez de dar acceso a la base de datos desde la aplicación directamente con un driver JDBC, lo que hacemos es que sea el webservice el que nos procese las peticiones a la base de datos. De esta manera, no tenemos que incluir la contraseña y usuario de la base de datos en la aplicación a distribuir y corremos menos riesgos de seguridad, ya que un usuario un poco espabilado podría descompilar nuestra aplicación y hacerse con las credenciales de la base de datos.

Usaremos el servidor XAMPP y ubicaremos los archivos php en la carpeta htdocs/service

Para empezar, crearemos la base de datos(webservice) con una única tabla(adjetivos) con 3 campos: Id, adjetivo,fecha.
Id (int, auto increment, primary key)
adjetivo(varchar)
fecha(timestamp)

Ahora crearemos el webservice que será un archivo php que procese las peticiones que se le envíen desde la aplicación Java, vamos a hacer que el web service procese dos peticiones, una de insertar datos y otra de hacer una consulta.

El archivo insert.php tendría este aspecto

<?php
$adjetivo=$_POST['adjetivo'];
$db=mysqli_connect("localhost","root","","webservice");
mysqli_query($db,"insert into adjetivos (adjetivo)values('$adjetivo')");
?>

El archivo select.php tendría este aspecto:

<?php
$db=mysqli_connect("localhost","root","","webservice");
mysqli_query($db,"set names 'utf8'");
$res=mysqli_query($db,"select * from adjetivos");
$fila=mysqli_fetch_array($res);
do{
	echo $fila["adjetivo"].",".$fila["fecha"]."\n";
	
}while($fila=mysqli_fetch_array($res));
?>

Una vez hecho ésto haremos nuestra aplicación en Java que le pasará un parámetro POST al webservice, éste la procesará y nos devolverá los resultados en el caso del select o insertará el adjetivo en el caso del insert, para lo que he creado una clase base adjetivos.java para convertir a objetos los resultados de la petición select.
La clase adjetivo.java tiene este aspecto:

import java.util.Objects;

/**
 *
 * @author Javi
 */
public class adjetivos {
    private int id;
    private String adjetivo;
    private String fecha;

    public adjetivos(String adjetivo) {
        this.adjetivo = adjetivo;
    }

    public adjetivos(String adjetivo, String fecha) {
        this.adjetivo = adjetivo;
        this.fecha = fecha;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getAdjetivo() {
        return adjetivo;
    }

    public void setAdjetivo(String adjetivo) {
        this.adjetivo = adjetivo;
    }

    public String getFecha() {
        return fecha;
    }

    public void setFecha(String fecha) {
        this.fecha = fecha;
    }

    @Override
    public String toString() {
        return "adjetivo{ adjetivo=" + adjetivo + ", fecha=" + fecha + "}\n";
    }

Usaré 2 clases con main, una para el ejemplo con insert y otra para el ejemplo con select.
En la clase main correspondiente al insert, le pasaremos un parámetro POST a PHP para que lo procese y lo inserte en la base de datos, esta clase sería una como la siguiente:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;





/**
 *
 * @author Javi
 */
public class Servicio {

    /**
     * @param args the command line arguments
     */
    
    private static final String USER_AGENT = "Mozilla/5.0";

    private static final String POST_URL = "http://localhost/service/insert.php";

    private static final String POST_PARAMS = "adjetivo=encomiable";
    
    
    public static void main(String[] args) throws IOException {
       

          sendPOST();
    }
    
    private static void sendPOST() throws IOException {
        URL obj = new URL(POST_URL);
        HttpURLConnection httpURLConnection = (HttpURLConnection) obj.openConnection();
        httpURLConnection.setRequestMethod("POST");
        httpURLConnection.setRequestProperty("User-Agent", USER_AGENT);

        // Aqui le pasamos los parametros
        httpURLConnection.setDoOutput(true);
        OutputStream os = httpURLConnection.getOutputStream();
        os.write(POST_PARAMS.getBytes());
        os.flush();
        os.close();
        // Una vez pasados los parametros recibimos el codigo de respuesta

        int responseCode = httpURLConnection.getResponseCode();
        System.out.println("POST Response Code :: " + responseCode);

       
    }
    
}

El código anterior pasará un parámetro al archivo php con el adjetivo encomiable y será php el encargado de insertarlo en la base de datos

Ahora seguiremos haciendo un select de la tabla adjetivos y transformando los resultados en un arrayList de objetos adjetivos, en este caso no le vamos a pasar parámetros al select por lo que el parámetro será una cadena vacía, el siguiente código muestra como se debe proseguir

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;


/**
 *
 * @author Javi
 */
public class leerphp2 {

    /**
     * @param args the command line arguments
     */
     private static final String USER_AGENT = "Mozilla/5.0";

    private static final String POST_URL = "http://localhost/service/select.php";

    private static final String POST_PARAMS = "";
    
    
    
    public static void main(String[] args) throws IOException {
        // TODO code application logic here
        sendPOST();
    }
    private static void sendPOST() throws IOException {
        ArrayList <adjetivos> mati = new ArrayList<>();
        
        URL obj = new URL(POST_URL);
        HttpURLConnection httpURLConnection = (HttpURLConnection) obj.openConnection();
        httpURLConnection.setRequestMethod("POST");
        httpURLConnection.setRequestProperty("User-Agent", USER_AGENT);

        // For POST only - START
        httpURLConnection.setDoOutput(true);
        OutputStream os = httpURLConnection.getOutputStream();
        os.write(POST_PARAMS.getBytes());
        os.flush();
        os.close();
        // For POST only - END

        int responseCode = httpURLConnection.getResponseCode();
        System.out.println("POST Response Code :: " + responseCode);

        if (responseCode == HttpURLConnection.HTTP_OK) { // success
            BufferedReader in = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream()));
            String inputLine;
            StringBuffer response = new StringBuffer();

            while ((inputLine = in .readLine()) != null) {
                response.append(inputLine);
                
                String [] fields = inputLine. split(",");
                mati.add(new adjetivos (fields[0],fields[1]));
                
            } in .close();

            // print result
            System.out.println(response.toString());
        } else {
            System.out.println("POST request not worked");
        }
        System.out.println("Escribiendo array");
        for (int i = 0; i < mati.size(); i++) {
            System.out.println(mati.get(i).toString()+"\n");
            
        }
    }
}

Enlace de interésJAVA POST

Espero que te haya gustado 😉

Cuenta Atras Java Script

Hoy te explicamos como crear una cuenta atras en Java Script utilizando PHP para que el usuario introduzca los segundos que va a durar la cuenta atras, primero realizamos el formulario HTML con los segundos que durara la cuenta atras

<div id="reloj">
    
		<form action ="index.php" method="POST">
			Segundos:<input type="number" name="tiempo"/><br><br/>
			<input type="submit" value="Enviar"><br><br/>
		</form> 
	</div>	
	<?php
		if($_POST){
			$segundos=$_POST["tiempo"];
        ?>

Luego creamos el script de manera que creamos una variable con la fecha actual y le sumamos los segundos que nos pasó el usuario para la cuenta atrás para calcular el final de la cuenta atras y luego restamos el final(end) del ahora(now) y nos da los milisegundos que quedan para la cuenta atras los descomponemos en dias, horas, minutos y segundos y obtenemos los datasw para mostrar

<?php
echo"<div id=\"countdown\"></div>";
echo "<script>
var end1 = new Date();
var seg =end1.getSeconds();
var end = end1.setSeconds(seg+".$segundos.");
    var _second = 1000;
    var _minute = _second * 60;
    var _hour = _minute * 60;
    var _day = _hour * 24;
    var timer;

    function showRemaining() {
        var now = new Date();
        var distance = end - now;
        console.log(distance);
        if (distance &lt; 0) {

            clearInterval(timer);
            document.getElementById('countdown').innerHTML = 'EXPIRED!';

            return;
        }
        var days = Math.floor(distance / _day);
        var hours = Math.floor((distance % _day) / _hour);
        var minutes = Math.floor((distance % _hour) / _minute);
        var seconds = Math.floor((distance % _minute) / _second);

		document.getElementById('countdown').innerHTML =  'Tiempo para que finalice la cuenta atras:   ';
        document.getElementById('countdown').innerHTML += days + ' dias, ';
        document.getElementById('countdown').innerHTML += hours + ' horas, ';
        document.getElementById('countdown').innerHTML += minutes + ' minutos y ';
        document.getElementById('countdown').innerHTML += seconds + ' segundos';
    }

    timer = setInterval(showRemaining, 1000);
</script>";
?>

Se puede probar en el siguiente enlace temporizador donde aparte del JavaScript hay algun otro cambio pero de poca importancia.
Espero que te haya gustado 😉

DorniSoft Inc.