index.jsp
<html>
<head>
</head>
<body>
<%@ page language="java" %>
<%@ page import="java.sql.*" %>
<%@ page import="sqldata.SqlData;" %>
<%@ page contentType="text/html;charset=gb2312"%>
<jsp:useBean id="sqlbean" class="SqlData" scope="session">
   <jsp:setProperty name="sqlbean" property="*" />
</jsp:useBean>
<%! String name,email,url,body,sql;%>
<%
name=request.getParameter("name");
email=request.getParameter("email");
url=request.getParameter("url");
body=request.getParameter("body");
if(name!=""&&email!=""&&body!="")
{ sql="insert into guestbook(name,email,url,body)values('"+name+"','"+email+"','"+url+"','"+body+"')";
  sqlbean.executeInsert(sql);
}
else
{
 out.print("<b><font color=red>Sorry,please enter your name,email and body!!!</font></b>");
}
%>
<%
ResultSet RScount = sqlbean.executeQuery("select * from guestbook");
int i = 0;
while(RScount.next())
{
 i++;
}
%>
<%-- <p><a name=see><b>Now, <%= RScount %> Records.</b></a></p> --%>
<p><b>现在有<%= i %> 条记录</b></p>
<%
RScount.close();
i=0;
%>
<p>&nbsp;</p>
<%
ResultSet RS=sqlbean.executeQuery("Select * from guestbook");
while(RS.next())
{
name=RS.getString("name");
email=RS.getString("email");
url=RS.getString("url");
body=RS.getString("body");
%>
<table border=1 width=80% >
<tr>
<td width=30% >呢称:</td><td width=70% ><%=name%>
</tr>
<tr>
<td width=30%>电子邮件:</td><td width=70%>
<a href="mailto:<%=email%>"><%=email%></a></td>
</tr>
<tr>
<td width=30%>个人主页地址:</td><td width=70%>
<a href="<%=url%>"><%=url%></a></td>
</tr>
<tr>
<td width=30% >内容:</td><td width=70%><%=body%></td>
</tr>
</table>
<hr>
<%
}
RS.close();
%>
</body>
</html>

