每当我选择一个大小超过50MB的文件进行上传时,我的JBoss服务器就会抛出异常并且JSP正在挂起。因此,我不必在Java服务器端验证文件大小,而是在客户端验证它。但我找不到任何适当的方法。有人可以帮助我吗?我无法使用任何Flash上传功能。
答案 0 :(得分:2)
您不希望对此使用客户端验证。不仅JS无法访问文件元数据,而且JS也可以关闭甚至完全欺骗。
至于具体问题,听起来好像你在JSP文件而不是普通的Java(Servlet)类中解析上传的文件。因为JSP是HTTP响应的视图技术的一部分,所以JSP的输出中途抛出的任何异常,服务器都不能再将HTTP响应更改为错误页面。客户端很可能最终得到一个带有半烘焙HTML源的空白页面,因为JSP输出突然被中止。
要解决此问题,您应该avoiding Java code in JSP files并将Java代码放在普通的Java类中。在这种特殊情况下,您希望使用servlet。让表单提交到servlet而不是JSP。
<form action="uploadServlet" method="post">
以下是doPost()
方法应如何显示的启动示例:
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
// Parse file upload.
// At end, forward request/response to JSP to present results in HTML.
request.getRequestDispatcher("/WEB-INF/results.jsp").forward(request, response);
} catch (FileUploadException e) { // Or whatever exception it is throwing.
throw new ServletException("File upload failed", e);
}
}
这样,异常将以默认的HTTP 500错误页面结束,您可以在web.xml
中自定义如下
<error-page>
<exception-type>com.something.FileUploadException</exception-type>
<location>/someFileUploadErrorPage.jsp</location>
</error-page>
或者,您也可以将错误消息设置为属性并转发到同一JSP,并以相同的形式以用户友好的方式显示错误,而不是抛出ServletException
。您可以在servlet wiki page。