当目录不存在以及文件已经在 Servlet 中使用相同的前缀创建时,我想处理异常。
如果我的 servlet 在收到请求后将 PDF 写入FileOutputStream
并成功发送重定向到上一个收据页面,我不希望有一条消息解释写入请求范围的原因。
但是当目录不存在时(目录变量引入了类似的路径'D:\pdf'
)或者如果存在类似的命名文件,我想在请求范围内发送示例错误消息。
那么我的条件表达式是否正确?我是否正在使用FileOutputStream
以及ServletOutputStream
它的本意?我读过一个 servlet 可以发送到ServletOutputStream
或写入到PrintWriter
.
我将非常有义务提供任何指导或将我送到正确的方向。
这是servlet的重写方法,
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("headr " + request.getHeader("referer"));
// response.setContentType("application/pdf");
// response.setHeader("content-disposition", "attachment; filename=pdf.pdf");
// response.setStatus(HttpServletResponse.SC_NO_CONTENT);
String prefix = request.getParameter("prefix");
String no = request.getParameter("no");
String html = request.getParameter("source");
String directory = new SibsDelegate().getDirectoryPath();
File file = new File(directory);
if ( file.exists() && !new File(file, "prefix"+"-"+"no").exists())
{
System.out.println("exists");
try
{
HtmlCleaner cleaner = new HtmlCleaner();
CleanerProperties props = cleaner.getProperties();
TagNode node = cleaner.clean(html);
// OutputStream os = response.getOutputStream();
final XmlSerializer xmlSerializer = new PrettyXmlSerializer(props);
final String html1 = xmlSerializer.getAsString(node);
ITextRenderer renderer = new ITextRenderer();
renderer.setDocumentFromString(html1);
renderer.layout();
String filename = prefix + "-" + no +".pdf";
String fileNameWithPath = "D:\\pdf\\" + filename;
FileOutputStream fos = new FileOutputStream( fileNameWithPath, false);
renderer.createPDF( fos );
fos.close();
System.out.println( "PDF: '" + fileNameWithPath + "' created." );
RequestDispatcher rd = null;
// set message in request scope -- TODO
request.getRequestDispatcher("Common_Receipt.jsp").forward(request, response);
// response.sendRedirect("Common_Receipt.jsp");
}
catch (Exception ex)
{
ex.printStackTrace();
}
finally
{
// fos.close();
}
}
}