情况描述如下:
编译正常,运行抛出空指针异常。
总共三个文件,一个CreateDBServlet.java文件,一个web.xml文件,一个自己配的ch08.xml文件。我把数据库驱动包已经放到相应目录下了,具体代码如下:CreateDBServlet.java
-------------------------------------------------------------------------------------------------
package org.sunxin.lesson.jsp.bookstore;import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.sql.*;
public class CreateDBServlet extends HttpServlet{
private String url1;
private String user;
private String password; public void init() throws ServletException{
String driverClass = getInitParameter("driverClass");
url1 = getInitParameter("url1");
user = getInitParameter("user");
password = getInitParameter("password");
try{
Class.forName(driverClass); //加载并注册驱动程序
}
catch(ClassNotFoundException ce){
throw new UnavailableException("加载数据库驱动失败");//如果没找到驱动程序,抛出不可异常
}
}
public void doGet(HttpServletRequest req,HttpServletResponse resp)throws ServletException , IOException{
Connection conn = null;
Statement stmt = null;
try{
conn = DriverManager.getConnection(url1,user,password);
stmt = conn.createStatement();
stmt.executeUpdate("create database bookstore");
stmt.executeUpdate("use bookstore");
stmt.executeUpdate("create table bookinfo(id INT not null primary key,title VARCHAR(50) not null ,author VARCHAR(50) not null,bookconcern VARCHAR(100) not null,publish_date DATE not null,price FLOAT(4,2) not null,amount SMALLINT,re VARCHAR(200))ENGINE = InnoDB");
stmt.addBatch("insert into bookinfo values(1,'Java从入门到精通','张三','张三出版社','2004-6-1' ,34.00,35,null)");
stmt.addBatch("insert into bookinfo values(2,'JSP深入编程','李四','李四出版社','2004-10-1' ,56.00,20,null)");
stmt.addBatch("insert into bookinfo values(3,'J2EE高级编程','王五','王五出版社','2005-3-1',78.00,10,null)");
stmt.executeBatch();
PrintWriter out = resp.getWriter();
out.println("success!");
out.close();
}
catch(SQLException se){
se.printStackTrace();
}
finally{
if(stmt!=null){
try{
stmt.close();
}
catch(SQLException se){
se.printStackTrace();
}
stmt = null;
}
if(conn!=null){
try{
conn.close();
}
catch(SQLException se){
se.printStackTrace();
}
conn = null;
}
}
}
}
-----------------------------------------------------------------------------------------------------------------
web.xml代码如下:
-----------------------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="gbk"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>SetCharacterEncodingFilter</filter-class>
</filter><filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping><servlet>
<servlet-name>CreateDBServlet</servlet-name>
<servlet-class>org.sunxin.lesson.jsp.bookstore.CreateDBServlet</servlet-class>
<init-param>
<param-name>dirverClass</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</init-param>
<init-param>
<param-name>url</param-name>
<param-value>jdbc:mysql://localhost:3306/mysql</param-value>
</init-param>
<init-param>
<param-name>user</param-name>
<param-value>root</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>root</param-value>
</init-param>
</servlet><servlet-mapping>
<servlet-name>CreateDBServlet</servlet-name>
<url-pattern>/createdb</url-pattern>
</servlet-mapping></web-app>
--------------------------------------------------------------------------------------------------------
ch08.xml代码如下:
--------------------------------------------------------------------------------------------------------
<Context path="/ch08" docBase="E:\JSPLesson\ch08" reloadable="true" />
编译正常,运行抛出空指针异常。
总共三个文件,一个CreateDBServlet.java文件,一个web.xml文件,一个自己配的ch08.xml文件。我把数据库驱动包已经放到相应目录下了,具体代码如下:CreateDBServlet.java
-------------------------------------------------------------------------------------------------
package org.sunxin.lesson.jsp.bookstore;import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.sql.*;
public class CreateDBServlet extends HttpServlet{
private String url1;
private String user;
private String password; public void init() throws ServletException{
String driverClass = getInitParameter("driverClass");
url1 = getInitParameter("url1");
user = getInitParameter("user");
password = getInitParameter("password");
try{
Class.forName(driverClass); //加载并注册驱动程序
}
catch(ClassNotFoundException ce){
throw new UnavailableException("加载数据库驱动失败");//如果没找到驱动程序,抛出不可异常
}
}
public void doGet(HttpServletRequest req,HttpServletResponse resp)throws ServletException , IOException{
Connection conn = null;
Statement stmt = null;
try{
conn = DriverManager.getConnection(url1,user,password);
stmt = conn.createStatement();
stmt.executeUpdate("create database bookstore");
stmt.executeUpdate("use bookstore");
stmt.executeUpdate("create table bookinfo(id INT not null primary key,title VARCHAR(50) not null ,author VARCHAR(50) not null,bookconcern VARCHAR(100) not null,publish_date DATE not null,price FLOAT(4,2) not null,amount SMALLINT,re VARCHAR(200))ENGINE = InnoDB");
stmt.addBatch("insert into bookinfo values(1,'Java从入门到精通','张三','张三出版社','2004-6-1' ,34.00,35,null)");
stmt.addBatch("insert into bookinfo values(2,'JSP深入编程','李四','李四出版社','2004-10-1' ,56.00,20,null)");
stmt.addBatch("insert into bookinfo values(3,'J2EE高级编程','王五','王五出版社','2005-3-1',78.00,10,null)");
stmt.executeBatch();
PrintWriter out = resp.getWriter();
out.println("success!");
out.close();
}
catch(SQLException se){
se.printStackTrace();
}
finally{
if(stmt!=null){
try{
stmt.close();
}
catch(SQLException se){
se.printStackTrace();
}
stmt = null;
}
if(conn!=null){
try{
conn.close();
}
catch(SQLException se){
se.printStackTrace();
}
conn = null;
}
}
}
}
-----------------------------------------------------------------------------------------------------------------
web.xml代码如下:
-----------------------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="gbk"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>SetCharacterEncodingFilter</filter-class>
</filter><filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping><servlet>
<servlet-name>CreateDBServlet</servlet-name>
<servlet-class>org.sunxin.lesson.jsp.bookstore.CreateDBServlet</servlet-class>
<init-param>
<param-name>dirverClass</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</init-param>
<init-param>
<param-name>url</param-name>
<param-value>jdbc:mysql://localhost:3306/mysql</param-value>
</init-param>
<init-param>
<param-name>user</param-name>
<param-value>root</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>root</param-value>
</init-param>
</servlet><servlet-mapping>
<servlet-name>CreateDBServlet</servlet-name>
<url-pattern>/createdb</url-pattern>
</servlet-mapping></web-app>
--------------------------------------------------------------------------------------------------------
ch08.xml代码如下:
--------------------------------------------------------------------------------------------------------
<Context path="/ch08" docBase="E:\JSPLesson\ch08" reloadable="true" />
解决方案 »
- hibernate 生成的sql不能执行
- JBPM
- 现在需要做个Web系统,要有用户自定义RSS 订制的功能
- 如何通过servlet给javabean传值(急急急)
- jsp速度问题?乍这么慢,我想有没有解决的办法?
- 小弟刚学JAVA :不知道这个错误是什么引起的: rs cannot be resolved ?
- JSP写入数据库中文乱码问题
- 为什么编译完了servlet bean 必须重启服务器 tomcat
- 为什么我在JSP页面中包含的文件不刷新?
- 救命啊!我无意中写除了一个,能够挤暴你硬盘的jsp,大家有兴趣来研究研究吧
- 请问怎么在Tomcat6.0中配置Oracle数据源?
- 很急很急的错误,HIBERNATE+SPRING+MYSQL
HTTP Status 500 - --------------------------------------------------------------------------------type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception javax.servlet.ServletException: Servlet.init() for servlet CreateDBServlet threw exception
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
java.lang.Thread.run(Thread.java:595)
root cause java.lang.NullPointerException
java.lang.Class.forName0(Native Method)
java.lang.Class.forName(Class.java:164)
org.sunxin.lesson.jsp.bookstore.CreateDBServlet.init(CreateDBServlet.java:21)
javax.servlet.GenericServlet.init(GenericServlet.java:211)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
java.lang.Thread.run(Thread.java:595)
note The full stack trace of the root cause is available in the Apache Tomcat/5.5.17 logs.
第21行,看看是啥,说那抛的。
好像初始化错了。
你先把关于数据库的参数在程序中写上,如果对,那就是你初始化那的事
没有找到driverClass
你取数据时用的是参数是driverClass
但配置文件里的是dirverClass,拼错了
我是直接启动Tomcat,我知道是没有找到driverClass,可是我把驱动包放到lib目录下了,还在classes\com\mysql\jdbc目录下,放了一个Driver.class类呢?问题依然没解决啊?
如果还不行tomcat的cmmon/lib再放一份再试试
这都看出来了
看看你web.xml中的驱动名和String driverClass = getInitParameter("driverClass"); 一致么??
好像还有个错,你都create database了,还要指定个数据库么。
"Can't create database 'bookstore'; database exists"
你这里的名字写错了
这里写你的驱动包里的驱动类的名字
例如如果使用mysql的jdbc驱动可以使用下面的方式获得
Class.forName("com.mysql.jdbc.Driver");
这里是通过你的驱动包中的这个类装载DriverManager,用以创建Connection.
具体的类结构你可以用winrar打开你的数据库驱动包,然后查看相关的类.
找到根异常的最后一个自定义类,这里是 CreateDBServlet.java
根据行数找到出错代码,这里是 Class.forName(driverClass); //加载并注册驱动程序
根据异常分析可能的原因,空指针异常只能是使用到的某个变量的值是空的,
这里比较有可能的是driverClass为空,(如果可以在这里断点一下就更好了)
看看driverClass是怎么来的,代码是 String driverClass = getInitParameter("driverClass");
原来是从配置文件里得到的,那么搜索driverClass,看看配置文件是怎么写的,结果找不到,
怪事,有可能跟问题有关,看看配置文件的内容是什么
<init-param>
<param-name>dirverClass </param-name>
<param-value>com.mysql.jdbc.Driver </param-value>
</init-param>
为什么找不到呢,原来是拼错了。