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

viernes, 26 de junio de 2020

Solución al problema de conexión MySQL con NetBeans Apache

Al realizar conexiones de MySQL o MariaBD mediante algunos IDE, específicamente los NetBeans Apache podemos toparnos con el siguiente error, o cuando se emplea las versiones más actuales del Driver de conexión de MySQL:


Cannot establish a connection to jdbc:mysql://localhost:3306/test using com.mysql.cj.jdbc.Driver (The server time zone value 'Hora est. Pacífico, Sudamér' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the 'serverTimezone' configuration property) to use a more specifc time zone value if you want to utilize time zone support.)


Una de las soluciones es modificar la URL de la siguiente manera:
   
   jdbc:mysql://localhost:3307/test?useTimezone=true&serverTimezone=UTC
   
De esta manera al intentar la conexión se obtendrá el resultado esperado.


Pero no podemos conectarnos al Servidor MySQL, ya que solo podemos hacer esto para las bases de datos que contiene y obtenemos el siguiente error al intentar conectarnos.



La solución para no tener que modificar nuestras URL y poder conectarnos al Servidor MySQL desde Servicios de NetBeans es ejecutar la siguiente sentencia en el servidor MySQL:

   -- Usando nomenclatura UTC, por ejemplo '-5:00'
   SET GLOBAL time_zone ='-5:00'
   -- El valor varía conforme la zona horaria donde te encuentres
 



Así podremos conectarnos sin necesidad de tener que modificar cada URL.

miércoles, 17 de junio de 2020

Mostrar imágenes en JSP con Servlet

Consideramos la clase "Espacios" que proviene de la siguiente estructura SQL (Se ha obviado intencionalmente a la clave foránea en el campo "tipo"):
-- -----------------------------------------------------
-- Table espacios
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS espacios (
  idespacios INT NOT NULL AUTO_INCREMENT,
  piso TINYINT NOT NULL,
  precio DOUBLE(6,2) NOT NULL,
  ubicacion VARCHAR(25) NULL,
  tipo TINYINT NULL,
  imagen BLOB NULL,
  PRIMARY KEY (idespacios)
  )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;


Su clase en Java con el patrón DTO sería:
package dto;

public class Espacios {

    private Integer idespacios;
    private Integer piso;
    private Double precio;
    private String ubicacion;
    private Integer tipo;
    private byte[] imagen;

    public Espacios() {
    }

    /* Métodos Setter y getter */

}


El atributo imagen no se emplea, pero será de utilidad si convertimos el proyecto a uno de escritorio.
Su Interfaz e implementación DAO son:
package dao;

import java.util.List;
import dto.Espacios;

public interface DaoEspacios {

    public byte[] espaciosImg(Integer id);

    public String getMessage();
}

package dao.impl;

import biblioteca.ConectaBD;
import dao.DaoEspacios;
import dto.Espacios;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class DaoEspaciosImpl implements DaoEspacios {

    private final ConectaBD conectaDb;
    private String mensaje;

    public DaoEspaciosImpl() {
        this.conectaDb = new ConectaBD();
    }

    @Override
    public byte[] espaciosImg(Integer id) {
        byte[] img = null;
        StringBuilder sql = new StringBuilder();
        sql.append("SELECT ")
                .append("imagen")
                .append(" FROM espacios WHERE idespacios = ?");
        try (Connection cn = conectaDb.conexionDB()) {
            PreparedStatement ps = cn.prepareStatement(sql.toString());
            ps.setInt(1, id);
            try (ResultSet rs = ps.executeQuery()) {
                if (rs.next()) {
                    Blob blob = rs.getBlob(1);
                    if (blob != null) {
                        byte[] bytes = blob.getBytes(1, (int) blob.length());
                        blob.free();
                        img = bytes;
                    }
                } else {
                    img = null;
                }
            } catch (SQLException e) {
                mensaje = e.getMessage();
            }
        } catch (SQLException e) {
            mensaje = e.getMessage();
        }
        return img;
    }

    @Override
    public String getMessage() {
        return mensaje;
    }
}


