org.apache.catalina.core.StandardWrapperValve invoke的解决办法

故障码:

Servlet.service() for servlet servletAction threw exception
java.lang.NullPointerException
at com.dbdao.mysql.mySqlConnection.getClose(mySqlConnection.java:173)
at com.service.stuInfoService.delete(stuInfoService.java:109)
at com.action.servletAction.delete(servletAction.java:374)
at com.action.servletAction.doPost(servletAction.java:79)

网上查找的解决办法:


1.servlet或jsp中,重复调用response的 getOutputStream(),response.getWriter()方法。


2.form表单里没有 method="post" action=""参数。


3.看JDBC操纵数据库的代码,仔细看,例如调用的对象的属性为null。


Connection conn=null; 之后之就调用了conn的方法。


        以上三点我发现写的太笼统,容易让人摸不着头脑,不过经过查找,我终于发现自己代码的错误的地方了,原来是关闭数据库的连接没经过判断,直接就关闭了,这是我的故障源代码,现我将其贴出。


错误源代码:

public void getClose() {
// TODO Auto-generated method stub
//关闭结果集
try {
//结果集关闭方法
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//关闭声明的sql语句
try {
//关闭声明的sql语句方法
pstmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//卸载驱动
try {
//驱动卸载方法
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

        这知道,虽然在JavaWeb中报错很明显,直接以错误页面的形式满屏显示,但是在Java项目中则并不明显,比如说我一直用junit进行程序代码测试,由于我关注的焦点在控制台,控制台中的内容完全按照我写的代码在运行,而junit的报错却偏偏容易被忽略,因为自己的程序只写了一部分,不全很正常,而junit又恰恰只是测试了这不全代码的可运行的一部分,所以说这里的报错往往很难被注意到。


下面是改正后的代码:

/*
* 关闭方法
* */
public void getClose() {
// TODO Auto-generated method stub
//关闭结果集
try {
//结果集关闭方法
if(rs!=null){
rs.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//关闭声明的sql语句
try {
//关闭声明的sql语句方法
if(pstmt!=null){
pstmt.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//卸载驱动
try {
//驱动卸载方法
if(con!=null){
con.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

        还有比较容易错的地方是页面带参数进行跳转,由于跳转之后的页面本身也要执行一部分sql语句,比如说进行添加、修改、删除等操作后就自动跳转到新页面进行查询,整个过程是自动的,此时就有可能存在参数丢失的情况,所以说在这里也经常会出现该错误。


总之,出现该错误的地方往往是连接的环节,在关闭连接之前一定要判断连接是否已关闭再执行关闭连接操作,在连接调用之前也要判断连接的东西是否存在。









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值