500空指针

500空指针

http://img1.sycdn.imooc.com//climg/5cf884fc00012e7a10370362.jpg

package service;

import java.util.List;

import bean.Message;
import dao.MessageDAO;

//信息的service,用于二次处理数据
public class MessageSecvice {
    //实例化dao的方法
    private MessageDAO messageDAO;
    public void MessageService() {
        messageDAO =new MessageDAO();
    }
    //调用到中的方法传入参数,返回list
    public List<Message> getMessages(int page,int pageSize){        
        
        return messageDAO.getMessages(page, pageSize);
    }
    public int countMessages() {
        return messageDAO.countMessages();
    }
}
package servlet;

import java.io.IOException;
import java.util.List;

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 bean.Message;
import service.MessageSecvice;
public class MessageServlet extends HttpServlet {
    
    /**
     * @version 1.0
     */
    
    private MessageSecvice messageService;
    //重写init,service,destroy方法
    @Override
    public void init() throws ServletException {
        super.init();
        //实例化service的对象
        messageService=new MessageSecvice();
    }
    
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获得当前页码
        String pageStr=request.getParameter("page");
        //初始页数为1
        int page=1;
        //当pageStr不为空则将pagestr赋值给page
        if(pageStr!=null&&"".equals(pageStr)) {
            page=Integer.parseInt(pageStr);
        }
        //调用方法,分页查询全部留言
        
        List<Message> messages=messageService.getMessages(page, 5);
        for(Message m:messages) {
            System.out.println(m);
        }
        //获得总留言数
        int count=messageService.countMessages();
        System.out.println(count+"123");
        //尾页计算
        int last=count%5==0?(count/5):((count/5)+1);
        System.out.println(last+"1234");
        //返回页面
        request.setAttribute("page", page);
        request.setAttribute("last", last);
        request.setAttribute("messages", messages);
        request.getRequestDispatcher("/WEB-INF/views/biz/message_list.jsp").forward(request, response);
    }

    @Override
    public void destroy() {
        // TODO Auto-generated method stub
        super.destroy();
    }

    

}
package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import Common.ConnectionUtil;
import bean.Message;

//信息的方法具体实现类,最底层方法实现
public class MessageDAO{
    //将每条留言封装进集合
    public List<Message> getMessages(int page,int pageSize){
        
        Connection conn=ConnectionUtil.getConnection();
        System.out.println(conn);
        PreparedStatement stmt=null;
        ResultSet rs=null;
        List<Message> messages=new ArrayList<>();
        //新建sql语句,limit m,n:从第m条开始取出共n条
        String sql="select*from message order by create_time desc limit ?,?";
        
        try {
            //预处理sql
            stmt=conn.prepareStatement(sql);
            stmt.setInt(1, (page-1)*pageSize);
            stmt.setInt(2, pageSize);
            rs=stmt.executeQuery();
            while(rs.next()) {
                messages.add(new Message(rs.getLong("id"),rs.getLong("uesr_id"),rs.getString("username"),rs.getString("title"),rs.getString("content"),rs.getTimestamp("create_time")));
            }
            
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            ConnectionUtil.release(rs, stmt, conn);
        }
        System.out.println("");
        return messages;
    }
    
    //获得留言总数
    public int countMessages() {
    
        Connection conn=ConnectionUtil.getConnection();
        System.out.println(conn);
        PreparedStatement stmt=null;
        ResultSet rs=null;
        //设置sql语句
        String sql="select count(*) total from message";
        //预处理sql
        try {
            stmt=conn.prepareStatement(sql);
            rs=stmt.executeQuery();
            while(rs.next()) {
                return rs.getInt("totle");
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            ConnectionUtil.release(rs, stmt, conn);
        }
        
        return 0;
    }
    
}


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
吃吃吃鱼的猫 2019-06-06 15:47:58

同学你好,空指针异常的原因是messageDao没有经过初始化,messageDao的初始化操作应该发生在MessageService的构造方法中。

构造方法没有返回值类型,应该将下图标识的void去掉。

http://img1.sycdn.imooc.com//climg/5cf8c4c10001633b04840221.jpg

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 老师,为什么此处messageDAO没有初始化为什么导致空指针异常呢?我编码的时候没有写messageDAO = new MessageDAO这一步,就导致了空指针异常,异常捕获位置是在 各层调用方法getMessages(page, 5)中 。 能讲解一下导致这个异常的底层原理机制吗?
    2020-01-21 18:23:48
  • 同学你好,空指针异常是因为有值为null的对象去调用方法了或属性等,如果不初始化,则引用类似只声明的话,默认是为null的,所有,当它去调用方法时,就会报空指针异常了。如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
    2020-01-21 18:28:32
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
Java数据库开发与实战应用2018版
  • 参与学习           人
  • 提交作业       277    份
  • 解答问题       4297    个

Java数据库开发的必备技能,从流行的MySQL数据库开始,到Java原生的数据库管理接口JDBC的使用,再到常用的数据持久化框架MyBatis,让你向Java工程师的目标又迈进了一步!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师