El servlet que permite mostrar la imagen sería:
package web.servlet;

import biblioteca.DeString;
import dao.DaoEspacios;
import dao.impl.DaoEspaciosImpl;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name = "ImagenServlet", urlPatterns = {"/Imagen"})
public class ImagenServlet extends HttpServlet {

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("image/jpg");
        DaoEspacios daoEspacios = new DaoEspaciosImpl();
        Integer id = DeString.aInteger(request.getParameter("id"));
        try {
            byte[] data = daoEspacios.espaciosImg(id);
            ByteArrayOutputStream output = new ByteArrayOutputStream();
            output.write(data, 0, data.length);
            response.setContentLength(output.size());
            try (OutputStream out = response.getOutputStream()) {
                output.writeTo(out);
                out.flush();
            }
        } catch (IOException ex) {
            System.err.println(String.format("%s - %s", daoEspacios.getMessage(), ex.getMessage()));
        }
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    @Override
    public String getServletInfo() {
        return "Short description";
    }
}


El URL para mostrar una imagen sería por ejemplo: http://localhost:8084/Demo/Imagen?id=8 donde el valor que cambia es el número "8" por el "id" del registro del que se desea mostrar la imagen.

Ejemplo:

Dentro de un JSP el código tendría la siguiente forma:

      <img src="Imagen?id=8" alt="img"/>
   


Ese valor 8 se puede reemplazar con código de manera que recibe el "id" esperado como en esta porción de código que captura el id mediante una estructura que lista todos los espacios con JSTL.

      <img src="Imagen?id=${f.idespacios}" alt="img"/>
   




sábado, 16 de mayo de 2020

Java Standard Tag Library

JSTL es la biblioteca de etiquetas estándar de Java, que darán soporte a los JSP y es uno de los componentes de JAVA EE.

Su utilizad radica en que permite la creación de páginas web dinámicas de forma más eficiente que si no se les usara. Además,  aprovecha el "request", donde almacena variables, datos, etc. para dar soporte a la página JSP desde un servlet.

Cuenta con 6 bibliotecas que la componen:
  • core, iteraciones, condicionales, manipulación de URL y otras funciones generales.
  • biblioteca de funciones
  • xml, para la manipulación de XML y para XML-Transformation.
  • sql, para gestionar conexiones a bases de datos.
  • TLV
  • fmt, para la internacionalización y formateo de las cadenas de caracteres como cifras.

Para agregar esta biblioteca a un proyecto web en Netbeans se sigue los siguientes pasos:

Primero se debe agregar una nueva biblioteca:

Luego seleccionar JSTL y agregar

Dentro de los archivos JSP podemos emplear la paleta que provee Netbeans. Para ello, se hace los siguiente

Aparecerá una barra lateral donde se debe ubicar los siguiente


JSTL CORE


