求解:严重: Servlet.service() for servlet AdminLogin threw exception
java.lang.NullPointerException
at org.cs.trade.dao.impl.UserDaoImpl.isexist(UserDaoImpl.java:128)
at org.cs.trade.service.impl.UserService.isexist(UserService.java:29)
at org.cs.trade.control.AdminLogin.service(AdminLogin.java:28)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)org.cs.trade.dao.impl.UserDaoImpl 相关代码package org.cs.trade.dao.impl;
public class UserDaoImpl implements IUserDAO {
   //查找
public boolean isexist(String sql) {
// TODO Auto-generated method stub

Connection conn = ConnDB.getConnection();
Statement stmt = ConnDB.getStatement(conn);
ResultSet rs = ConnDB.getResultSet(stmt, sql);
boolean ok = false;
try {
ok = rs.next();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{

ConnDB.closeResultSet(rs);
ConnDB.closeStatement(stmt);
ConnDB.closeConnection(conn);

}
return ok;
} }
org.cs.trade.service.impl.UserService 相关代码public class AdminLogin extends HttpServlet { protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
HttpSession session = request.getSession();
IUserService usermanager = new UserService();
String username = request.getParameter("username");    
String password = request.getParameter("password");
String sql = "select * from admin where username=" + "'" + username
    + "' and password = " + "'" + password + "'";
if(usermanager.isexist(sql))
{
session.setAttribute("admin", username);
request.getRequestDispatcher("../admin/admin.jsp").forward(request, response);
}
else
{
request.setAttribute("msg", "登陆失败:该用户不存在!");
request.getRequestDispatcher("../web/loginerror.jsp").forward(request, response); }
}

}

解决方案 »

  1.   

    at org.cs.trade.dao.impl.UserDaoImpl.isexist(UserDaoImpl.java:128)
    128是哪行?
    Connection conn = ConnDB.getConnection();

    我估计应该是这句,看看你的ConnDB是否为null
      

  2.   

    那很明显就是sql查询后没有值,前面加个判断,rs != null
      

  3.   

    package sm;import java.sql.*;
    import java.util.*;public class DbMenager {
        public DbMenager() {
            try {
                jbInit();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }    private Connection conn = null;
        private Statement stmt = null;
        private ResultSet rs = null;
        private void getStmt(String db) {
            try {
                //加载驱动
                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                //创建连接
                String url = "jdbc:odbc:driver=sql server;server=(local);database=" +
                             db;
                conn = DriverManager.getConnection(url);
                //创建语句对象
                stmt = conn.createStatement();
            } catch (Exception ex) {
                System.out.println("创建语句对象失败");
            }
        }    //******************************************
         //增删改方法
         public int exeSql(String db, String sql) {
             int i = 0;
             try {
                 System.out.println(sql);
                 this.getStmt(db);
                 i = stmt.executeUpdate(sql);
                 stmt.close();
                 conn.close();
             } catch (Exception ex) {
                 System.out.println("执行SQL失败");
             }
             return i;
         }    //******************************************
         //查询方法(返回值为结果集)
         public ResultSet getRs(String db, String sql) {
             try {
                 this.getStmt(db);
                 rs = stmt.executeQuery(sql);
             } catch (Exception ex) {
                 System.out.println("查询失败");
             }
             return rs;
         }    //******************************************
         //关闭方法
         public void close() {
             try {
                 if (rs != null) {
                     rs.close();
                 }
                 if (stmt != null) {
                     stmt.close();
                 }
                 if (conn != null) {
                     conn.close();
                 }
             } catch (Exception ex) {
                 System.out.println("关闭失败");
             }
         }    //******************************************
         //查询方法(返回值为Vector)
         public Vector getRows(String db, String sql) {
             Vector rows = new Vector();
             try {
                 this.getStmt(db);
                 rs = stmt.executeQuery(sql);
                 while (rs.next()) {
                     Vector row = new Vector();
                     for (int i = 1; i < rs.getMetaData().getColumnCount(); i++) {
                         row.add(rs.getString(i));
                     }
                     rows.add(row);
                 }
                 rs.close();
                 stmt.close();
                 conn.close();
             } catch (Exception ex) {
                 System.out.println("查询失败");
             }
             return rows;
         }    private void jbInit() throws Exception {
        }
    }
      

  4.   


    try {
    ok = rs.next();
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }不要这么写至少要加一个判空的。。排除查出来为空的情况。。不然会引起空指针错误。while (rs.next()) {
    String name = rs.getString("数据库字段名");
    //...依次读取每个字段
    }
      

  5.   

    应该在ok = rs.next()前面还判断是否为空的情况
      

  6.   

    Connection conn = ConnDB.getConnection();
    Statement stmt = ConnDB.getStatement(conn);
    ResultSet rs = ConnDB.getResultSet(stmt, sql);
    boolean ok = false;
    try {
    ok = rs.next();
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }在try里随便做个判断
    判断
    try{
     if(rs!=null){
       ok=rs.next();
    }
    }就搞定了
      

  7.   

    at org.cs.trade.dao.impl.UserDaoImpl.isexist(UserDaoImpl.java:128)
    at org.cs.trade.service.impl.UserService.isexist(UserService.java:29)
    at org.cs.trade.control.AdminLogin.service(AdminLogin.java:28)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803
    在这几个类中设断点,DEBUG一下。
      

  8.   

    空指针,
    1,看下你登陆的时候,有没有从前台取得数据
    2,如果前台取得数据,检查后台有没有查询出数据
    3,多做容错判断,比如进入servlet中时,检查下你的数据是否取到,如果没有,进行相应的处理
      

  9.   

    应该在ok = rs.next()前面还判断是否为空的情况
      

  10.   

    感谢各位的支持,很久没有上csdn了,今天才看见还有没有揭的帖,sorry