很明显:checkLogOn.jsp中空指针异常~~

解决方案 »

  1.   

    这是验证登陆的JSP:
    <%@page contentType="text/html; charset=GBK" import="java.sql.*"%>
    <html>
    <head>
    <title>check</title>
    </head>
    <jsp:useBean id="handleDatabase" scope="session" class="hrms.handleDatabase"></jsp:useBean>
    <body>
    <%
      request.setCharacterEncoding("gb2312"); //避免出现乱码
      //-----------------------------------------------------------------------------------
      String userId = request.getParameter("userId"); //得到页面输入的用户名
      String pwd = request.getParameter("pwd"); ///得到页面输入的密码
      String selectType = request.getParameter("selectType"); //得到页面选择的登录类型
      String userName = ""; //预定义的将要从数据库中得到的用户姓名
      int userVisit = 0; //预定义的将要从数据库中得到的用户登录次数
      boolean feedback = false; //判断登录是否成功
      //-----------------------------------------------------------------------------------
      Connection con = handleDatabase.connect(); //与数据库建立连接
      //-----------------------------------------------------------------------------------
      if (selectType.equals("老师")) { //如果是教师登录
        PreparedStatement ps1 = con.prepareStatement(" SELECT  te_visit,te_name   FROM teacher WHERE te_usr = ? and te_pwd=?"); //将输入的用户名及密码在数据库中进行查找,并返回用户姓名及访问时间
        ps1.setString(1, userId);
        ps1.setString(2, pwd);
        ResultSet result1 = ps1.executeQuery();
        //-----------------------------------------------------------------------------------
        if (result1.next()) {
          userVisit = result1.getInt("te_visit") + 1; //将用户访问次数加1
          userName = result1.getString("te_name");
          feedback = true;
          result1.close();
          ps1.close();
          PreparedStatement ps2 = con.prepareStatement("update teacher set te_visit=? where te_usr=?"); //将最新的访问次数返回数据库
          ps2.setInt(1, userVisit);
          ps2.setString(2, userId);
          ps2.execute();
          ps2.close();
          con.close();
          session.setAttribute("userName", userName); //将用户姓名和用户类型放进session
          session.setAttribute("type", selectType);
          String visitNo = Integer.toString(userVisit);
          session.setAttribute("visitNo", visitNo);
          session.setAttribute("isLog", new String("1")); //登录成功的标志
          response.sendRedirect("logOnOk.jsp");
        }
        //-----------------------------------------------------------------------------------
        else {
    %>
    <script type="text/javascript" language="JavaScript">      alert("您的输入不正确,请核对后重新输入");      document.location.replace("logOn.jsp");
    </script><%
      }
          }
          //-----------------------------------------------------------------------------------
      else if (selectType.equals("管理员")) { //如果是管理员登录
        PreparedStatement ps3 = con.prepareStatement(" SELECT  ad_visit,ad_name   FROM admin WHERE ad_usr = ? and ad_pwd=?");
        ps3.setString(1, userId);
        ps3.setString(2, pwd);
        ResultSet result2 = ps3.executeQuery();
        //-----------------------------------------------------------------------------------
        if (result2.next()) {
          userVisit = result2.getInt("ad_visit") + 1;
          userName = result2.getString("ad_name");
          feedback = true;
          result2.close();
          ps3.close();
          PreparedStatement ps4 = con.prepareStatement("update admin set ad_visit=? where ad_usr=?");
          ps4.setInt(1, userVisit);
          ps4.setString(2, userId);
          ps4.execute();
          ps4.close();
          con.close();
          session.setAttribute("userName", userName); //将用户姓名和用户类型放进session
          session.setAttribute("type", selectType);
          String visitNo = Integer.toString(userVisit);
          session.setAttribute("visitNo", visitNo);
          session.setAttribute("isLog", new String("1")); //登录成功的标志
          response.sendRedirect("logOnOk.jsp");
        }
        //-----------------------------------------------------------------------------------
        else {
    %>
    <script type="text/javascript" language="JavaScript">      alert("您的输入不正确,请核对后重新输入");      document.location.replace("logOn.jsp");
    </script><%
      }
          }
    %>
    </body>
    </html>程序应该没有问题,因为JB里面完全正常,而且我已经加载了在TM5.5.9中加载了驱动,且设好了环境变量,大家帮帮忙
      

  2.   

    到TOMCAT_HOME\work\Standalone\localhost\_目录下,打开checkLogOn_jsp文件,看第71行就是出错的地方我估计可能是Connection con = handleDatabase.connect(); 这一句如果是的话看看handleDatabase这个类部署的位置对不对
      

  3.   

    71行是:  ps4.setString(2, userId); 怎么这个地方会有错??
      

  4.   

    既然在jb中能运行,程序应该没有问题,可能是配置或环境设置的问题,你换成comcat4试一试。
      

  5.   


    这就是handleDatabase,应该没有错吧,JB里面完全正常的package hrms;
    import java.sql.*;public class handleDatabase {  public handleDatabase() {
        try {
          Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); //装载驱动
        }
        catch (Exception e) {
          e.toString();
        }
      }  //-----------------------------连接函数---------------------------------------------------------------------------------------------------------------------------  public Connection connect() throws Exception { //形参为服务器地址,端口号,数据库名称,用户名,密码
        try {
          con = java.sql.DriverManager.getConnection(
              "jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=HRMS",
              "bn", "bn"); //建立连接
        }
        catch (Exception e) {
          e.toString();
        }
        return con; //返回连接
      }
      

  6.   

    不是checkLogOn.jsp的71行,是TOMCAT_HOME\work\Standalone\localhost\_目录下相应文件的71行。
      

  7.   

    D:\Tomcat 5.5\work\Catalina\localhost\_下面有一个org目录和一个tldCache.ser文件,org目录里面是\apache\jsp,里面就是几个java 文件和class文件,我选择了checkLogOn.java
    PreparedStatement ps1 = con.prepareStatement(" SELECT  te_visit,te_name   FROM teacher WHERE te_usr = ? and te_pwd=?"); //将输入的用户名及密码在数据库中进行查找,并返回用户姓名及访问时间
      

  8.   

    也就是71行是这个
    PreparedStatement ps1 = con.prepareStatement(" SELECT  te_visit,te_name   FROM teacher WHERE te_usr = ? and te_pwd=?"); //将输入的用户名及密码在数据库中进行查找,并返回用户姓名及访问时间这一句有错吗?为什么会有空指针?JB里面可以的阿
      

  9.   

    那句出错是因为:
    Connection con = handleDatabase.connect(); //与数据库建立连接
    这里没有取到连接con是null值确认你的驱动是否部署正确在handleDatabase类的catch中加入e.printStackTrace(),把错误打出来
      

  10.   

    最有可能的就是那个连接有问题,你在取得链接后system.out.print输出到控制台一条信息试试
      

  11.   

    我在JB里面一切正常,查不到错啊,只是将页面放到服务器ROOT页面下访问的时候出现的
      

  12.   

    唉,再说一遍出错的地方是Connection con = handleDatabase.connect(); //与数据库建立连接
    这里没有取到连接con是null值出错不是因为代码问题,因为你在jb里能跑,那肯定是环境部署问题最有可能的是你的数据库驱动jar包没有放在WEB-INF\lib下
    在handleDatabase类的catch中加入e.printStackTrace(),像这样
    catch (Exception e) {
          e.printStackTrace();
        }
    把错误打出来看就很清楚了
      

  13.   

    我已经把Microsoft SQL Server 2000 Driver for JDBC的3个jar包放在WEB-INF\lib下了,也加上了   catch (Exception e) {
          e.printStackTrace();
        },但是出错页面依然和原来是一样的
      

  14.   

    e.printStackTrace();
    打印出来的错误是在Tomcat控制台上的,不是在网页上
      

  15.   

    建议还是打成war文件后 部署到tomcat  webapp下
      

  16.   

    首先谢谢大家,今天开机突然就好了,神秘啊!:)).PS:我觉得数据库不会有什么问题,因为JB同样在连接数据库,谢谢