Hello! I would be very gratefull if you could find where is my problem and how can I fix it. (java.lang.NullPointerException)
index.html:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <h3>File Upload:</h3> <form action="UploadServlet" method="post" enctype="multipart/form-data"> <br><br><br><br><br> Insert your ID (marca) - ex: 101358 <br> <input type="text" name="rid" size="40" /> <br><br> Browse your files: <br> <input type="file" name="file" size="30" /> <br /> <br/> <input type="file" name="file" size="30" /> <br /> <br> <input type="submit" value="Upload File" /> </form> </body> </html>
UploadServlet.java
public class UploadServlet extends HttpServlet { /** * */ private static final long serialVersionUID = 1L; private boolean isMultipart; private String filePath; private int maxFileSize = 50 * 1024; private int maxMemSize = 4 * 1024; private File file ; public void init( ){ // Get the file location where it would be stored. filePath = getServletContext().getInitParameter("file-upload"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { // Check that we have a file upload request isMultipart = ServletFileUpload.isMultipartContent(request); response.setContentType("text/html"); java.io.PrintWriter out = response.getWriter( ); if( !isMultipart ){ out.println("<html>"); out.println("<head>"); out.println("<title>Servlet upload</title>"); out.println("</head>"); out.println("<body>"); out.println("<p>No file uploaded</p>"); out.println("</body>"); out.println("</html>"); return; } DiskFileItemFactory factory = new DiskFileItemFactory(); // maximum size that will be stored in memory factory.setSizeThreshold(maxMemSize); // Location to save data that is larger than maxMemSize. factory.setRepository(new File("c:\\temp")); // Create a new file upload handler ServletFileUpload upload = new ServletFileUpload(factory); // maximum file size to be uploaded. upload.setSizeMax( maxFileSize ); try{ // Parse the request to get file items. List fileItems = upload.parseRequest(request); // Process the uploaded file items Iterator i = fileItems.iterator(); out.println("<html>"); out.println("<head>"); out.println("<title>Servlet upload</title>"); out.println("</head>"); out.println("<body>"); //while ( i.hasNext () ) //{ FileItem fi = (FileItem)i.next(); if ( !fi.isFormField () ) { // Get the uploaded file parameters //String fieldName = fi.getFieldName(); String fileName = fi.getName(); //String contentType = fi.getContentType(); //boolean isInMemory = fi.isInMemory(); //long sizeInBytes = fi.getSize(); // Write the file if( fileName.lastIndexOf("\\") >= 0 ){ file = new File( "C:/UploadedFiles/" + fileName.substring( fileName.lastIndexOf("\\"))) ; }else{ file = new File( "C:/UploadedFiles/" + fileName.substring(fileName.lastIndexOf("\\")+1)) ; } fi.write( file ) ; out.println("Uploaded Filename: " + fileName + " --- saved in C:/UploadedFiles/ " + "<br>"); } FileItem fi2 = (FileItem)i.next(); if ( !fi2.isFormField () ) { // Get the uploaded file parameters //String fieldName2 = fi2.getFieldName(); String fileName2 = fi2.getName(); //String contentType2 = fi2.getContentType(); //boolean isInMemory = fi2.isInMemory(); //long sizeInBytes = fi2.getSize(); // Write the file if( fileName2.lastIndexOf("\\") >= 0 ){ file = new File( "C:/UploadedFiles/" + fileName2.substring( fileName2.lastIndexOf("\\"))) ; }else{ file = new File( "C:/UploadedFiles/" + fileName2.substring(fileName2.lastIndexOf("\\")+1)) ; } fi2.write( file ) ; out.println("Uploaded Filename: " + fileName2 + " --- saved in C:/UploadedFiles/ " + "<br>"); } //} out.println("</body>"); out.println("</html>"); String idmarca = request.getParameter("rid"); String itemName1 = fi.getName(); String path1 = new String("C:\\UploadedFiles\\" + itemName1.substring(itemName1.lastIndexOf("\\"))); String itemName2 = fi2.getName(); String path2 = new String("C:\\UploadedFiles\\" + itemName2.substring(itemName2.lastIndexOf("\\"))); Connection con = null; PreparedStatement ps; try{ String driver = "sun.jdbc.odbc.JdbcOdbcDriver"; Class.forName(driver); String db = "jdbc:odbc:upload"; con = DriverManager.getConnection(db, "", ""); String sql = "INSERT INTO file1(marca,file1,file2) VALUES(?, ?, ?)"; ps = con.prepareStatement(sql); ps.setString(1, idmarca); ps.setString(2, path1); ps.setString(3, path2); int s = ps.executeUpdate(); if(s>0){ System.out.println("Uploaded successfully !"); } else{ System.out.println("Error!"); } } catch(Exception e){ e.printStackTrace(); } finally { // close all the connections. //ps.close(); //con.close(); } }catch(Exception ex) { ex.printStackTrace(); } } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { throw new ServletException("GET method used with " + getClass( ).getName( )+": POST method required."); } }
java.lang.NullPointerException at UploadServlet.doPost(UploadServlet.java:126) at javax.servlet.http.HttpServlet.service(HttpServlet.java:641) at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:307) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:619)
Problem solved! I had to use null check to the variables before using them to store in database.