从输入区域返回空值

时间:2018-12-10 11:23:58

标签: java mysql jsp servlets

我正在尝试从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 \ domains \ domain1 \ Generated \ jsp \ JspIpProject \ C:\ Users \ ttcat \ Documents \ NetBeansProjects \ JspIpProject \ build \ web \ uploads \ amihan.jpg(文件名,目录名或卷标语法不正确)

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

1 个答案:

答案 0 :(得分:1)

尝试在您的服务中添加以下注释

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