小弟做一个在线书店的系统.
用的是J2EE+Tomcat 5.0 +mysql4.1 
小第在首页index.jsp登陆界面输入数据库中已经存在的用户名wxy,密码wxy提交表单转到login.jsp.
但是却出现了:
root cause: 
java.lang.NullPointerException
bookshop.run.login.excute(login.java:65)
org.apache.jsp.bookshop.login_jsp._jspService(login_jsp.java:71)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
在Tomcat 端出现了db  connect error:
index.jsp 源代码如下:
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<%@ page import="java.util.*" %>
<%@ page session="true" %>
<%@include file="/bookshop/inc/head.inc"%>
<br>  <form name="form1" method="post" action="login.jsp">
          <div align=center>用户登录 </div>
          <br>          
          <table width="300" border="0" cellspacing="1" cellpadding="1" align="center">
          <br>
            <tr> 
              <td align="right">用户名:</td>
              <td> 
                <input type="text" name="username" size="15" maxlength="25">
              </td>
            </tr>
            <tr> 
              <td align="right">密码:</td>
              <td> 
                <input type="password" name="passwd" size="15" maxlength="20">
              </td>
            </tr>
            <tr> 
              <td colspan="2" align="center"> 
                <input type="submit" name="Submit" value="登录">
              
                <input type="reset" name="Submit2" value="取消">
              </td>
            </tr>
             <tr>     
            <td colspan="2" align="center">
          <p>&nbsp;</p>
            测试用户:wxy 密码:wxy 
       </td>
        </tr>
            <tr> 
              <td colspan="2" align=center>如果不是本站会员,请在此<a href="reg.jsp">注册</a>。</td>              
            </tr>
         </table>
   </form><%@include file="/bookshop/inc/tail.inc"%>

