求解:严重: 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); }
}
}
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); }
}
}
128是哪行?
Connection conn = ConnDB.getConnection();
我估计应该是这句,看看你的ConnDB是否为null
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 {
}
}
try {
ok = rs.next();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}不要这么写至少要加一个判空的。。排除查出来为空的情况。。不然会引起空指针错误。while (rs.next()) {
String name = rs.getString("数据库字段名");
//...依次读取每个字段
}
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();
}
}就搞定了
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一下。
1,看下你登陆的时候,有没有从前台取得数据
2,如果前台取得数据,检查后台有没有查询出数据
3,多做容错判断,比如进入servlet中时,检查下你的数据是否取到,如果没有,进行相应的处理