我对某些代码未提供预期的响应有疑问:
Intellij / Payara提供此错误:
[2019-10-26T21:26:35.875 + 0200] [Payara 5.193] [警告] [] [javax.enterprise.web] [tid:_ThreadID = 30 _ThreadName = http-thread-pool :: http-listener -1(3)] [timeMillis:1572117995875] [levelValue:900] [[ StandardWrapperValve [FileUploadServlet]:Servlet FileUploadServlet的Servlet.service()抛出异常 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-2019 23: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: ""
在servlet之后,我使用它们将变量传递给JSP:
<%
HttpSession file = request.getSession(false);
String resultaat= (String)file.getAttribute("Bericht");
%>
并且:
<%out.println(resultaat);%>
通过设置正确的文件属性并删除了finally语句来解决,而不是使用二态布尔值来解决。
答案 0 :(得分:1)
传入请求根本不包含名为uploadcode
的参数。这意味着request.getParameter()
调用返回null
,并尝试通过Integer.parseInt
将其转换为int依次产生NullPointerException
。
因此,您输入了uploadcode
,或者您的JavaScript和/或HTML中存在错误。