英文:
Referencing servlet in HTML file for .war file in Tomcat
问题
我已经为部署在Tomcat上的Java(.war)应用程序创建了一个index.html文件。
我已经有一个Java Servlet文件,用于查询远程数据库服务器中存储的图片。
Java Servlet文件名为ImageServlet.java。
我需要HTML页面显示ImageServlet.java查询到的图片。
我只是不知道如何引用这个Servlet,因为它会检索我的图片。
以下是ImageServlet文件的内容:
package test;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.bind.DatatypeConverter;
public class ImageServlet extends HttpServlet {
Connection con = null;
public Connection getConnection() {
// ... // 在这里是获取数据库连接的代码
}
public static byte[] getImageById(Connection con) {
// ... // 在这里是查询并获取图片数据的代码
}
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
PrintWriter out = res.getWriter();
Connection con = null;
con = getConnection();
byte[] data = getImageById(con);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
baos.write(data);
out.println("<!DOCTYPE html><html xmlns=\"http://www.w3.org/1999/xhtml\"><head><title>PI_SQLogo.png</title></head><body><img src='data:image/png;base64,"
+ DatatypeConverter.printBase64Binary(baos.toByteArray()) + "'></body></html>");
out.close();
}
}
英文:
I have created an index.html file for a Java (.war) application that I deployed on tomcat.
I already have a Java Servlet file that queries a remote db server for a picture i stored there.
The java servlet file is called ImageServlet.java.
I need the HTML page to display that image that the ImageServlet.java queries.
I just don't know how I'm able to reference to the servlet as it retrieves my picture.
Below is the ImageServlet file:
package test;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.bind.DatatypeConverter;
public class ImageServlet extends HttpServlet
{
Connection con = null;
public Connection getConnection()
{
try {
Class.forName("com.mysql.jdbc.Driver");
String url = System.getenv("FUJI_MYSQL_URL");
return DriverManager.getConnection(url,
System.getenv("FUJI_MYSQL_USER"), System.getenv("FUJI_MYSQL_PASS"));
}
catch (Exception ex)
{
System.out.println(ex.getMessage());
}return null;
}
public static byte[] getImageById(Connection con)
{
String query = "select photo from photos where picid = 1";
try
{
PreparedStatement stmt = con.prepareStatement(query);
stmt.execute();
ResultSet resultSet = stmt.getResultSet();
resultSet.first();
Blob blob = resultSet.getBlob(1);
stmt.close();
con.close();
return blob.getBytes(1L, (int)blob.length());
} catch (Exception ex) {
System.out.println(ex.getMessage());
}return null;
}
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException
{
PrintWriter out = res.getWriter();
Connection con = null;
con = getConnection();
byte[] data = getImageById(con);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
baos.write(data);
out.println("<!DOCTYPE html><html xmlns=\"http://www.w3.org/1999/xhtml\"><head><title>PI_SQLogo.png</title></head><body><img src='data:image/png;base64," + DatatypeConverter.printBase64Binary(baos.toByteArray()) + "'></body></html>");
out.close();
}
}
专注分享java语言的经验与见解,让所有开发者获益!
评论