我创造了这个 HTML page to accept the data from admin of page and store it in the database
和 html上的this is how the fetched data will be displayed。
以下是JSP中的检索代码。
如何在填写表单时直接将图像存储在数据库中,以及如何将图像与其他数据一起显示回html页面。
<%
Class.forName("org.apache.derby.jdbc.ClientDriver");
Connection con=DriverManager.getConnection("jdbc:derby://localhost:1527/SEM6 ","SEM6","SEM6");
Statement st=con.createStatement();
ResultSet rs=st.executeQuery("Select * from products");
%>
<%
while(rs.next())
{%>
<div class="productblock">
<div class="producttable">
<table>
<tr><a class="linkfill" href="products/<%= rs.getString("pid") %>.html"></a>
<td colspan="2"><span class="red"><%= rs.getString("name") %></span></td>
</tr>
<tr>
<td>ID: <span class="red"><%= rs.getString("pid") %></span></td>
<td rowspan="3"></td>
</tr>
<tr><td>Wattage: <span class="red"><%= rs.getString("watt") %></span></td></tr>
<tr><td>Price: <span class="red"><%= rs.getString("price") %></span></td></tr>
<tr><td colspan="2"><%= rs.getString("s_desc") %></td></tr>
</table>
</div>
</div>
<%
}%>
答案 0 :(得分:1)
您需要将图像存储在二进制文件中。
This article描述了如何在表格中创建二进制高亮。
接收表单帖子的servlet / jsp会将发布的图像加载到二进制文件中。
您还需要编写另一个从数据库中读取图像的servlet。
在html页面中,您可以使用要传递blob ID的图像网址中的servlet来加载。
例如,图像的网址可以是:
<img src="/your-app-context/stream-image?id=blogID" >
或者您也可以使用搜索引擎友好的网址:
<img src="/your-app-context/stream-image/magicmoon-downlight" >
其中magicmoon-downlight是一个唯一的名称,用于标识带有blob的表行。
当然,stream-image是web.xml中配置的servlet路径。
servlet将从url或传递的参数中读取图像的ID,找到表中的行并将二进制文件的内容流回浏览器。
如果您想知道如何流式传输图像,this post包含一个很好的示例(它从文件系统中读取图像,但调整代码并不困难)。使用@Jama
建议的示例请注意他是如何设置内容类型和图像大小的。如果您希望与所有浏览器和搜索引擎友好兼容,这一点很重要。
答案 1 :(得分:1)
我已经使用FileInputStream将图像文件存储在Database中。 这是我在additem.jsp文件中所做的。
try {
String imgpath=request.getParameter("file");
Integer item_id=Integer.parseInt(request.getParameter("item_id"));
Class.forName("org.apache.derby.jdbc.ClientDriver");
Connection con=DriverManager.getConnection("jdbc:derby://localhost:1527/SEM6","SEM6","SEM6");
PreparedStatement psmnt = null;
FileInputStream fis;
File image = new File(imgpath);
psmnt = con.prepareStatement("insert into products(image)"+"values(?)");
fis = new FileInputStream(image);
psmnt.setString(1, item_name);
psmnt.setBinaryStream(2, (InputStream)fis, (int)(image.length()));
int flag= psmnt.executeUpdate();
if(flag>0)
{
%> <jsp:forward page="added.html"></jsp:forward> <%
}
else
{
out.print("Error");
}
}
catch (Exception e){
out.print(e);
}
但是如何从数据库中检索图像并将其显示在HTML页面上?
答案 2 :(得分:1)
要从数据库中检索图像并将其显示在HTML页面上,我创建了一个带有<img>
标记的html文件
<img src="getImage.jsp?pid=1001">
然后我创建了以下getImage.jsp文件
<%@page import="java.io.*,java.util.*,java.sql.*;"%>
<%
int pid =Integer.parseInt(request.getParameter("pid"));
try {
Class.forName("org.apache.derby.jdbc.ClientDriver");
Connection conn = DriverManager.getConnection("jdbc:derby://localhost:1527/SEM6","user","pwd");
Statement stmt = (Statement) conn.createStatement();
ResultSet rs;
rs = stmt.executeQuery("select image from products where pid ="+pid);
if (rs.next()) {
byte[] imgData = rs.getBytes("image");
System.out.println(imgData);
response.setContentType("image/jpg");
OutputStream os = response.getOutputStream();
os.write(imgData);
os.flush();
os.close();
}
} catch (SQLException ex) {
ex.printStackTrace();
}
%>
当调用getImage.jsp时,jsp将输出作为Image文件返回。这就结束了这个问题的目的。