下载servlet的doGet()会抛出NullPointerException

时间:2012-01-14 08:00:54

标签: java servlets java-ee-6

我正在开发一个简单的Web应用程序,其中客户端应该能够通过单击HTML页面中的超链接来下载pdf文件。我正在使用MVC模式.Below是我的Servlet代码:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
    response.setContentType("application/pdf");
    ServletContext ctx = getServletContext();
    InputStream is = ctx.getResourceAsStream("/abc.pdf");

    int read = 0;
    byte [] bytes = new byte[1024];

    OutputStream os = response.getOutputStream();
    while((read = is.read(bytes)) != -1)
    {
        os.write(bytes, 0, read);
    }
    os.flush();
    os.close();
}

我正在使用Apache Tomcat 6.0

以下是我得到的错误:

SEVERE: Servlet.service() for servlet download threw exception
java.lang.NullPointerException
    at BookDownloaderServlet.doGet(BookDownloaderServlet.java:41)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

abc.pdf已正确放置在应用程序上下文下。仍然无法找到这种例外的原因。 善意的帮助。 提前谢谢

2 个答案:

答案 0 :(得分:1)

这一行最有可能是你的问题:

InputStream is = ctx.getResourceAsStream("/abc.pdf");

is已分配给null。它在这里引发了一个例外:

is.read(bytes)

看起来CLASSPATH的根目录中不存在abc.pdf文件。

答案 1 :(得分:0)

尝试将InputStream is = ctx.getResourceAsStream("/abc.pdf");更改为InputStream is = ctx.getResourceAsStream("abc.pdf");

删除/