解决方案 »

  1.   

    SqlData.java
    package sqldata;
    import java.sql.*;public class SqlData
    {
    String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
    Connection conn = null;
    ResultSet rs = null;
       
        public SqlData(){ try {
    Class.forName(sDBDriver);
                            System.out.println("Success loading JDBC-ODBC Bridge Driver...\n");
    } catch(ClassNotFoundException e ) {
    System.out.println("Error loading JDBC-ODBC Bridege Driver...\n");
    }
    } public void executeInsert(String sql) {
    try {
    conn = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=jsp","sa","821");
                            System.out.println("Success eastabllishing the Connection...\n");
    Statement stmt = conn.createStatement();
    stmt.executeUpdate(sql);
    } catch(SQLException e) {
    System.err.println("sql_data.executeUpdate:" + e.getMessage());
    }
    } public ResultSet executeQuery(String sql) { rs = null;
    try {
    conn = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=jsp","sa","821");
    Statement stmt = conn.createStatement();
    rs = stmt.executeQuery(sql);
    } catch(SQLException e) {
    System.err.println("sql_data.executeQuery:" + e.getMessage());
    } return rs;}   public void executeDelete( String sql) {         try {
                   conn = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=jsp","sa","821");
       Statement stmt = conn.createStatement();
       stmt.executeUpdate(sql);
    } catch(SQLException e) {
    System.err.println("sql_data.executeDelete:" + e.getMessage());
    }
    }}
      

  2.   

    错误如下:
    type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception org.apache.jasper.JasperException
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:358)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
    root cause java.lang.NullPointerException
    org.apache.jsp.index_jsp._jspService(index_jsp.java:79)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:133)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
    note The full stack trace of the root cause is available in the Tomcat logs.
      

  3.   

    空指针,看各个组件名称获取时是否正确!调试时可以屏蔽一些JSP代码,看出错部分在哪里,!
      

  4.   

    SERVET的配置是没有问题的,建立了一个JSP的数据库,在里面的建立了一个guestbook的表。
    JDBC也是配置了的啊,测试数据源成功。
    java.lang.NullPointerException
    org.apache.jsp.index_jsp._jspService(index_jsp.java:79)
    看这句话大概的意思是:有空值。但是看看程序,依然找不到错误什么地方,一直被这件事情
    捆饶着,没有睡好觉的啊。大家麻烦看看,代码比较长,大家都比较忙的,所以我在先此谢谢
    大家一声!
      

  5.   

    NullPointerException 自己跟踪一下不就知道了?
      

  6.   

    我才学习JAVA  asklxf麻烦告诉下,怎么跟踪啊
      

  7.   

    <jsp:useBean id="sqlbean" class="SqlData" scope="session">
       <jsp:setProperty name="sqlbean" property="*" />
    </jsp:useBean>
    这个是不是要改一下!
    <jsp:useBean id="sqlbean" class="sqldata.SqlData" scope="session">
       <jsp:setProperty name="sqlbean" property="*" />
    </jsp:useBean>
    那个scope="session"要不要改一下我就不知道了!!
      

  8.   

    NullPointerException我知道出现在那里,然后我把那些代码去掉后,问题没有在出现了。
    但是程序应该执行了这段代码,
    <%! String name,email,url,body,sql;%>
    <%
    name=request.getParameter("name");
    email=request.getParameter("email");
    url=request.getParameter("url");
    body=request.getParameter("body");
    if(name!=""&&email!=""&&body!="")
    { sql="insert into guestbook(name,email,url,body)values('"+name+"','"+email+"','"+url+"','"+body+"')";
      sqlbean.executeInsert(sql);
    }
    else
    {
     out.print("<b><font color=red>Sorry,please enter your name,email and body!!!</font></b>");
    我去数据库JSP中看表guestbook,奇怪的是,刚才输入的数据并没有写入数据库jsp中啊
    这是为什么呢?
      

  9.   

    建议你在写入数据库前,先把变量数据输出在网页上,看看是否正确有效,看看有无null后,再写入数据库!
      

  10.   

    采用了zero_3(书名号)方得到,变量数据能够输出在网页上。看来是数据库方面的问题。
      

  11.   

    数据库的建立过程如下,麻烦大家了:
    自己在自己机子上先新建了一个数据库,名字jsp。在此库中新建了一个表guestbook。
    然后添加ODBC数据源过程后得到消息:
    Microsoft SQL Server ODBC 驱动程序版本 03.81.7713数据源名称: guestbook.dsn
    数据源描述: guestbook
    Server: (local)
    数据库: jsp
    语言: (Default)
    翻译字符数据: Yes
    日志长运行查询: No
    日志驱动程序统计: No
    使用集成安全机制: No
    使用区域设置: No
    预定义的语句选项: 在断开时删除临时存储过程
    使用故障转移服务器: No
    使用 ANSI 引用的标识符: Yes
    使用 ANSI 的空值,填充和警告: Yes
    数据加密: No
      

  12.   

    数据没有进入数据库,看看是不是SQL语句出了问题.
    输出一下SQL看看.
    另外 if(name!=""&&email!=""&&body!="")
    不能这么写吧.
      

  13.   

    应该这样写if(!name.equals("")&&!email.equals("")&&!body.equals(""))
      

  14.   

    executeInsert(String sql) {
    try {
    conn = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=jsp","sa","821");
                            System.out.println("Success eastabllishing the Connection...\n");
    Statement stmt = conn.createStatement();
    应该是conn为null
      

  15.   

    自己写了个程序来测试了数据库,知道自己的数据库是没有问题的。
    然后在大家的提示下,知道问题出现在index.jsp文件中那些建立
    数据库连接的代码上。正如Acylas所说的那样啊。
      

  16.   

    if(!name.equals("")&&!email.equals("")&&!body.equals(""))应该是这句出错了。曾经我写一个数据的也是。因为我默认值是'',所以取出来的时候用了这样操作name.trim().length()==o   name=null;
    这样一来,出错了。
      

  17.   

    if(name!=""&&email!=""&&body!="")看看你这句吧,如果只是要判断非空;
    ---》
    if ((!"".equals(name))&&(!"".equals(email))&&(!"".equals(body)))
      

  18.   

    lwqadmin() 、sgdb(神天月晓)谢谢你们。我现在从程序里去掉了if(name!=""&&email!=""&&body!="")这句话,然后加了以下的语句:
      sql="insert into guestbook values('name','email','url','body')";
      int s = 0;
      s=sqlbean.executeInsert(sql);
      out.println(s);
      在这以后的的语句都去掉了,我的目的主要是检查程序是否真的执行了.executeInsert(sql)
    (因为函数executeInsert(sql)回调用executeUpdate(sql),而executeUpdate(sql)返回一个整数,所以我想看看如果s值变了表示executeUpdate(sql)确实执行了,结果s=2 表示执行了插入命令)
    当然SqlData也做了变化:
    String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
    改为了String sDBDriver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";public int executeInsert(String sql) {
    int j = 0;
    try {
    conn = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=jsp","sa","821");
                            System.out.println("Success eastabllishing the Connection...\n");
    Statement stmt = conn.createStatement();
    j = stmt.executeUpdate(sql);
    } catch(SQLException e) {
    System.err.println("sql_data.executeUpdate:" + e.getMessage());
    }
    return j;
    }
    执行后的页面上显示如下:2。
    去打开数据库看看,结果刚才输入的数据依然没有成功输入数据库啊。
    我拿其他的我自己编写的函数向这个数据库写数据,经过数据成功写入。
    真的有些不懂了。
      

  19.   

    并且用了SQL事件探查器看看了,发现stmt.executeUpdate(sql);虽然执行了,但是并没有被SQL事件探查器发现。
      

  20.   

    打扰大家了,问题已经得到了解决。
    谢谢 
    tolimit(为JAVA鞠躬尽瘁,死而后已) 
    asklxf(xuefeng) 
    jiankou2001(狗狗)
    zero_3(书名号) 
    wooddy_lee(wooddy)
    alpga(星宇) 
    Acylas(Acylas) 
    lwqadmin() 
    sgdb(神天月晓) 
    马上结贴了,相信以后还回在CSDN上遇见大家的。
    再见!!