Java 图像Servlet不工作
嘿,有人能帮我使用servlet吗?servlet是用来在从数据库中获取图像后将图像显示到jsp页面的。下面的My image servlet似乎根本没有在我的浏览器中显示图像,只有一个损坏的图像图标:Java 图像Servlet不工作,java,jsp,servlets,Java,Jsp,Servlets,嘿,有人能帮我使用servlet吗?servlet是用来在从数据库中获取图像后将图像显示到jsp页面的。下面的My image servlet似乎根本没有在我的浏览器中显示图像,只有一个损坏的图像图标: @WebServlet(name = "ImageServlet", urlPatterns = {"/Image"}) public class ImageServlet extends HttpServlet { private DatabaseConnector dataManager;
@WebServlet(name = "ImageServlet", urlPatterns = {"/Image"})
public class ImageServlet extends HttpServlet {
private DatabaseConnector dataManager;
BufferedInputStream input = null;
BufferedOutputStream output = null;
@Override
public void init() {
dataManager = new DatabaseConnector();
}
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Prepare.
String name = request.getPathInfo().substring(1); // Returns "foo.gif". You may want to do nullchecks here to avoid NPE's.
ResultSet resultSet = null;
try {
// Query DB.
resultSet = dataManager.getPhotos(1);
if (resultSet.next()) {
// Image found, prepare response and send it.
response.setContentType(resultSet.getString("contentType"));
response.setContentLength(resultSet.getInt("contentLength"));
response.setHeader("Content-Disposition", "inline;filename=\"" + name + "\"");
input = null;
output = null;
try {
input = new BufferedInputStream(resultSet.getBinaryStream("content"));
output = new BufferedOutputStream(response.getOutputStream());
byte[] buffer = new byte[1024];
for (int length; (length = input.read(buffer)) > -1;) {
output.write(buffer, 0, length);
}
} finally {
if (output != null) {
try {
output.close();
} catch (IOException logOrIgnore) {
}
}
if (input != null) {
try {
input.close();
} catch (IOException logOrIgnore) {
}
}
}
} else {
// No image found, send HTTP 404.
response.sendError(HttpServletResponse.SC_NOT_FOUND);
}
} catch (ClassNotFoundException ex) {
Logger.getLogger(ImageServlet.class.getName()).log(Level.SEVERE, null, ex);
} catch (IllegalArgumentException ex) {
Logger.getLogger(ImageServlet.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException e) {
throw new ServletException("Something failed at SQL/DB level.", e);
} finally {
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException logOrIgnore) {
}
}
}
}
}
我的jsp页面中的图像如下所示:
<img src="/Image/<%= h.getHomeID() %>">
My web.xml也是这样:
ImageServlet
DB.ImageServlet
ImageServlet
/形象/*
如果有人知道为什么没有显示图像,我会很感激的看起来图像servlet的URL是错误的。如果以
/
开头,它会将您带到上下文的根
<img src="${pageContext.request.contextPath}/Image/<%= h.getHomeID() %>">
“>
看起来图像servlet的URL是错误的。如果以/
开头,它会将您带到上下文的根目录
<img src="${pageContext.request.contextPath}/Image/<%= h.getHomeID() %>">
“>
有两个潜在问题
“>
另见:
SQLException
,该页面应显示为HTTP 500错误页面。这也应在HTTP流量监视器中显示,甚至在您直接在浏览器的addr中指定图像的URL时也应显示ess酒吧
您需要重写代码,使其不返回ResultSet
,而只返回图像内容作为byte[]
,或者将DB作业移动到servlet内部。在任何情况下,您都不应该创建接受或返回ResultSet
实例的公共方法
另见:
有两个潜在问题
“>
另见:
SQLException
,它将显示为HTTP 500错误页面。这也应该在HTTP流量监视器中可见,甚至当您直接在浏览器的地址栏中指定图像的URL时也是如此
您需要重写代码,不返回结果集
,只返回图像内容作为字节[]
,或者将DB作业移动到servlet内部。在任何情况下,都不应该创建接受或返回ResultSet
实例的公共方法
另见:
嗨,谢谢你的回复。我试着用我的来替换它,但它似乎仍然显示一个损坏的图像图标。嗨,谢谢你的回复。我试着用我的替换它,但它似乎仍然显示一个损坏的图像图标。