<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSTL - JavaJhon</title>        
    </head>
    <body>
        <strong>Usando JSTL IF</strong>
        <!--Suponemos que hemos capturado o recibido un valor 
        numérico y lo almacenamos en una variable "nota", luego 
        realizamos una comparación con otro valor.-->
        <% Double nota = 20d;%>
        <c:if test="<%= nota>11.5d %>">
            <p>Felicidades ustes ha aprobado con nota: <%= nota%></p>
        </c:if>
        <hr/>
        <br/>        
        <strong>Usando JSTL CHOOSE</strong>
        <!--Suponemos que hemos capturado o recibido un valor 
        numérico y lo almacenamos en una variable "dia", luego 
        realizamos una comparación con otros valores.-->
        <% Integer dia = 6;%>
        <c:choose>
            <c:when test="<%= dia== 1%>">
                <p>Es lunes</p>
            </c:when>
            <c:when test="<%= dia== 2%>">
                <p>Es martes</p>
            </c:when>
            <c:when test="<%= dia== 3%>">
                <p>Es miércoles</p>
            </c:when>
            <c:when test="<%= dia== 4%>">
                <p>Es jueves</p>
            </c:when>
            <c:when test="<%= dia== 5%>">
                <p>Es viernes</p>
            </c:when>
            <c:when test="<%= dia== 6%>">
                <p>Es sábado</p>
            </c:when>
            <c:when test="<%= dia== 7%>">
                <p>Es domingo</p>
            </c:when>
            <c:otherwise>
                <p>Valor erróneo</p>
            </c:otherwise>
        </c:choose>        
        <hr/>
        <br/>
        <strong>Usando JSTL FOR</strong><br/>
        <!--Suponemos que hemos capturado o recibido un valor 
        numérico y lo almacenamos en una variable "n", luego 
        creamos una lista desplegable con valores del 1 a "n"-->
        <% Integer n = 12;%>
        <select>
            <c:forEach var="i" begin="1" end="<%= n %>">
                    <option value="${i}">Item ${i}</option>
            </c:forEach>   
        </select>     
        <hr/>
        <br/>
    </body>
</html>

Obtendremos el siguiente resultado:


Usando JSTL IF
Felicidades ustes ha aprobado con nota: 20.0


Usando JSTL CHOOSE
Es sábado


Usando JSTL FOR



jueves, 26 de diciembre de 2019

Instalar Apache TOMCAT

Descarga

Para ello debemos dirigirnos al sitio oficial de Apache TOMCAT mediante la búsqueda en un buscador como "Google" u otro de nuestra preferencia. Caso contrario ingresar al Link: https://tomcat.apache.org/download-90.cgi



Luego descargar el que se desee según el sistema operativo que posean:

  • 32-bit Windows zip (pgp, sha512): nos descarga para una arquitectura de 32 bits
  • 64-bit Windows zip (pgp, sha512): nos descarga para una arquitectura de 64 bits
  • 32-bit/64-bit Windows Service Installer (pgp, sha512): nos descarga un instalador para arquitecturas de 32 o 64 bits


En mi caso elegí el comprimido de 64 bits, luego descomprimir el archivo en donde deseemos tener nuestro servidor, por ejemplo:


Creando usuarios

En algunas aplicaciones, nos requerirá emplear un usuario. Para ello, nos dirigimos a la carpeta de descarga del servidor y ubicamos el archivo XML llamado: "tomcat-users.xml"

Abrimos el archivo y buscamos casi al final las siguientes líneas

<!--
  <role rolename="tomcat"/>
  <role rolename="role1"/>
  <user username="tomcat" password="<must-be-changed>" roles="tomcat"/>
  <user username="both" password="<must-be-changed>" roles="tomcat,role1"/>
  <user username="role1" password="<must-be-changed>" roles="role1"/>
-->


Agregamos luego:
<user username="root" 
password="tomcat" 
roles="manager-script,admin,manager-gui" />

Ahí indicamos un nuevo usuario con nombre "root" y contraseña "tomcat" y los roles de:

  • manager-script
  • admin
  • manager-gui


Configurando el servidor en Eclipse

Abrimos Eclipse, luego vamos a crear un proyecto web dinámico

Posteriormente, agregamos un "Runtime", dándole clic al botón "New Runtime..." ahí seleccionamos la versión del Apache que hemos descargado y deseamos conectar. Además, podemos crear un Servidor local. Luego le damos clic a "Finalizar"


Observaremos en el lado de los proyectos que se creó uno nuevo llamado Servers y si lo expandimos encontraremos nuestro servidor. Desde la consola podemos iniciar nuestro servidor, pero si lo deseamos ver funcionando terminamos de crear el proyecto web dinámico y creamos un JSP, luego hacemos ejecutar el proyecto en el servidor ("Run on Server")


 Podremos apreciar un URL, podemos copiarlo a un navegador y con ello finalizado la instalación y configuración.

