差不多先生_z 2021-11-05 10:48 采纳率: 100%
浏览 87
已结题

上传服务器运行,登录时出现空指针异常

本地运行没有什么问题,但是上传服务器之后出现了异常,求指点

错误日志:

05-Nov-2021 10:13:52.243 SEVERE [http-nio-8083-exec-10] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [LoginServlet] in context with path [/StudentManagerWeb4] threw exception
    java.lang.NullPointerException
        at com.ischoolbar.programmer.dao.BaseDao.query(BaseDao.java:32)
        at com.ischoolbar.programmer.dao.AdminDao.login(AdminDao.java:18)
        at com.ischoolbar.programmer.servlet.LoginServlet.doPost(LoginServlet.java:57)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
        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:53)
        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:202)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
        at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
        at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373)
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590)
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:745)

相关代码:
(前端部分代码)

 <input id="" name="password" type="password" placeholder="密码" class="input-text size-L">
<input id="" name="password" type="password" placeholder="密码" class="input-text size-L">
<input class="input-text size-L" name="vcode" type="text" placeholder="请输入验证码" style="width: 200px;">
          <img title="点击图片切换验证码" id="vcodeImg" src="CpachaServlet?method=loginCapcha">

//js
    $(function(){
        //点击图片切换验证码
        $("#vcodeImg").click(function(){
            this.src="CpachaServlet?method=loginCapcha&t="+new Date().getTime();
        });
        
        //登录
        $("#submitBtn").click(function(){
            var data = $("#form").serialize();
            $.ajax({
                type: "post",
                url: "LoginServlet?method=Login",
                data: data, 
                dataType: "text", //返回数据类型
                success: function(msg){
                    if("vcodeError" == msg){
                        $.messager.alert("消息提醒", "验证码错误!", "warning");
                        $("#vcodeImg").click();//切换验证码
                        $("input[name='vcode']").val("");//清空验证码输入框
                    } else if("loginError" == msg){
                        $.messager.alert("消息提醒", "用户名或密码错误!", "warning");
                        $("#vcodeImg").click();//切换验证码
                        $("input[name='vcode']").val("");//清空验证码输入框
                    } else if("loginSuccess" == msg){
                        window.location.href = "SystemServlet?method=toAdminView";
                    } else{
                        alert(msg);
                    } 
                }
                
            });
        });
        
        //设置复选框
        $(".skin-minimal input").iCheck({
            radioClass: 'iradio-blue',
            increaseArea: '25%'
        });
    })

(LoginServlet.java部分代码) 57行:Admin admin = adminDao.login(name, password);

public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException{
        String method = request.getParameter("method");
        if("logout".equals(method)){
            logout(request, response);
            return;
        }
        String vcode = request.getParameter("vcode");
        String name = request.getParameter("account");
        String password = request.getParameter("password");
        int type = Integer.parseInt(request.getParameter("type"));
        String loginCpacha = request.getSession().getAttribute("loginCapcha").toString();
        if(StringUtil.isEmpty(vcode)){
            response.getWriter().write("vcodeError");
            return;
        }
        if(!vcode.toUpperCase().equals(loginCpacha.toUpperCase())){
            response.getWriter().write("vcodeError");
            return;
        }
        //验证码验证通过,对比用户名密码是否正确
        String loginStatus = "loginFaild";
        switch (type) {
            case 1:{
                AdminDao adminDao = new AdminDao();
                //57行
                                Admin admin = adminDao.login(name, password);
                adminDao.closeCon();
                if(admin == null){
                    response.getWriter().write("loginError");
                    return;
                }
                HttpSession session = request.getSession();
                session.setAttribute("user", admin);
                session.setAttribute("userType", type);
                loginStatus = "loginSuccess";
                break;
            }
            case 2:{
                StudentDao studentDao = new StudentDao();
                Student student = studentDao.login(name, password);
                studentDao.closeCon();
                if(student == null){
                    response.getWriter().write("loginError");
                    return;
                }
                HttpSession session = request.getSession();
                session.setAttribute("user", student);
                session.setAttribute("userType", type);
                loginStatus = "loginSuccess";
                break;
            }
            case 3:{
                TeacherDao teahcerDao = new TeacherDao();
                Teacher teacher = teahcerDao.login(name, password);
                teahcerDao.closeCon();
                if(teacher == null){
                    response.getWriter().write("loginError");
                    return;
                }
                HttpSession session = request.getSession();
                session.setAttribute("user", teacher);
                session.setAttribute("userType", type);
                loginStatus = "loginSuccess";
                break;
            }
            default:
                break;
            }
        response.getWriter().write(loginStatus);
        
    }

(AdminDao.java部分代码) 18行:ResultSet resultSet = query(sql);

public Admin login(String name ,String password){
        String sql = "select * from s_admin where name = '" + name + "' and password = '" + password + "'";
        ResultSet resultSet = query(sql);
        try {
            if(resultSet.next()){
                Admin admin = new Admin();
                admin.setId(resultSet.getInt("id"));
                admin.setName(resultSet.getString("name"));
                admin.setPassword(resultSet.getString("password"));
                admin.setStatus(resultSet.getInt("status"));
                return admin;
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

(BaseDao.java) 32行:PreparedStatement prepareStatement = dbUtil.getConnection().prepareStatement(sql);

public ResultSet query(String sql){
        try {
            PreparedStatement prepareStatement = dbUtil.getConnection().prepareStatement(sql);
            return prepareStatement.executeQuery();
            
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    } 

  • 写回答

4条回答 默认 最新

  • CSDN专家-sinJack 2021-11-05 10:59
    关注

    PreparedStatement prepareStatement = dbUtil.getConnection().prepareStatement(sql);
    根源是获取连接的地方, dbUtil.getConnection()获取到的连接是空的。
    本地使用的数据库和服务器上一样?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 11月13日
  • 已采纳回答 11月5日
  • 创建了问题 11月5日

悬赏问题

  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助