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