<%--
Document : Profile
Created on : Jun 5, 2016, 1:28:02 AM
Author : User
--%>
<%@page import="ServletHolder.Database"%>
<%@page import="java.sql.*"%>
<%@page import="java.io.*"%>
<%
response.setHeader("Cache-Control","no-cache");
response.setHeader("Cache-Control","no-store");
response.setDateHeader("Expires", 0);
response.setHeader("Pragma","no-cache");
HttpSession s=request.getSession();
try{
String a=(String)s.getAttribute("email");
String b=(String)s.getAttribute("password");
if((a.equals("a") && b.equals("b"))){
}else{
response.sendRedirect("index.jsp");
}
}catch(Exception e){
response.sendRedirect("index.jsp");
}
Connection con=Database.getConnection();
PreparedStatement pst;
ResultSet rs;
String c="shakil123@gmail.com";
String ah="";
Blob img;
byte[] imgdata=null;
try{
String al="select * from `uploadpic` where `email`='"+c+"'";
pst=con.prepareStatement(al);
rs=pst.executeQuery();
if(rs.next()){
ah=rs.getString("email");
img=rs.getBlob("pic");
imgdata=img.getBytes(1, (int)img.length());
}
}catch(Exception e){
ah=e.toString();
}
response.setContentType("image/gif");
OutputStream o = response.getOutputStream();
// o.write(imgdata);
// o.flush();
// o.close();
%>
<%@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><!-- onload="noBack()" onpageshow="noBack()">-->
<h1>Profile</h1>
<div span="12">
<div sapan="9">
<p><strong> Hello User Welcome!!!</strong></p>
<img src="scrum-chart.jpg" alt="Mountain View" style="width:200px;"><br>
<p><%=ah%><p>
<img src="<%
o.write(imgdata);
o.flush();
o.close();
%>" alt="Profile Picture" width="200" title="Profile Picture">
</div>
<div sapan="3">
<p><strong> Advertisement</strong></p>
</div>
</div>
<a href="Editprofile.jsp"> Edit Profile</a><br>
<form action="Logout" method="post">
<input type="submit" value="Logout">
</form>
</body>
</html>
但问题是,当我访问我的个人资料时,它只显示数据库中的图像。这只是检索到的图像显示在页面中,但其他代码不起作用,其他属性未显示在页面中.. ..
答案 0 :(得分:0)
您的代码无法使用,因为您正在混合html页面和图像中的二进制数据。
您只需发送图像的二进制数据,而不是链接到图像。
要解决此问题,您需要创建另一个servlet,它将发送图像。
您还可以创建base64字符串并使用数据源:How to display Base64 images in HTML?
此代码的另一个问题:您可以使用电子邮件查询参数注入SQL。我假设您将编辑代码以使用查询参数email作为SQL参数。切勿将字符串连接与不安全参数一起使用。更好地使用PreparedStatement
String al="select * from `uploadpic` where `email`='"+c+"'";
<强>更新强> 我刚看到,你使用的是session而不是查询参数。但问题是一样的。
答案 1 :(得分:0)
该行
o.write(imgdata);
显示类似的数组[b185 ....
您应该将其转换为String。
创建Java类(例如BlobToString)并添加一个方法(转换)以将Blob转换为String。你可以用这个
public class BlobToString {
public String convert(byte[] blob) {
String str = "";
//read bytes from ByteArrayInputStream using read method
if (blob != null && blob.length > 0) {
for (byte b : blob) {
str = str + (char) b;
}
}
return str;
}
}
将java类BlobToString导入JSP
<%@ page import="my.package.BlobToString" %>
创建新实例
BlobToString blobToString = new BlobToString()
并替换
o.write(imgdata);
通过这一行
o.write(blobToString.convert(imgdata));