Buenas a todos,
queria crear para el tipico backend que mostrara todas las imagenes con su respectivo nombre.
He utilizado en la servlet el que muestre la imagen de la bbdd ya convirtiendo el contenido binario en jpg.
Despues en JSP realizaria una nueva consulta para mostrar los campos String.
Y en una etiqueta img llamaria a la servlet para mostrar la imagen en el tamaño deseado(ya que la servlet la muestra en tamaño grande).
El problema que encuentro es que en el JSP muestra la imagen pero no muestra el campo String nombre.
Subo el codigo, gracias por las ideas!
Servlet:
package Imagenes;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.sql.*;
import javax.imageio.ImageIO;
import java.io.ByteArrayInputStream;
import javax.servlet.ServletOutputStream;
import java.awt.image.BufferedImage;
@WebServlet(urlPatterns = {"/select"})
public class select extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
ServletOutputStream ouputStream = response.getOutputStream();
try {
String d = "com.mysql.jdbc.Driver";
Class.forName(d);
String sURL = "jdbc:mysql://localhost:3306/imagenes";
Connection Conexion;
Conexion = DriverManager.getConnection(sURL, "root", "oldViews17");
PreparedStatement misentencia;
misentencia = Conexion.prepareStatement("SELECT Nombre,Imagen FROM Imagenes where Nombre='rosa'");
ResultSet rs = misentencia.executeQuery();
while (rs.next()) {
Blob blob = rs.getBlob("Imagen");
byte[] data = blob.getBytes(1, (int) blob.length());
BufferedImage img = null;
img = ImageIO.read(new ByteArrayInputStream(data));
response.setContentType("image/jpeg");
response.setHeader("content-disposition",
"inline; fileName=\"001.jpg\"");
int length = -1;
ByteArrayOutputStream output = new ByteArrayOutputStream();
output.write(data, 0, data.length);
response.setContentType("image/jpeg ");
response.setHeader("content-disposition",
"inline; fileName=\"foto.jpg\"");
response.setContentLength(output.size());
OutputStream out = response.getOutputStream();
output.writeTo(out);
out.flush();
out.close();
}
} catch (IOException ex) {
} catch (SQLException ex) {
}
catch(ClassNotFoundException ex)
{
}
}
}
JSP:
<%@page import="Imagenes.*" %>
<%@page import="java.sql.*" %>
<%@page import="java.io.*" %>
<%@page import="javax.servlet.http.*" %>
<%@page import="javax.imageio.ImageIO" %>
<%@page import="javax.servlet.ServletOutputStream" %>
<%@page import="java.awt.image.BufferedImage" %>
<jsp:setProperty name="imagen" property="*" />
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<HTML ><HEAD><TITLE>AIRPHONE</TITLE><META charset='utf-8'/><link rel='stylesheet' type='text/css' href='http://192.168.4.144/Styles/style.css'/></HEAD><BODY><HEADER><H1>Mostrar Imagenes</H1></HEADER><H2>Imagenes</H2><SECTION id='content'>
<TABLE><TR><TD >Nombre</TD><TD>FOTO</TD></TR>
<%
try {
String d = "com.mysql.jdbc.Driver";
Class.forName(d);
String sURL = "jdbc:mysql://localhost:3306/imagenes";
Connection Conexion;
Conexion = DriverManager.getConnection(sURL, "root", "oldViews17");
PreparedStatement misentencia;
misentencia = Conexion.prepareStatement("SELECT Nombre,Imagen FROM Imagenes where Nombre='rosa'");
ResultSet rs = misentencia.executeQuery();
String nombre = rs.getString("Nombre");
%>
<th><td ><%=nombre %></td></th>
<%
}
catch (SQLException ex) {
}
catch(ClassNotFoundException ex)
{
}
%>
<th><td ><img src="http://localhost:8080/SubirImagenes/select" width="190px" height="100px" align="right"></td></th>
</table>
</form>
</body>
</html>