Encuesta de Confianza en Compras Online con JSP, Java y Reportes PDF
Encuesta: Empresa que te genera confianza para compras en internet
A continuación se presenta el código completo de un sistema de encuesta web desarrollado con HTML, JSP y Java, que permite registrar la preferencia de los usuarios, consultar los resultados y generar reportes en PDF con gráficos estadísticos.
1. Página principal de la encuesta (Encuesta.html)
Formulario que permite al usuario seleccionar la empresa en la que más confía para realizar compras en internet.
<html>
<head>
<title>Encuesta</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
h1{color:tomato;font-size:40px}
select{color:red;font-size:45px}
h2{color:#daa520;font-size:30px}
h3{color:#000;font-size:30px}
input[type=submit]{
background-color:khaki;
color:#ff4500;
font-size:20px;
border:none;
padding:10px 20px;
border-radius:5px;
cursor:pointer}
</style>
</head>
<body>
<h1>Encuesta</h1>
<h2>"Empresa que te genera confianza para compras en internet"</h2>
<h3>
<form method="post" action="Encuesta.jsp">
<input type="radio" name="empresa" value="Amazon">Amazon<br><br>
<input type="radio" name="empresa" value="Mercado libre">Mercado libre<br><br>
<input type="radio" name="empresa" value="Temu">Temu<br><br>
<input type="radio" name="empresa" value="Shein">Shein<br><br>
<input type="radio" name="empresa" value="Otro">Otro<br><br>
<input type="radio" name="empresa" value="Ninguno">Ninguno<br><br><br>
<input type="submit" value="Registrar">
</form>
</h3>
</body>
</html>2. Procesamiento del registro (Encuesta.jsp)
Recibe la empresa seleccionada, la almacena mediante el bean Encuesta y muestra un enlace de regreso al inicio.
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<% String empresa = request.getParameter("empresa"); %>
<jsp:useBean id="bd" class="beans.Encuesta">
<jsp:setProperty name="bd" property="nombre" value="<%=empresa%>"/>
<jsp:setProperty name="bd" property="opcion" value="1"/>
<jsp:getProperty name="bd" property="respuesta"/>
</jsp:useBean>
<a href="index.html">Inicio</a>
</body>
</html>3. Páginas de reportes (Reporte1.jsp, Reporte2.jsp y Reporte3.jsp)
Cada página invoca una opción distinta del bean para generar el reporte correspondiente:
- Reporte1.jsp: opción 3, genera un reporte en tabla PDF.
- Reporte2.jsp: opción 4, genera un reporte con gráfico de barras.
- Reporte3.jsp: opción 5, genera un reporte con gráfico circular.
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<jsp:useBean id="bd" class="beans.Encuesta">
<jsp:setProperty name="bd" property="opcion" value="3"/>
<jsp:getProperty name="bd" property="respuesta"/>
</jsp:useBean>
<a href="index.html">Inicio</a>
</body>
</html>4. Clase de negocio (Encuesta.java)
La clase Encuesta del paquete beans gestiona el registro, la consulta y la generación de reportes. Entre sus métodos destacan:
- guardar(): incrementa en uno la frecuencia de la empresa seleccionada en la base de datos.
- buscar(): consulta la tabla
Empresay genera una tabla HTML con los resultados. - CrearReporte1(): genera un PDF con una tabla de empresas, frecuencias y porcentajes.
- CrearBarras() y CrearReporte2(): generan un gráfico de barras 3D y lo incluyen en un PDF.
- CrearPie() y CrearReporte3(): generan un gráfico circular 3D y lo incluyen en un PDF.
package beans;
import com.itextpdf.text.BaseColor;
import java.sql.*;
import com.itextpdf.text.Document;
import com.itextpdf.text.Font;
import com.itextpdf.text.FontFactory;
import com.itextpdf.text.Image;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.File;
import java.io.FileOutputStream;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.*;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.category.DefaultCategoryDataset;
public class Encuesta {
private String nombre, respuesta;
private int idEmpresa, frecuencia, opcion;
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getRespuesta() {
return respuesta;
}
public void setRespuesta(String respuesta) {
this.respuesta = respuesta;
}
public int getIdEmpresa() {
return idEmpresa;
}
public void setIdEmpresa(int idEmpresa) {
this.idEmpresa = idEmpresa;
}
public int getFrecuencia() {
return frecuencia;
}
public void setFrecuencia(int frecuencia) {
this.frecuencia = frecuencia;
}
public int getOpcion() {
return opcion;
}
public void setOpcion(int opcion) {
this.opcion = opcion;
this.opcion = opcion;
switch (opcion) {
case 1: guardar(); break;
case 2: buscar(); break;
case 3: CrearReporte1(); break;
case 4: CrearReporte2(); break;
case 5: CrearReporte3(); break;
}
}
public void buscar() {
try {
Connection c = Conexion.conectar();
if (c != null) {
Statement st = c.createStatement();
ResultSet rs = st.executeQuery("select * from Empresa");
String tabla = "EmpresaFrecuencia";
while (rs.next()) {
tabla += "" + rs.getString(2) + "" + rs.getString(3) + "";
}
tabla += "";
respuesta = tabla;
} else {
respuesta = "No hay conexión en la base";
}
} catch (Exception e) {
respuesta = "Error en buscar";
}
}public void guardar() {
try {
Connection c = Conexion.conectar();
if (c != null) {
PreparedStatement ps = c.prepareStatement("update Empresa set frecuencia = frecuencia + 1 where nombre = ?");
ps.setString(1, nombre);
ps.execute();
respuesta = "Dato almacenado";
} else {
respuesta = "No hay respuesta de la base de datos";
}
} catch (Exception e) {
respuesta = "Error en guardar" + e;
}
}public void CrearReporte1() {
try {
Document documento = new Document();
PdfWriter.getInstance(documento, new FileOutputStream("C://encuesta//Reporte1.pdf"));
documento.open();
Image imagen = Image.getInstance("C://encuesta//logo.JPEG");
imagen.scalePercent(30);
documento.add(imagen);
Paragraph parrafo = new Paragraph();
parrafo.setFont(FontFactory.getFont("Arial", 25, Font.BOLD, BaseColor.BLUE));
parrafo.setAlignment(Paragraph.ALIGN_CENTER);
parrafo.add("\n\n Resultados de la Encuesta \n\n\n");
documento.add(parrafo);
// Crear tabla
PdfPTable tabla = new PdfPTable(3);
tabla.addCell("Empresa");
tabla.addCell("Frecuencia");
tabla.addCell("Porcentaje");
tabla.addCell("Amazon");
tabla.addCell("5");
tabla.addCell("20%");
tabla.addCell("Temu");
tabla.addCell("2");
tabla.addCell("10%");
documento.add(tabla);
documento.close();
respuesta = "Reporte creado";
} catch (Exception er) {
respuesta = "Error al crear Reporte1" + er;
}
}public void CrearReporte2() {
try {
CrearBarras();
Document documento = new Document();
PdfWriter.getInstance(documento, new FileOutputStream("C://encuesta//Reporte2.pdf"));
documento.open();
Paragraph parrafo = new Paragraph();
parrafo.setFont(FontFactory.getFont("Arial", 25, Font.BOLD, BaseColor.BLUE));
parrafo.setAlignment(Paragraph.ALIGN_CENTER);
parrafo.add("\n\n Resultados de la Encuesta \n\n\n");
documento.add(parrafo);
Image imagen = Image.getInstance("C://encuesta//Barras.PNG");
imagen.scalePercent(30);
documento.add(imagen);
documento.close();
respuesta = "Reporte creado";
} catch (Exception er) {
respuesta = "Error al crear Reporte2" + er;
}
}// Crear barras
public void CrearBarras() {
try {
JFreeChart grafico;
int largo = 600, ancho = 400;
DefaultCategoryDataset datos = new DefaultCategoryDataset();
datos.addValue(4, "Amazon", "");
datos.addValue(2, "Temu", "");
datos.addValue(2, "Shein", "");
grafico = ChartFactory.createBarChart3D("Empresas de confianza", "Empresa", "Frecuencia", datos, PlotOrientation.VERTICAL, true, true, true);
ChartUtilities.saveChartAsJPEG(new File("C://encuesta//Barras.jpg"), grafico, largo, ancho);
respuesta = "Gráfico creado";
} catch (Exception er) {
respuesta = "Error al crear gráfico de barras" + er;
}
}public void CrearPie() {
try {
JFreeChart grafico;
int largo = 600, ancho = 400;
DefaultPieDataset datos = new DefaultPieDataset();
datos.setValue("Amazon", 4);
datos.setValue("Temu", 2);
datos.setValue("Shein", 2);
grafico = ChartFactory.createPieChart3D("Empresas de confianza", datos, true, true, true);
ChartUtilities.saveChartAsJPEG(new File("C://encuesta//pie.jpg"), grafico, largo, ancho);
respuesta = "Gráfico creado";
} catch (Exception er) {
respuesta = "Error al crear gráfico circular" + er;
}
}public void CrearReporte3() {
try {
CrearPie();
Document documento = new Document();
PdfWriter.getInstance(documento, new FileOutputStream("C://encuesta//Reporte3.pdf"));
documento.open();
Paragraph parrafo = new Paragraph();
parrafo.setFont(FontFactory.getFont("Arial", 25, Font.BOLD, BaseColor.BLUE));
parrafo.setAlignment(Paragraph.ALIGN_CENTER);
parrafo.add("\n\n Resultados de la Encuesta \n\n\n");
documento.add(parrafo);
Image imagen = Image.getInstance("C://encuesta//pie.jpg");
imagen.scalePercent(30);
documento.add(imagen);
documento.close();
respuesta = "Reporte creado";
} catch (Exception er) {
respuesta = "Error al crear Reporte3" + er;
}
}
}Consideraciones
- Es necesario disponer de la clase
Conexionpara establecer la conexión con la base de datos. - Las librerías iText y JFreeChart deben estar incluidas en el proyecto.
- La tabla
Empresadebe contener las columnasnombreyfrecuencia. - Las rutas
C://encuesta//deben existir antes de generar los reportes.