jsp出现空指针,报错处竟然是在<%处,请高手指点!!

dhk987114 2009-12-29 03:19:46
大家请看我这段代码:其本功能是接受表单后更新数据库,然而总在<%这个地方出现空指针异常,不知道是什么回事:我把代码和报错信息贴出来大家看看。
AccUpdate.jsp
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="javax.naming.*"%>
<%@ page import="java.io.*"%>
<%@ page import="java.sql.*,javax.sql.*"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>操作结果</title>
</head>
<body>
<h1 align="center">
操作结果
</h1>
<% ----------------------------此行报错!
String accid=request.getParameter("AccId");

String name=request.getParameter("CustName");

float amount=Float.parseFloat(request.getParameter("Savingamount"));//获取参数

InitialContext ctx = new InitialContext();
DataSource ds=(DataSource)ctx.lookup("mysql");
Connection conn=null;
PreparedStatement preStmt=conn.prepareStatement("update account set amount=amount+? where id=? and name=?"); //语句对象

preStmt.setFloat(1,amount);
preStmt.setString(2,accid);
preStmt.setString(3,name);

try{
conn = ds.getConnection();
int ret=preStmt.executeUpdate();
if(ret==0){
%>
<p align="center">
操作失败,输入账号或姓名错误!
</p>
<%
} else {
%>
<p align="center">
存款成功!
</p>
<%
}
} catch (SQLException e) {
e.getMessage();
e.printStackTrace();
} finally {
if (conn != null)
conn.close();
if (preStmt != null)
preStmt.close();
if (ctx != null)
ctx.close();
}
%>
</body>
</html>






报错:Exception report

message

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

exception

org.apache.jasper.JasperException: An exception occurred processing JSP page /AccUpdate.jsp at line 15

12: <h1 align="center">
13: 操作结果
14: </h1>
15: <%
16: String accid=request.getParameter("AccId");
17:
18: String name=request.getParameter("CustName");


Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:504)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:415)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:336)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)


root cause

java.lang.NullPointerException
org.apache.jsp.AccUpdate_jsp._jspService(AccUpdate_jsp.java:84)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:336)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)


note The full stack trace of the root cause is available in the JBossWeb/2.0.1.GA logs.


...全文
232 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
dhk987114 2009-12-29
  • 打赏
  • 举报
回复
14楼朋友说的是正确的,先要在外部定义一个 preStmt,然后在里面赋给具体数值,谢谢大家,分数我已经分配了!
dhk987114 2009-12-29
  • 打赏
  • 举报
回复
谢谢各位好心人……
冬天的蒲公英 2009-12-29
  • 打赏
  • 举报
回复
String accid=request.getParameter("AccId");
是个空值 你可以String accid=“123”;看看到底是那一个出错了!
huangdh12 2009-12-29
  • 打赏
  • 举报
回复
jsp行数不一定正确的。。。有编译的
wl_ldy 2009-12-29
  • 打赏
  • 举报
回复
org.apache.jsp.AccUpdate_jsp._jspService(AccUpdate_jsp.java:84)
风过无痕1110 2009-12-29
  • 打赏
  • 举报
回复
DataSource ds=(DataSource)ctx.lookup("mysql");
Connection conn=null;
PreparedStatement preStmt=conn.prepareStatement("update account set amount=amount+? where id=? and name=?"); //语句对象
仔细看这几行代码,你在用conn对象时,并没有获得数据库连接
应该在PreparedStatement preStmt=conn.prepareStatement("update account set amount=amount+? where id=? and name=?");之前先获得数据库连接
如:try{
conn = ds.getConnection();
}catch(Exception e){

}
wawamao 2009-12-29
  • 打赏
  • 举报
回复
String accid=(String)request.getParameter("AccId");
子龙奶爸 2009-12-29
  • 打赏
  • 举报
回复
如果找不到,就去编译生成的路径一般是work文件夹下找:AccUpdate_jsp.Servlet.看看这文件的84行哪里错了。
org.apache.jsp.AccUpdate_jsp._jspService(AccUpdate_jsp.java:84)
zoumin19870910 2009-12-29
  • 打赏
  • 举报
回复

<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="javax.naming.*"%>
<%@ page import="java.io.*"%>
<%@ page import="java.sql.*,javax.sql.*"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>操作结果 </title>
</head>
<body>
<h1 align="center">
操作结果
</h1>
<%
String accid=request.getParameter("AccId");
String name=request.getParameter("CustName");

String sAmount=request.getParameter("Savingamount");
float amount=0f;
if(sAmount!=null && !"".equals(sAmount)){
amount=Float.parseFloat(sAmount);//获取参数
}

InitialContext ctx = new InitialContext();
DataSource ds=(DataSource)ctx.lookup("mysql");
......
</body>
</html>
lzh_me 2009-12-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 brodie 的回复:]
JSP的行数是不准的,因为要编译,
我觉得这行嫌疑比较大,
float amount=Float.parseFloat(request.getParameter("Savingamount"));//获取参数
[/Quote]

赞同,这个行数应该是编译为.java文件之后的行数。你可以去工程下找到它看看是哪里错了。
同事楼上支持的这个地方如果request.getParameter("Savingamount")得到的是null的话也是会报空指针异常的。
howsun_zh 2009-12-29
  • 打赏
  • 举报
回复
Connection conn=null;
PreparedStatement preStmt=conn.prepareStatement("update account set amount=amount+? where id=? and name=?"); //语句对象

一个为null的conn能调用其prepareStatement()方法吗?
zoumin19870910 2009-12-29
  • 打赏
  • 举报
回复
你要找Exception对应的行数的话,也应该是找编译后的jsp页面对应的行数,而不是在原页面上找!
估计是获取属性值的时候报的错!

这句最有嫌疑:float amount=Float.parseFloat(request.getParameter("Savingamount"));
你在转换之前最好先判断一下获取的属性值是否为null!
c0kaishi 2009-12-29
  • 打赏
  • 举报
回复
你在Tomcat的work目录下,找到AccUpdate_jsp.java的第84行,空指针就出在这里。
我觉得应该是float amount=Float.parseFloat(request.getParameter("Savingamount"));
这句出了问题,可能是request.getParameter("Savingamount")这里得到的是空值。
baoxuezhilang 2009-12-29
  • 打赏
  • 举报
回复
应该就是获取参数的时候出的问题,看一下传的参数和获取的名称是否对应上了
a1053543707b 2009-12-29
  • 打赏
  • 举报
回复
应该是获取属性时没有找到相对的内容。
学习Java中 2009-12-29
  • 打赏
  • 举报
回复
org.apache.jsp.AccUpdate_jsp._jspService(AccUpdate_jsp.java:84)
baoxuezhilang 2009-12-29
  • 打赏
  • 举报
回复
String accid=request.getParameter("AccId");
可能是jsp没有传这个属性。或者命名错误。调查一下吧
Brodie 2009-12-29
  • 打赏
  • 举报
回复
JSP的行数是不准的,因为要编译,
我觉得这行嫌疑比较大,
float amount=Float.parseFloat(request.getParameter("Savingamount"));//获取参数
healer_kx 2009-12-29
  • 打赏
  • 举报
回复
是JSP编译到Servlet时候出现的错误,应该是你JSP哪里有问题了。

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