当pdf生成失败时,将错误页面提供给portlet资源响应

时间:2013-02-01 17:34:57

标签: java servlets spring-mvc pdf-generation portlet

我有一个资源感知的spring mvc portlet,我用它来提供PDF。以前,我们从portlet提供PDF的方法是链接到servlet以实际编写PDF响应。我们在servlet中的模式基本上是这样的:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        OutputStream out = response.getOutputStream();
        FileInputStream certIn = null;
        try {
            certIn = new FileInputStream(pdfFile);
            if (certIn.available() > 0) {
                while (certIn.available() > 0) {
                    out.write(certIn.read());
                }
                out.flush();
            }                       
        } catch (IOException e) {
            response.reset();
            response.setContentType("text/html");
            getServletContext().getRequestDispatcher("/WEB-INF/jsp/error.jsp").include(request, response);
        } finally {
            if (certIn != null) {
                try {
                    certIn.close();
                } catch (IOException e) {
                    LOG.warn(
                            "Failed to close FileInputStream", e);
                }
            }
            if (out != null) {
                try {
                    out.close();
                } catch (IOException e) {
                    LOG.warn("Failed to close ServletOutputStream", e);
                }
            }
        }
    }

我现在正试图在资源感知portlet中复制它。我遇到的问题是如果我们收到错误,我无法将其重定向到错误jsp。

如果我使用portletContext.getRequestDispatcher()转发到jsp,我得到一个错误,说我不能在getOuputStream()之后调用getWriter()。如果我尝试将spring ModelAndView返回到error.jsp,我会得到相同的错误。

有人建议我在ResourceResponse上调用getOutputStream()之后如何将用户重定向到jsp?

感谢。

1 个答案:

答案 0 :(得分:0)

最后改变了我的工作顺序。现在不要调用getPortletOutputStream(),直到我知道该文件存在且可读。如果在实际写入输出流时失败,则无法为jsp提供服务,但servlet的情况也是如此。