1

我有一个资源感知 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?

谢谢。

4

1 回答 1

0

最后稍微改变了我正在做的事情的顺序。现在在我知道文件存在并且可读之前不要调用 getPortletOutputStream()。如果它在实际写入输出流时失败,它就不能为 jsp 提供服务,但对于 servlet 也是如此。

于 2013-02-04T13:43:21.757 回答