一个困扰我很长时间的错误--原来是jsp链接MySql数据库的问题


作的一个jsp系统,开运行时总要报这样的错误:

HTTP Status 500 -


type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:512)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:395)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

root cause

java.lang.NullPointerException
org.apache.jsp.first_jsp._jspService(first_jsp.java:98)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:334)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

note The full stack trace of the root cause is available in the Apache Tomcat/5.5.20 logs.

然而在刷新几遍后,或者过一段时间系统就运行正常,找了很多资料,终于有了结果,解决得益于以下提示:
1.
QUOTE:
java.lang.NullPointerException
note The full stack trace of the root cause is available in the Tomcat logs.
查看log
检查你的jsp页面

2. java.lang.NullPointerException 是一个运行期异常,说明你代码在运行是访问了一个值为null的对象
org.apache.jsp.pass_jsp._jspService(pass_jsp.java:66) 这句说明了出错语句的位置
在tomcat的安装目录下find这个文件pass_jsp.java,看看第66行是什么

3. 看了代码,觉得是运行期间con是null,所以Statement  stmt= con.createStatement就会出那个异常,con是null的原因估计是Connection con=yy.getConn(); 这里。也就是说yy的getConn方法返回了null值 .解决方法: 在用con之前判断con是什么,或者用try catch捕捉异常

后来经过查看Tomcat的logs,在logs 里面有一个stdout_20070104.log文件,报当天的日志,里面有如下信息:
java.sql.SQLException: Communication failure during handshake. Is there a server running on localhost:3306?
unable to load driver
java.sql.SQLException: Communication failure during handshake. Is there a server running on localhost:3306?
unable to load driver
java.sql.SQLException: Communication failure during handshake. Is there a server running on localhost:3306?
unable to load driver
java.sql.SQLException: Communication failure during handshake. Is there a server running on localhost:3306?
unable to load driver

经思索是数据库连接文件OpenDB.java的问题,后重写该类,改代码为标准写法如下
import java.sql.*;
import java.io.*;

public class OpenDB
{
    String host="localhost";
    String database="netshop";
    String userName="root";
    String userPassword="****";//此处的密码用户名一定要与所用数据库的密码及用户名一致
    private String driverName = "org.gjt.mm.mysql.Driver";
  private String url= "jdbc:mysql://"+host+"/"+database+"?useUnicode=true&characterEncoding=gb2312";

    Connection dbConn;
    public OpenDB()
    {

    }
    public Connection getConnection()
    {
        try
        {
            Class.forName(driverName).newInstance();
            dbConn=DriverManager.getConnection(url,userName,userPassword);
        }
        catch(Exception ex)
        {
            System.out.println(ex.toString());
            dbConn = null;
            System.out.println("unable to load driver");
        }
      
        return dbConn;
    }

}

后经摸索,发现每次开机或者说启动tomcat以后只要重新编译一下OpenDB.java文件,则系统就会运行正常
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jxcjxinxing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值