解决方案 »

  1.   

    另外login.jsp 源代码如下:
    <%@ page session="true" %>
    <jsp:useBean id="login" scope="page" class="bookshop.run.login" />
    <%
    String mesg = "";if( request.getParameter("username")!=null && !request.getParameter("username").equals("")){
    String username =request.getParameter("username");
    String passwd = request.getParameter("passwd");
    username = new String(username.getBytes("ISO8859-1"));
    passwd = new String(passwd.getBytes("ISO8859-1"));
    login.setUsername(username);
    login.setPasswd(passwd);
    out.print(username+passwd);
    if (login.excute()){
    session.setAttribute("username",username);
    String userid = Long.toString(login.getUserid());
    session.setAttribute("userid",userid);
    response.sendRedirect("booklist.jsp");
    %>
    <%
    }else {
    mesg = "登录出错!" ;
    }
    }
    %>
    <%@include file="/bookshop/inc/head.inc"%><script language="javascript"> function checkform() {
    if (document.form1.username.value=="" || document.form1.passwd.value==""){
    alert("用户名或密码为空!");
    return false;
    }
    return true;  }</script>
    <div align=center>用户登录 </div>
              <br>          
    <% if (!mesg.equals("")){
    out.println("<p>" + mesg + "</p>");}%>

      <form name="form1" method="post" action="login.jsp">
        <table width="400" border="0" cellspacing="1" cellpadding="1" align="center">
        <tr> 
          <td width="147" align="right">用户名:<br>
          </td>
          <td width="246" valign="top">
              <input type="text" name="username" size="16" maxlength="25">
            </td>
        </tr>
        <tr> 
          <td width="147" align="right">密码:</td>
          <td width="246" valign="top">
              <input type="password" name="passwd" maxlength="20" size="16">
            </td>
        </tr>
        <tr> 
          <td width="147" align="right">&nbsp;</td>
          <td width="246" valign="top">
              <input type="submit" name="Submit" value="登录" onclick="javascript:return(checkform());">
              <input type="reset" name="Submit2" value="取消">
            </td>
        </tr>
        <tr>     
          <td colspan="2" align="center">
            <p>&nbsp;</p>
            测试用户:wxy 密码:wxy
          </td>
        </tr>
        <tr> 
        
          <td colspan="2" align="center">
            <p>&nbsp;</p>
            <p>如果你还不是本站用户,请在此<a href="reg.jsp">注册</a></p>
          </td>
        </tr>
      </table>
        </form>
     <%@include file="/bookshop/inc/tail.inc"%>
      

  2.   

    DataBase.java原代码如下:
    package bookshop.util;
    /**
     * <p>数据库连接专用包 </p>
     * <p>Copyright: wxy Copyright (c) 2004</p>
     * <p>Company:juanjuan book shop online </p>
     * @by :wxy
     * @version 1.0
     */
    import java.sql.*;
    public class DataBase {
      public Connection conn;
      public Statement stmt;
      public ResultSet rs=null;
      public String sqlStr="";  public DataBase() {
        this.connect();
      }
     public boolean connect(){
          try{
            Class.forName("org.gjt.mm.mysql.Driver").newInstance();
            String url ="jdbc:mysql://localhost:3306/BookStore?user=root&password=&characterEncoding=8859_1";
            conn=DriverManager.getConnection(url);
            stmt = conn.createStatement ();
           }catch(Exception ee){
            System.out.println("connect db error:"+ee.getMessage());
            return false;
           }
          return true;
        }
     public static void main(String[] args) {
         try{
                DataBase db = new DataBase();
                db.connect();
              }catch(Exception e){
                e.printStackTrace();
              }
            }
    }
      

  3.   

    login.java原代码如下:
    package bookshop.run;
    /**
     * <p>管理用户登录的类 </p>
     */
    import bookshop.util.*;
    public class login extends DataBase {
            private String username; //登录用户名
            private String passwd; //登录密码
            private boolean isadmin; //是否管理员登录
            private long userid=0; //用户ID号
            public login() throws Exception{
                    super();
                    username = "";
                    passwd = "";
                    isadmin = false;
            }
            public String getUsername() {
                    return username;
            }
            public void setUsername(String newusername) {
                    username = newusername;
            }
            public String getPasswd() {
                    return passwd;
            }
            public void setPasswd(String newpasswd) {
                    passwd = newpasswd;
            }
            public boolean getIsadmin() {
                    return isadmin;
            }
            public void setIsadmin(boolean newIsadmin) {
                    isadmin = newIsadmin;
            }
            public long getUserid() {
                    return userid;
            }
            public void setUserid (long uid) {
                    userid = uid;
            }
            /**
             * 获得查询用户信息的sql语句
             * @return
             */
            public String getSql() {
                    if (isadmin) {
                            sqlStr = "select * from BookAdmin where adminuser = '" +
                                dataFormat.toSql(username) + "' and adminpass = '" +
                                dataFormat.toSql(passwd) + "'";
                    }else {
                            sqlStr = "select * from shop_user where username = '" +
                                username + "' and password = '" + passwd + "'";
                    }
                    return sqlStr;
            }
            /**
             * 执行查询
             * @return
             * @throws java.lang.Exception
             */
            public boolean excute() throws Exception {
                    boolean flag = false;
                    DataBase db = new DataBase();
                    db.connect();
               stmt = db.conn.createStatement ();
               rs = stmt.executeQuery(getSql());
                    if (rs.next()){
                            if (!isadmin)
                            {
                                    userid = rs.getLong("id");
                            }
                            flag = true;
                    }
                    rs.close();
                    return flag;
            }
    };
      

  4.   

    感觉应该是你的MYSQL安全访问问题吧,也就是必须要用户密码
      

  5.   

    感谢我改为有密码,重新测试发现又出现如下错误:
    exception org.apache.jasper.JasperException: Unable to compile class for JSPGenerated servlet error:
    C:\Tomcat 5.0\work\Catalina\localhost\_\org\apache\jsp\bookshop\booklist_jsp.java:627: handlePageException(java.lang.Exception) in javax.servlet.jsp.PageContext cannot be applied to (java.lang.Throwable)
            if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
                                                              ^
    Generated servlet error:
    Note: C:\Tomcat 5.0\work\Catalina\localhost\_\org\apache\jsp\bookshop\booklist_jsp.java uses unchecked or unsafe operations.
    Generated servlet error:
    Note: Recompile with -Xlint:unchecked for details.
    1 error org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:84)
    org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:332)
    org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:412)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:472)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:451)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:439)
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:511)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:295)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)说明一下book_list为login.jsp 导向的jsp page.