Reputation: 33
Im trying to call a servlet from a form tag in JSP but the values on my input areas are returning null so I get a server error with java.lang.NullPointerException, which is weird since im filling up the data before hitting the submit button
here is the form:
<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>
and here is the 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 "";
}
}
If I change the form method to "GET" then it doesnt return null but I want to post so that I can insert files to the database
EDIT:
I was able to fix the nullPointerException just by moving the method before the enctypeso it would look like:
<form action="FileUploadServlet" method="POST" enctype="multipart/form-data">
</form>
But now I'm getting this error:
java.io.FileNotFoundException: C:\Users\ttcat\Documents\glassfish5\glassfish\domains\domain1\generated\jsp\JspIpProject\C:\Users\ttcat\Documents\NetBeansProjects\JspIpProject\build\web\uploads\amihan.jpg (The filename, directory name, or volume label syntax is incorrect)
how do I remove this path?C:\Users\ttcat\Documents\glassfish5\glassfish\domains\domain1\generated\jsp\JspIpProject\
Upvotes: 1
Views: 123
Reputation: 652
Try to below annotations in your servelt
@WebServlet(name = "FileUploadServlet", urlPatterns = {"/FileUploadServlet"})
@MultipartConfig(maxFileSize = 100 * 1024 * 1024) // 100MB max
public class FileUploadServlet extends FileUploadServlet {
Upvotes: 1