java.lang.NullPointerException!

alicezhong2003 2003-08-25 10:24:06
我曾经在21号的时候贴过这个问题,有很多朋友给我想出过这样那样的办法,我是个刚学几天的初学者,还是没能把这个问题解决了,这些代码都是我按照书上的例题做的,如果这个页面无法完成,其它的东西就都白做了,请诸位再帮忙看一下.希望能提出详细的解决方案.谢谢!尽我所能,把我170分中的100分都给您.
程序代码:
<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*"%>
<%!
Connection con=null;
Statement stmt=null;
ResultSet rs=null;

public void jspInit()
{
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con=DriverManager.getConnection("jdbc:odbc:ClassDB");
stmt=con.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
}
catch(Exception ex)
{
System.out.println(ex.toString());
}
}

public void jspDestroy()
{
try{
rs.close();
stmt.close();
con.close();
}
catch(Exception ex)
{
System.out.println(ex.toString());
}
}
public String ShowContent(String strCon)
{
int SPos=0;
int EPos=0;
int totallen=strCon.length();
String strShow="";
char cr=13, If=10;
String strMid= null;

for(EPos=0;EPos<totallen;EPos++);
{
char c=strCon.charAt(EPos);
if(c==13)
{
if(EPos !=SPos)
{
strMid=strCon.substring(SPos,EPos);
strShow=strShow + ">" + strMid + cr + If;
}
else
strShow=strShow + ">" + cr + If;
SPos= EPos +2;
}
}
if(SPos<totallen)
{
strMid=strCon.substring(SPos,EPos);
strShow=strShow + ">" + strMid + cr + If;
}
return strShow;
}
%>

<html>
<head>
<title>讨论区</title>
<%
String RepID=request.getParameter("RepID");
String Title=request.getParameter("Title");
String PostID=request.getParameter("PostID");
%>
<script language="JavaScript">
<!--
function Abort(RID)
{
self.location="Content.jsp?ID=" + RID;
}
-->
</script>
</head>
<body>
<form action="<%="post.jsp?RepID=" + RepID%>" method="post" name="frmPost">
<P>发言人:
<INPUT name="Poster" style="height:25px;width:151px"></p>
<p>e-mail:<input name="e-mail" style="height:25px;width:383px"></p>
<p>标题:<input name="Title" style="height:25px;width:401px"></p>
<%
if(!RepID.equals("0"))
{
Title="Re:" + Title;
out.println("value=\"" + "Title" + "\"");
}
%></p>
内容:<br>
<textarea name="Content" style="height:155px;width:601px">
<%
String strSQL=null;
if(!RepID.equals("0"))
{
strSQL="SELECT Content FROM Board WHERE ID=" + " PostID ";
rs=stmt.executeQuery("strSQL");
rs.next();
out.println(ShowContent(rs.getString("Content")));
}
else
{
strSQL="SELECT ID FROM Board" + " WHERE RepID=0 ORDER BY LastRep DESC ";
rs=stmt.executeQuery(strSQL);
rs.next();
RepID=rs.getString("ID");
}
%>
</textarea>
<p><input name="submit1" type="submit" value="张贴">
<input name="reset1" type="reset" value="我要重新写">
<input type="button" value="放弃" name="botton1" onclick="Abort(<%=RepID%>)">
</p>
</form>
</body>
</html>
...全文
8114 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
alicezhong2003 2003-08-26
  • 打赏
  • 举报
回复
还都没解决那
out.println(ShowContent(rs.getString("Content")));"
不把上行//了就运行不了
flyshp 2003-08-26
  • 打赏
  • 举报
回复
都解决了么?
alicezhong2003 2003-08-26
  • 打赏
  • 举报
回复
我的post.jsp的页面也做完了,下载:http://go.6to23.com/alicezhong/post.jsp
alicezhong2003 2003-08-25
  • 打赏
  • 举报
回复
我的教材书上这样说:
张贴文章的状态有两种,而究竟是在那一种情况瞎,要进行添加文章,是通过RepID参数来判断.当按下主题区的"张贴新文章"连接时,所传送的RepID参数将为0.
而当按下的是相应区的"响应此文章"时,则,RepID所返回的是要响应主题的编号,且"响应此篇文章"的超级链接会同时将要响应文章的标题"Title"与该文章的编号(postID)一并返回.通过RepID的变量值的判断,将控制PostForm.jsp文件应该产生什么样的窗体供用户进行数据输入.
alicezhong2003 2003-08-25
  • 打赏
  • 举报
回复
其中的"RepID"是"数字"类型,字段大小"整型"小数位数"自动",必填字段"是"
其中"ID"是"数字"类型,字段大小"长整型",小数位数"自动",必添字段"是"

我等你,中午不吃了
alicezhong2003 2003-08-25
  • 打赏
  • 举报