Configurando el servidor en NetBeans

Abrimos NetBeans y nos vamos a la sección de Servicios (si no se ven puedes ingresar Ctrl + 5 o desde el menú "Window" o ventanas).

Damos clic derecho y agregar un nuevo servidor en la opción "Server" o servidores como se aprecia en la siguiente imagen.


Seleccionamos un nuevo servidor de Apache Tomcat


Especificamos la ruta donde se descomprimió la carpeta, ingresamos las credenciales "root" con "tomcat" y desmarcamos la opción de crear un usuario.



Iniciamos el servidor, quizás nos pedirá usuario y contraseña, ingresamos las credenciales indicadas al inicio en el XML y luego clic a Aceptar y el servidor iniciará




Así tenemos el Apache configurado tanto para Eclipse como para Netbeans.


domingo, 13 de octubre de 2019

Crear un proyecto web con Java en NetBeans 8.2

Debemos seguir los siguientes pasos:


Primero: debemos iniciar el NetBeans, acto seguido seleccionar en "File" o "Archivo" la opción de "New Project..." o "Nuevo Proyecto...". También, podemos usar la combinación de teclas Ctrl + Shift + N o darle clic a la metáfora de nuevo proyecto como se observa en la siguiente imagen.

Fuente: elaboración propia.

Segundo: luego aparecerá una ventana flotante donde seleccionaremos la categoría "Java Web" y el tipo de proyecto "Web Application".

Fuente: elaboración propia.

Tercero:Luego debemos elegir un nombre para el proyecto y su ubicación.

Fuente: elaboración propia.

Cuarto:Seleccionar el servidor, la versión del Java EE y la ruta: en este caso se eligió el Tomcat (puede ser GlassFish), la versión 7 del EE y la ruta será /Demo.

Fuente: elaboración propia.

Quinto: Luego podemos elegir un Framework, dependiendo de la envergadura del proyecto se elige uno o ninguno.

Fuente: elaboración propia.

Sexto:Finalmente, comprobamos la creación del proyecto.

Fuente: elaboración propia.



Ahora podemos empezar a programar las distintas partes de nuestro proyecto.

Conectar MySql o MariaBD con Java (NetBeans)

Se necesita lo siguiente:
  • NetBeans IDE 8.2 o superior.
  • Tener instalado el JDK versión 8 o superior.
  • Tener Instalado MySql versión  5.7.24 o superior, en caso de MariaBD la versión 10.3.12 o superior

El servidor de bases de datos

En este caso debemos tener conocimiento del URL de la base de datos, el puerto que emplea (3306 para MySql y 3307 para MariaBD), el usuario y contraseña.

Creamos una clase llamada "ConectaBD" dentro del paquete "biblioteca" y definimos 4 constantes:
  • URL: que contiene la dirección del servidor de base de datos, en este caso "jdbc:mysql".
  • DRIVER: dirección del driver de conexión de bases de datos, en este caso el driver de MySQL.
  • USER: el usuario, en este caso usamos root.
  • PASS: la constraseña, en este caso está vacía.
El código sería:

package biblioteca;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;


public class ConectaBD {
    private final String URL = "jdbc:mysql://localhost:3306/blog";
    private final String DRIVER = "com.mysql.jdbc.Driver";
    private final String USER = "root";
    private final String PASS = "";
    
    public Connection conexionDB() throws SQLException{
    Connection c = null;
        try {
            Class.forName(DRIVER).newInstance();
            c = DriverManager.getConnection(URL, USER, PASS);
        } catch (ClassNotFoundException | 
                 IllegalAccessException | 
                 InstantiationException | 
                 SQLException e) {
            throw new SQLException(e.getMessage());
        }
    
    return c;
    }
}


Se emplea las clases: "Connection", "DriverManager" y "SQLException".