我正在尝试使用java从数据库中读取HTML中的图像。我已经尝试了几种方式,我留下了评论,所以你可以看到我尝试过的。我读过很多类似的问题;然而,似乎没有人完全按照我的意思行事。我当前代码的结果是不显示图像。
我的代码是:
服务器端JAVA从数据库中提取图像:
public static Captcha randomCaptcha() {
//Get connection
MySQLConnection.getConnection();
Captcha captcha = null; // necessary unless you do something in the exception handler
String imageString = null;
PreparedStatement ps = null;
// Create connection/statement variables outside of try block
Connection c = null;
String selectQry = ("SELECT captcha_id, captcha_code " +
"FROM at_captcha " +
"ORDER BY RAND() LIMIT 0,1;");
try {
// Get Connection and Statement from DataSource
c = ds.getConnection();
ps = c.prepareStatement(selectQry);
try {
// Get result set
ResultSet result = ps.executeQuery();
while (result.next()) {
imageString = getCaptchaImageData(result.getString("captcha_id"));
captcha = new Captcha(
result.getString("captcha_id"),
imageString,
result.getString("captcha_code"));
}
// Clean up
ps.close();
c.close();
} catch (SQLException se) {
System.out.println("SQLException in randomCaptcha: " + se.toString());
} catch (Exception e) {
System.out.println("Errors occurred in randomCaptcha: " + e.toString());
}
} catch (SQLException e1) {
System.out.println("SQLException in randomCaptcha: " + e1.toString());
e1.printStackTrace();
} finally {
// Ensure connection is closed and returned to the pool, even if errors occur.
try {
if(ps != null) ps.close();
if(c != null) c.close();
}
catch (Exception e) {
System.out.println("Exception in randomCaptcha: " + e.toString());
}
}
// Done
return captcha;
}
public static String getCaptchaImageData(String id){
//Get connection
MySQLConnection.getConnection();
PreparedStatement ps = null;
String imageDataString = null;
// Create connection/statement variables outside of try block
Connection c = null;
String selectQry = ("SELECT captcha_image " +
"FROM at_captcha " +
"WHERE captcha_id = ?;");
try {
// Get Connection and Statement from DataSource
c = ds.getConnection();
ps = c.prepareStatement(selectQry);
try {
// Read in the image from the database.
ps.setString(1, id);
// Get result set
ResultSet result = ps.executeQuery();
while (result.next()) {
java.sql.Blob imageBlob = result.getBlob(1);
byte[] imageData = imageBlob.getBytes(1, (int) imageBlob.length());
//Convert Image byte array into Base64 String
imageDataString = encodeImage(imageData);
imageDataString = "data:image/jpeg;base64,"+imageDataString;
}
// Clean up
ps.close();
c.close();
} catch (SQLException se) {
System.out.println("SQLException in getCaptchaImageData: " + se.toString());
} catch (Exception e) {
System.out.println("Errors occurred in getCaptchaImageData: " + e.toString());
}
} catch (SQLException e1) {
System.out.println("SQLException in getCaptchaImageData: " + e1.toString());
e1.printStackTrace();
} finally {
// Ensure connection is closed and returned to the pool, even if errors occur.
try {
if(ps != null) ps.close();
if(c != null) c.close();
}
catch (Exception e) {
System.out.println("Exception in getCaptchaImageData: " + e.toString());
}
}
// Done
return imageDataString;
}
客户端JAVA调用服务器端然后传回图像:
@WebServlet("/CaptchaView")
public class CaptchaView extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Find a random Captcha
Captcha aCaptcha = MySQLConnection.randomCaptcha();
//Store the selected Captcha ID for later use
MySQLConnection.setViewDataCaptchaID(aCaptcha.getCaptchaId());
String json = new Gson().toJson(aCaptcha.getCaptchaImage());
//response.setContentType("application/json");
response.resetBuffer();
response.setContentType("image/jpeg");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(json);
}
}
我的JSON调用java然后将图像嵌入到html:
中$('#selectState').on('change', function() {
$.ajax({
type: "POST",
url: "CaptchaView",
cache: false,
data: $(selectState).serialize(),
success: function(data1a){
$('#ajaxGetUserServletResponse').text(data1a);
}
}).done(function(responseJson1a) {
var byte[] img = Base64.decode(responseJson1a, Base64.DEFAULT);
// var img = new Image(esponseJson1a);
dataType: "json",
//$("#captureDisplay").find("image").remove();
// JSON response to populate the image
// $("#img-container").img.src = img;
// $("#img-container").img.setAttribute("class", "banner-img");
// $("#img-container").img.setAttribute("alt", "effy");
// $("#img-container").document.getElementById("img-container").appendChild(img);
$('<img src').object(img).appendTo($("#img-container"));
});
});
我的HTML这是我想要显示图片的地方:
<div class="input-group" id="img-container">
</div>
答案 0 :(得分:0)
详细说明:
随机获取Captcha:
public static Captcha randomCaptcha() {
//Get connection
MySQLConnection.getConnection();
Captcha captcha = null; // necessary unless you do something in the exception handler
String imageString = null;
PreparedStatement ps = null;
// Create connection/statement variables outside of try block
Connection c = null;
String selectQry = ("SELECT captcha_id, captcha_code " +
"FROM at_captcha " +
"ORDER BY RAND() LIMIT 0,1;");
try {
// Get Connection and Statement from DataSource
c = ds.getConnection();
ps = c.prepareStatement(selectQry);
try {
// Get result set
ResultSet result = ps.executeQuery();
while (result.next()) {
imageString = getCaptchaImageData(result.getString("captcha_id"));
captcha = new Captcha(
result.getString("captcha_id"),
imageString,
result.getString("captcha_code"));
}
// Clean up
ps.close();
c.close();
} catch (SQLException se) {
System.out.println("SQLException in randomCaptcha: " + se.toString());
} catch (Exception e) {
System.out.println("Errors occurred in randomCaptcha: " + e.toString());
}
} catch (SQLException e1) {
System.out.println("SQLException in randomCaptcha: " + e1.toString());
e1.printStackTrace();
} finally {
// Ensure connection is closed and returned to the pool, even if errors occur.
// This is *very* important if using a connection pool, because after all the
// connections are used, the application will hang on getConnection(), waiting
// for a connection to become available.
// Any errors from the following closes are just ignored. The main thing is
// that we have definitely closed the connection.
try {
if(ps != null) ps.close();
if(c != null) c.close();
}
catch (Exception e) {
System.out.println("Exception in randomCaptcha: " + e.toString());
}
}
// Done
return captcha;
}
public static String getCaptchaName(String captchaID) {
//Get connection
MySQLConnection.getConnection();
String captchaName = null; // necessary unless you do something in the exception handler
PreparedStatement ps = null;
// Create connection/statement variables outside of try block
Connection c = null;
String selectQry = ("SELECT captcha_code " +
"FROM at_captcha " +
"WHERE captcha_id = ?");
try {
// Get Connection and Statement from DataSource
c = ds.getConnection();
ps = c.prepareStatement(selectQry);
try {
ps.setString(1, captchaID);
// Get result set
ResultSet result = ps.executeQuery();
while (result.next()) {
captchaName = result.getString("captcha_code");
}
// Clean up
ps.close();
c.close();
} catch (SQLException se) {
System.out.println("SQLException in getCaptchaName: " + se.toString());
} catch (Exception e) {
System.out.println("Errors occurred in getCaptchaName: " + e.toString());
}
} catch (SQLException e1) {
System.out.println("SQLException in getCaptchaName: " + e1.toString());
e1.printStackTrace();
} finally {
// Ensure connection is closed and returned to the pool, even if errors occur.
// This is *very* important if using a connection pool, because after all the
// connections are used, the application will hang on getConnection(), waiting
// for a connection to become available.
// Any errors from the following closes are just ignored. The main thing is
// that we have definitely closed the connection.
try {
if(ps != null) ps.close();
if(c != null) c.close();
}
catch (Exception e) {
System.out.println("Exception in getCaptchaName: " + e.toString());
}
}
// Done
return captchaName;
}
爪哇:
@WebServlet("/CaptchaView")
public class CaptchaView extends HttpServlet implements Serializable {
private static final long serialVersionUID = 1L;
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Find a random Captcha
Captcha aCaptcha = MySQLConnection.randomCaptcha();
//Store the selected Captcha ID for later use
MySQLConnection.setViewDataCaptchaID(aCaptcha.getCaptchaId());
String json = aCaptcha.getCaptchaImage();
json = "<img src=" + json + " width='250' alt='captcha image' >";
//response.setContentType("application/json");
response.resetBuffer();
response.setContentType("image/jpeg");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(json);
}
}
的Ajax:
$.ajax({
type: "POST",
url: "CaptchaView",
cache: false,
success: function(data1a){
//$('#ajaxGetUserServletResponse').text(data1a);
},
error: function() {
$("#selectState").focus();
$('#ajaxGetUserServletResponse').text('An error occured getting the Captcha image');
}
}).done(function(responseJson1a) {
//alert($(responseJson1a).val());
//alert($(responseJson1a));
dataType: "json";
$("#img-container").find("img").remove();
// JSON response to populate the image
$(responseJson1a).appendTo($("#img-container"));
});
HTML:
<!-- Place for Captcha image -->
<div class="input-group" id="img-container">
</div>