Tristan
Tristan

Reputation: 33

null value being returned from and input area

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

Answers (1)

ErShakirAnsari
ErShakirAnsari

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

Related Questions