我有一个资源感知的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?
感谢。
答案 0 :(得分:0)
最后改变了我的工作顺序。现在不要调用getPortletOutputStream(),直到我知道该文件存在且可读。如果在实际写入输出流时失败,则无法为jsp提供服务,但servlet的情况也是如此。