从和输入区域返回null值



我试图从JSP中的表单标记调用servlet,但我的输入区域上的值返回null,所以我收到了java.lang.NullPointerException的服务器错误,这很奇怪,因为我在点击提交按钮之前就填充了数据

这是表格:

<form action="FileUploadServlet" enctype="multipart/form-data" method="post">
<div class = "col-md-6 col-md-offset-4" id = "articleSection">
<div class = "row" id = "title">
<input type ="text" name = "title" rows = "2" cols = "50" placeholder = "Name of your Article..." id = "artText">
<input type="hidden" name="id" value = '<%=(Integer)session.getAttribute("id")%>'>
</div>
<div id = "image">
<input type="file" name="image" id="fileToUpload">
</div>
<div class = "col-md-2" id = "submit">
<button type="submit" id = "submitBtn" name = "submit" value="articleSubmit">Submit</button>
</div>
</div>
</form>

这是servlet:

public class FileUploadServlet extends HttpServlet {
public static final String UPLOAD_DIR = "uploads";
public String dbFileName = "";
java.sql.Date sqlDate = new java.sql.Date(new java.util.Date().getTime());
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
int id = Integer.parseInt(request.getParameter("id"));
String title = request.getParameter("title");
Part part = request.getPart("image");//
String fileName = extractFileName(part);//file name
String applicationPath = getServletContext().getRealPath("");
String uploadPath = applicationPath + File.separator + UPLOAD_DIR;
System.out.println("applicationPath:" + applicationPath);
File fileUploadDirectory = new File(uploadPath);
if (!fileUploadDirectory.exists()) {
fileUploadDirectory.mkdirs();
}
String savePath = uploadPath + File.separator + fileName;
System.out.println("savePath: " + savePath);
String sRootPath = new File(savePath).getAbsolutePath();
System.out.println("sRootPath: " + sRootPath);
part.write(savePath + File.separator);
File fileSaveDir1 = new File(savePath);
dbFileName = UPLOAD_DIR + File.separator + fileName;
part.write(savePath + File.separator);
try {
Connection con = DatabaseConnection.getCon();
PreparedStatement pst = con.prepareStatement("insert into articles(title, date, user_id, image) values(?,?,?,?)");
pst.setString(1, title);
pst.setDate(2, sqlDate);
pst.setInt(3, id);
pst.setString(4, dbFileName);
pst.executeUpdate();
response.sendRedirect("articleDetails.jsp?name"+title);
} catch (Exception e) {
out.println(e);
}
}
private String extractFileName(Part part) {//This method will print the file name.
String contentDisp = part.getHeader("content-disposition");
String[] items = contentDisp.split(";");
for (String s : items) {
if (s.trim().startsWith("filename")) {
return s.substring(s.indexOf("=") + 2, s.length() - 1);
}
}
return "";
}
}

如果我将表单方法更改为"GET",那么它不会返回null,但我想发布,这样我就可以将文件插入数据库

编辑:

我只需将方法移动到enctype之前,就可以修复nullPointerException,使其看起来像:

<form action="FileUploadServlet" method="POST" enctype="multipart/form-data">
</form>

但现在我得到了这个错误:

java.io.FileNotFoundException:C:\Users\ttcat\Documents/glassfish5\glassfish\domain1\generated\jsp\JspIpProject\C:\Users\ttlcat\Documents \NetBeansProjects\JspIproject\build\web\uloads\amihan.jpg(文件名、目录名或卷标语法不正确(

如何删除此路径?C: \Users\ttcat\Documents\classfish5\classfish\domains\domain1\generated\jsp\JspIpProject\

尝试在servelt 中的注释下面

@WebServlet(name = "FileUploadServlet", urlPatterns = {"/FileUploadServlet"})
@MultipartConfig(maxFileSize = 100 * 1024 * 1024)  // 100MB max
public class FileUploadServlet extends FileUploadServlet {

最新更新