回复
刚按上边的方法改了,不成.为了防止sql语句上有问题我已经改过N次了.

谢谢
我是初学者,上边的人,能具体说一下怎么"new"嘛?我试试.
刚我上传了我的这个BBS程序,其中的postForm.jsp就是这页,有好心的人帮忙运行一下看看嘛,谢谢了.
http://go.6to23.com/alicezhong/讨论区.rar
fsroger 2003-08-25
  • 打赏
  • 举报
回复
strSQL="SELECT Content FROM Board WHERE ID=" + " PostID ";
改为
strSQL="SELECT Content FROM Board WHERE ID=" + PostID;
alicezhong2003 2003-08-25
  • 打赏
  • 举报
回复
rs=stmt.executeQuery("strSQL"); 应该写为
rs=stmt.executeQuery(strSQL);

我刚改了,还是不成
以前是没加引号的,后来乱加了试的.
fsroger 2003-08-25
  • 打赏
  • 举报
回复
对啊,Sql语句有问题,程序上出现两个问题!
hesi726 2003-08-25
  • 打赏
  • 举报
回复
看来我对 JSP 不熟悉啊!
不知道, jspinit,jspDestroy 会被自动调用!不好意思!!!
hesi726 2003-08-25
  • 打赏
  • 举报
回复
jspInit 函数 初始化 stmt,
但 jspInit 什么时候被调用了??

既然,jspInit 没有被调用, stmt 当然还是 null!
strSQL="SELECT Content FROM Board WHERE ID=" + " PostID ";
rs=stmt.executeQuery("strSQL");

当然抛出 NullException 了!
还有就是,
rs=stmt.executeQuery("strSQL"); 应该写为
rs=stmt.executeQuery(strSQL);
alicezhong2003 2003-08-25
  • 打赏
  • 举报
回复
按fsroger(fsroger)的方法,我把String RepID=request.getParameter("RepID");改成了String RepID=request.getParameter("RepID")==null?"":request.getParameter("RepID");
后来显示错误:
org.apache.jasper.JasperException: [Microsoft][ODBC Microsoft Access Driver] 无效的 SQL语句;期待 'DELETE'、'INSERT'、'PROCEDURE'、'SELECT'、或 'UPDATE'。

fsroger 2003-08-25
  • 打赏
  • 举报
回复
String RepID=request.getParameter("RepID")==null?"":request.getParameter("RepID");
alicezhong2003 2003-08-25
  • 打赏
  • 举报
回复
我是初学者,上边的人,能具体说一下怎么"new"嘛?我试试.
刚我上传了我的这个BBS程序,其中的postForm.jsp就是这页,有好心的人帮忙运行一下看看嘛,谢谢了.
http://go.6to23.com/alicezhong/讨论区.rar
beyondhuangjie 2003-08-25
  • 打赏
  • 举报
回复
代码太长了,看起来烦躁。肯定原因只有一个,只定义了对象的引用,没有new!
alicezhong2003 2003-08-25
  • 打赏
  • 举报
回复
我刚把所有的字段都设置成"不可为空"试了一下,还是不成
zhaoxichao 2003-08-25
  • 打赏
  • 举报
回复
是不是有些字段可以为空?取出来是null
alicezhong2003 2003-08-25
  • 打赏
  • 举报
回复
我的ACCESS数据库结构
字段
ID张贴文章的编号
Poster张贴者
PostTime张贴时间
Content文章内容
RepID相应的主题编号 //要响应主题的编号,即为该主题第一篇文章的记录编号(id栏的值)
LastRep最近一次相应此主题的时间
RepNum相应此主题的文章数目
ConNum浏览此主题的人数
以上是我的所有字段
alicezhong2003 2003-08-25
  • 打赏
  • 举报
回复
错误提示:
org.apache.jasper.JasperException
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:254)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2415)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:594)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:392)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:565)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619)
at java.lang.Thread.run(Thread.java:536)


root cause

java.lang.NullPointerException
at org.apache.jsp.postForm_jsp._jspService(postForm_jsp.java:137)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:137)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:210)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2415)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:594)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:392)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:565)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619)
at java.lang.Thread.run(Thread.java:536)

alicezhong2003 2003-08-25
  • 打赏
  • 举报
回复
content.jsp里

<a href ="postForm.jsp?<%=ArgmList%>">响应此文章</a>是应该没有空格的我知道了.

有一个人帮我试了一下,他把"postForm.jsp"中的下边的一句"out.println(ShowContent(rs.getString("Content")));"
这句话给"//"了,也就是让其不执行,后来除了这个"postForm.jsp"页面单独不能执行外,其它的两个页面"Board.jsp和title.jsp"点击"张贴新文章页面"来调"postForm.jsp"页,就可以正常了.也就是说跟out.println(ShowContent(rs.getString("Content")));有关系.

加载更多回复(10)

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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