作的一个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.
查看lognote The full stack trace of the root cause is available in the Tomcat logs.
检查你的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文件,则系统就会运行正常