Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 图像Servlet不工作_Java_Jsp_Servlets - Fatal编程技术网

Java 图像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;

嘿,有人能帮我使用servlet吗?servlet是用来在从数据库中获取图像后将图像显示到jsp页面的。下面的My image servlet似乎根本没有在我的浏览器中显示图像,只有一个损坏的图像图标:

@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() %>">
“>

有两个潜在问题

  • 图像URL错误。查看webbrowser开发工具集的HTTP流量监视器(在Chrome/IE9/Firebug中按F12,然后查看网络(工作)部分)。HTTP响应代码必须是2nn/3nn,而不是404。adarshr的答案涵盖了这一点

    “>
    
    另见:

  • 在返回结果集之前,您正在关闭DB连接,但之后仍在尝试访问结果集。这将引发一个
    SQLException
    ,该页面应显示为HTTP 500错误页面。这也应在HTTP流量监视器中显示,甚至在您直接在浏览器的addr中指定图像的URL时也应显示ess酒吧

    您需要重写代码,使其不返回
    ResultSet
    ,而只返回图像内容作为
    byte[]
    ,或者将DB作业移动到servlet内部。在任何情况下,您都不应该创建接受或返回
    ResultSet
    实例的公共方法

    另见:

  • 有两个潜在问题

  • 图像URL错误。请查看Web浏览器开发工具集的HTTP流量监视器(按Chrome/IE9/Firebug中的F12键,然后查看网络(工作)部分)。HTTP响应代码必须是2nn/3nn,而不是404。adarshr的答案涵盖了这一点

    “>
    
    另见:

  • 在返回结果集之前,您正在关闭DB连接,但在返回结果集之后仍在尝试访问结果集。这将抛出一个
    SQLException
    ,它将显示为HTTP 500错误页面。这也应该在HTTP流量监视器中可见,甚至当您直接在浏览器的地址栏中指定图像的URL时也是如此

    您需要重写代码,不返回
    结果集
    ,只返回图像内容作为
    字节[]
    ,或者将DB作业移动到servlet内部。在任何情况下,都不应该创建接受或返回
    ResultSet
    实例的公共方法

    另见:

  • 嗨,谢谢你的回复。我试着用我的来替换它,但它似乎仍然显示一个损坏的图像图标。嗨,谢谢你的回复。我试着用我的替换它,但它似乎仍然显示一个损坏的图像图标。