我有一個具有簡單上傳功能的Web應用程序。這個想法是讓用戶選擇一個文件,併成功上傳後,重定向到index.jsp
。Servlet中的response.sendRedirect()在文件上傳後無法正常工作
但是,雖然文件已上傳,但response.redirect
不起作用。成功上傳後,該頁面不會重定向。它只是呆在那裏。奇怪的是,我可以看到它正在處理來自tomcat服務器日誌的index.jsp
,即使它沒有被重定向。
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//processRequest(request, response);
boolean status=false;
if (!ServletFileUpload.isMultipartContent(request)) {
throw new IllegalArgumentException("Request is not multipart, please 'multipart/form-data' enctype for your form.");
}
ServletFileUpload uploadHandler = new ServletFileUpload(new DiskFileItemFactory());
PrintWriter writer = response.getWriter();
response.setContentType("text/plain");
try {
List<FileItem> items = uploadHandler.parseRequest(request);
for (FileItem item : items) {
if (!item.isFormField()) {
File file = new File(getServletContext().getRealPath("/WEB-INF/upload"), item.getName());
item.write(file);
writer.write("{\"name\":\"" + item.getName() + "\",\"type\":\"" + item.getContentType() + "\",\"size\":\"" + item.getSize() + "\"}");
}
}
//redirect to index.jsp if successfully
redirect(request, response);
} catch (FileUploadException e) {
throw new RuntimeException(e);
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
writer.close();
}
}
重定向方法:
private void redirect(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.getRequestDispatcher("/index.jsp").forward(request, response);
}
文件上載插件是從https://aquantum-demo.appspot.com/file-upload
我使用的前端和開發用java apache的文件上傳上載事件處理程序。一切工作正常,除了重定向部分。
它處理JSON返回的文件的application.js:
$(function() {
// Initialize jQuery File Upload (Extended User Interface Version):
$('#file_upload').fileUploadUIX();
// Load existing files:
$.getJSON($('#file_upload').fileUploadUIX('option', 'url'), function (files) {
var options = $('#file_upload').fileUploadUIX('option');
options.adjustMaxNumberOfFiles(-files.length);
$.each(files, function (index, file) {
options.buildDownloadRow(file, options)
.appendTo(options.downloadTable).fadeIn();
});
});
});
任何想法?
該代碼看起來不錯。但是,如果您在'try'之前取消註釋兩個outcomments中的一個,那麼重定向確實可能會失敗(在服務器日誌中帶有「IllegalStateException」)。你真的在運行你認爲你正在運行的代碼嗎? – BalusC
我設法追查了這個問題。是的,你是對的,上傳處理程序工作正常。問題在於正在運行的前端js腳本。每次成功上傳後,都需要返回一個JSON響應,這會導致之後附加的任何代碼失敗。我編輯了上面的代碼來顯示問題。有沒有解決這個問題? – Queryer