У меня есть вопрос о том, какой код не дает ожидаемого ответа:
Intellij / Payara выдает эту ошибку:
[2019-10-26T21: 26: 35.875 + 0200] [Payara5.193] [ПРЕДУПРЕЖДЕНИЕ] [] [javax.enterprise.web] [tid: _ThreadID = 30 _ThreadName = http-thread-pool :: http-listener-1 (3)] [timeMillis: 1572117995875] [levelValue: 900] [[StandardWrapperValve [FileUploadServlet]: Servlet.service () для сервлета FileUploadServlet вызвал исключение java.lang.NullPointerException в FileUploadServlet.doPost (FileUploadServlet.java:27)
Номер строки в коде для строки содержитint.
public class FileUploadServlet extends HttpServlet {
String result = "";
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
HttpSession file = request.getSession(true);
int uploadcode = Integer.parseInt(request.getParameter("uploadcode"));
int code = 1111;
boolean checkcode = check(uploadcode, code);
if ((checkcode && ((uploadcode != 0))){
try {
Part filePart = request.getPart("fileToUpload");
InputStream fileInputStream = filePart.getInputStream();
File fileToSave = new File("filepath" +filePart.getSubmittedFileName());
Files.copy(fileInputStream, fileToSave.toPath(), StandardCopyOption.REPLACE_EXISTING);
result = "File send and saved";
file.setAttribute("Bericht", result);
} catch (Exception ex){
result = "File not sent, please try again.";
file.setAttribute("Bericht", result);
} finally{
result = "File sent and saved";
file.setAttribute("Bericht", result);
getServletContext().getRequestDispatcher("/Upload.jsp").forward(request, response);
}
} else {
result = "incorrect upload code.";
file.setAttribute("Bericht", result);
getServletContext().getRequestDispatcher("/Upload.jsp").forward(request, response);
}
}
public boolean check(int a, int b) {
return a == b;
}
}
Я ожидаю, что код совпадет с вводом и сохранит файл на диск. Есть указатели? Спасибо:)
Возможно, проблема в форме?
<form id="form1" enctype="multipart/form-data" method="post"
action="FileUploadServlet">
<div id="fileName"></div>
<div id="fileSize"></div>
<div id="fileType"></div>
<input type="number" name="uploadcode" id="uploadcode"
placeholder="Enter upload code" required>
<div>
Select the file to upload:
<br>
<input type="file" name="fileToUpload" id="fileToUpload"
accept="image/*" />
<br>
<br>
<ul class="actions">
<li>
<input type="submit" class="button alt"
value="Send Message" />
</li>
</ul>
</div>
<div id="progressNumber"></div>
<div id="text"></div>
</form>
Или это может быть загрузка java-скрипта:
function uploadFile() {
var fd = new FormData();
fd.append("fileToUpload", document.getElementById('fileToUpload').files[0]);
var xhr = new XMLHttpRequest();
xhr.upload.addEventListener("progress", uploadProgress, false);
xhr.addEventListener("load", uploadComplete, false);
xhr.addEventListener("error", uploadFailed, false);
xhr.addEventListener("abort", uploadCanceled, false);
xhr.open("POST", "FileUploadServlet");
xhr.send(fd);
}
К сожалению (26-10-201923:10), другая ошибка:
[2019-10-26T22:57:54.019+0200] [Payara 5.193] [WARNING] [] [javax.enterprise.web] [tid: _ThreadID=29 _ThreadName=http-thread-pool::http-listener-1(2)] [timeMillis: 1572123474019] [levelValue: 900] [[
StandardWrapperValve[FileUploadServlet]: Servlet.service() for servlet FileUploadServlet threw exception
java.lang.NumberFormatException: For input string: ""
После сервлета я использую их для передачи переменных в JSP:
<%
HttpSession file = request.getSession(false);
String resultaat= (String)file.getAttribute("Bericht");
%>
И:
<%out.println(resultaat);%>
Решается путем установки правильного атрибута файла и удаления оператора finally, а не с использованием логического значения с двумя состояниями.