Java: ошибка: java.lang.NullPointerException

У меня есть код, но это не ошибка, это мой код, скажите, пожалуйста, что заставляет мой код работать, я просто хочу загрузить данные из файла csv в Oracle с помощью сервлета, спасибо за дополнительные.

package org.exercise01.web;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

/**
 * Servlet implementation class GreetingServlet
 */
@WebServlet("/GreetingServlet")
public class GreetingServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public GreetingServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        response.getWriter().append("Served at: ").append(request.getContextPath());
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("text/html");  
        PrintWriter out = response.getWriter();

        try {
            InputStream csvfile = null;
            FileItemFactory factory = new DiskFileItemFactory();

            ServletFileUpload upload = new ServletFileUpload(factory);
            Map<String, List<FileItem>> file = upload.parseParameterMap(request);

            for (List<FileItem> value : file.values()) {
                for (FileItem uploadItem : value) {
                     csvfile = uploadItem.getInputStream();
                }
            }

            InputStreamReader isr = new InputStreamReader(csvfile);
            BufferedReader reader = new BufferedReader(isr);

            String text = "";
            reader.readLine();
                while ((text = reader.readLine()) != null) {
                    String[] columns = text.split(",");
                    System.out.println("count columns" + columns.length);
                    String rowdata = "";
                        for (String value : columns) {
                            rowdata += "'" + value + "',";
                        }
                       rowdata = rowdata.substring(0, rowdata.length() - 1);
                       try {
                               Class.forName("oracle.jdbc.driver.OracleDriver");
                               Connection  con=DriverManager.getConnection("jdbc:oracle:thin:@//10.250.173.103:1521/optunai", "TUNAIREPORT", "TUNAIREPORT#2015");
                               Statement stmt=con.createStatement();
                               String query = "insert into csvfile(name,mail) values(" + rowdata + ")";
                               stmt.executeUpdate(query);
                                out.println("Successfully uploaded");
                              }//try
                              catch (Exception e) {
                               out.println("Error Try Again"+e.getMessage());
                               } //catch
                     }

           }// try 
          catch (Exception e) {
              out.println("Error Try Again"+e.getMessage());
        }
    }


}

когда я запускаю этот код, я вижу такую ​​ошибку

    Mei 11, 2018 1:50:25 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [org.exercise01.web.GreetingServlet] in context with path [/web-exercise02] threw exception
java.lang.NullPointerException
    at org.exercise01.web.GreetingServlet.doPost(GreetingServlet.java:56)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)

как я могу разрешить свой код? , кто-нибудь может дать мне настоящий код, пожалуйста, помогите

@logan Я не специалист по английскому, можешь мне что-нибудь сказать?

Ken Kaneki 11.05.2018 09:06

посмотрите строку 56 в GreetingServlet.java

Logan 11.05.2018 09:07

похоже, что эта строка пытается {InputStream csvfile = null; FileItemFactory factory = новый DiskFileItemFactory ();

Ken Kaneki 11.05.2018 09:09
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
3
9 545
1

Ответы 1

Строка 69 кажется настоящей причиной проблемы с просмотром кода.

InputStreamReader isr = new InputStreamReader(csvfile);

Это означает, что вызов parseParmeterMap ie возвращает пустую карту

Map<String, List<FileItem>> file = upload.parseParameterMap(request);

Вам следует сделать 2 вещи:

  1. Поместите нулевую проверку во весь код обработки, то есть в строке № 69, в качестве профилактического шага, а также в качестве хорошей практики.

  2. Проверьте реальную причину проблемы, т.е. parseParameterMap возвращает пустое значение. Попробуйте просто распечатать элементы Map<String, List<FileItem>> file

Можете ли вы разрешить мой код, я действительно не понимаю, но все еще изучаю Java, мне действительно нужна ваша помощь

Ken Kaneki 11.05.2018 09:25

Другие вопросы по теме