Java 异常后如何转发?

Java 异常后如何转发?,java,servlets,Java,Servlets,捕获异常后,如何将异常转发到产生异常的同一操作? 行getServletContext().getRequestDispatcher(“/local.action”).forward(请求,响应)无效 @WebServlet("/FileUploadServlet1") @MultipartConfig( fileSizeThreshold = 1024 * 1024 * 1, // 1 MB maxFileSize = 1024 * 1024 * 3 ) //

捕获异常后,如何将异常转发到产生异常的同一操作? 行
getServletContext().getRequestDispatcher(“/local.action”).forward(请求,响应)无效

@WebServlet("/FileUploadServlet1")
@MultipartConfig(
        fileSizeThreshold = 1024 * 1024 * 1, // 1 MB
        maxFileSize = 1024 * 1024 * 3 ) // 3 MB
public class FileUploadServlet1 extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        try {
            ...
            try {
                for (Part part : request.getParts()) {
                    fileName = getFileName(part);               
                    part.write(uploadFilePath + File.separator + fileName);
                }
            } catch (IllegalStateException e) {
                throw new Exception("Image was not uploaded");
            }
            ...
        } catch (Exception ex) {
            request.setAttribute("message", ex.getMessage());
            System.out.println("forward");          
            getServletContext().getRequestDispatcher("/local.action").forward(request, response); // this has no effect

        }
    }
...

这是因为在HTTP连接中,服务器只能返回响应浏览器请求的响应。在这种情况下,浏览器仍在发送其请求,但服务器在引发异常时停止接受该请求。如果您试图在这一点上转发或返回一个错误页,那么它将不起作用,因为浏览器还没有准备好接收服务器的响应(它仍然处于发送请求的中间)。浏览器显示了它的“连接重置”错误,因为从它的角度来看,这就是发生的事情:它正处于发送请求的中间,并且被中断。 最大文件大小是指安全检查,因此您可以中止服务器无法处理的过大文件。例如,如果浏览器开始发送一个100 GB的文件,您可能不希望应用程序花费时间来读取和存储它,而只需要立即删除它,因为它太大而无法处理,或者让它占用您所有的磁盘空间


为了更好地响应用户,您可以将此限制设置为服务器可以合理处理的最大大小。然后,在收到文件后检查该文件,如果该文件大于3 MB,则将其删除并返回一个错误页面。

无效客户端收到什么响应?@SotiriosDelimanolis客户端收到“连接已重置。在页面加载期间,与服务器的连接已重置。bla bla”所以,如果我们在servlet MultipartConfig中生成maxFileSize选项的cathing异常之后不能转发,那么maxFileSize会有什么好处呢?您的servlet映射是什么样子的?当您的重定向没有在异常块中发生时会发生什么?所以您是说没有“恢复”的方法点击@MultipartConfig max size之后?客户端将始终点击浏览器的“连接已重置”错误页?