用一个好一点的IDE,基本都可以做到JSP单步调试

解决方案 »

  1.   

    java.lang.NullPointerException
    多半没有初始化。
      

  2.   

    44行这个String literal变量有问题
    仔细查查看!
      

  3.   

    随便什么都行,都可心自己做到单步的,你可以在你想要观察那个变量的值的
    前面在它还没有改变的时候,查看它的值,比如用一个消息框弹出,这样就好
    比在JAVA中的System.out.println();
    如此这般,慢慢的查找就OK了,还有,比如你的第二个错误,它都提示你了,
    44行有错误嘛,自己慢慢找看啊,编程中,写代码很容易,难的就是调试,不
    要放弃,错误遇到多了就会调了,写代码的错误也就少了,加油吧!
      

  4.   

    JSP的调试问题确实不好办,因为JSP是由服务器自动编译成servlet,它给出的错误行号有可能是servlet的,和jsp文件对不上的。
    一般简单点就是写输入。用out.println()。高级点就是用lomboz eclipse,它可以实现在tomcat上调试,据说JBOSS也可以,不过我没试出来……再说深一点,JSP中本来就不应该有任何复杂的代码,你完全可以把这些代码独立成JAVA类,做好单元测试后交由JSP调用,或者使用流行框架开发(现在基本上现代一点的WEB程序都用框架,比如Struts或Tapestry等)
      

  5.   

    我用的是tomcat5.5.9 ,开发工具其实记事本不就可以吗.不过我以前学一点java时用的是jcreator
    所以写jsp也用jcreator了.不过它好象不能debug调试jsp.
      

  6.   

    Jsp最后都会编译为Servlet
    如果出现未知错误
    可以在头尾加上
    try{
    ......
    }catch(Exception ex)
    {ex.printStackTrace();}
    可以显示出错误
    并可以知道编译后的Servelt是哪一行出现错误
    不过只对算法错误有效对逻辑错误不一定有效
      

  7.   

    原文件
    <%@ page contentType="text/html;charset=gb2312" %>
    <%@ page import="java.sql.*" %>
    <%@ page import="java.io.*" %>
    <%@ page import="test.Login" %>
    <%@ page import="test.PageNumber" %>
    <%@ page import="test.HandleMessage" %>
    <jsp:useBean id="handlePage" class="test.PageNumber" scope="session"/>
    <jsp:useBean id="login" class="test.Login" scope="session"/>
    <jsp:useBean id="handle" class="test.HandleMessage" scope="page"/>
    <% //ruguo yonghu zhijie jinru gai yemian,jiang bei zhuanxiang denglu yemian.
      if(session.isNew())
      {
      response.sendRedirect("friendLogin.jsp");
      }
      //ruguo meiyou chenggong denglu jiang bei zhuanxiang denglu yemian.
      String success=login.getSuccess();
      if(success==null)
      {
      success="";
      }
      if(!(success.equals("OK")))
      {
      response.sendRedirect("friendLogin.jsp");
      }
      %>
      <html>
      <body bgcolor="orange">
      <font color="" size="5">
    <table align="center" border="0" width="790" height="12" bgcolor="pink" cellspacing="0">
    <tr>
    <td width="100%">
    <a href="<%=response.encodeURL("friendShowMember.jsp")%>">浏览会员</a>|
    <a href="<%=response.encodeURL("friendRigister.jsp")%>">会员注册</a>|
    <a href="<%=response.encodeURL("friendLogin.jsp")%>">会员登录</a>|
    <a href="<%=response.encodeURL("friendFind.jsp")%>">查找会员</a>|
    <a href="<%=response.encodeURL("friendMessage.jsp")%>">留言板</a>|
    <a href="<%=response.encodeURL("friendPublicMessage.jsp")%>">查看公共留言</a>|
    <a href="<%=response.encodeURL("friendSecretMessage.jsp")%>">查看私人留言</a>|
    <a href="<%=response.encodeURL("friendModifyPassword.jsp")%>">修改密码</a>|
    <a href="<%=response.encodeURL("friendModifyMessage.jsp")%>">修改个人信息</a>
    </td>
    </tr>
    </table>
    <p>私人留言列表:
    </p>
    <% out.print("here"); %>
    <%! 
    Connection con=null;
    public void showList(ResultSet rs,javax.servlet.jsp.JspWriter out,int n,test.HandleMessage h)
    {
    try
    {
    out.print("<table border>");
    out.print("<tr>");
    out.print("<th width=50>"+"<font size=5>"+"会员名");
    out.print("<th width=70>"+"<font size=5>"+"留言时间");
    out.print("<th width=70>"+"<font size=5>"+"留言时间");
    out.print("<th width=50>"+"<font size=5>"+"删除留言");
    out.print("</tr>");
    for(int i=1;i<=n;i++)
    {
    String logname=rs.getString("logname");
    if(logname==null)
    {
    logname="";
    }
    String message=rs.getString("message");
    if(message==null)
    {
    message="";
    }
    String time=rs.getString("time");
    if(time==null)
    {
    time="";
    }
    h.setContent(message);
    message=h.getContent();
    out.print("<tr>");
    out.print("<td >"+logname+"<\td>");
    out.print("<td >"+message+"<\td>");
    out.print("<td >"+time+"<\td>");
    //tianjia yige shanchu gai xinxi de biaodan.
    String s1="<form action=frienddelete.jsp method=post>";
    String s2="<input type=hiden name=time value="+time+">";
    String s3="<input type=submit value=删除该留言>";
    String s=s1+s2+s3;
    out.print("<td >"+s+"<\td>");
    out.print("</tr >");
    rs.next();
    }
    out.print("</table>");
    }
    catch(Exception e)
    {
    out.print(e);
    }
    }

     %>
      <% 
       out.print("here");
      Statement sql=null;
      ResultSet rs=null;
      int rowCount=0;
      String logname="";
      if(con==null)
      {
      try
      {
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
      }
      catch(ClassNotFoundException e)
      {
      out.print(e);
      }
      try
      {
      con=DriverManager.getConnection("jdbc:odbc:friend","nava","320727");
      sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
      String s=login.getLogname();
      if(s==null)
      {
      s="";
      }
      String condition="select * from secretwordpad where logname="+"'"+s+"'";
      rs=sql.executeQuery(condition);
      rs.last();
      int number=rs.getRow();
      rowCount=number;
      handlePage.setPageSize(3);
      handlePage.setShowPage(1);
      handlePage.setPageCount(rowCount,handlePage.getPageSize());
      out.print("共有"+handlePage.getPageCount()+"页");
      out.print("每页显示"+handlePage.getShowPage()+"条记录");
      }
      catch(SQLException e)
      {
      out.print(e);
      }
      }
      else
      {
      synchronized(con)
      {
      try
      {
      // con=DriverManager.getConnection("jdbc:odbc:friend","nava","320727");
      sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
      String s=login.getLogname();
      if(s==null)
      {
      s="";
      }
      String condition="select * from secretwordpad where logname="+"'"+s+"'";
      rs=sql.executeQuery(condition);
      rs.last();
      int number=rs.getRow();
      rowCount=number;
      handlePage.setPageSize(3);
      handlePage.setShowPage(1);
      handlePage.setPageCount(rowCount,handlePage.getPageSize());
      out.print("共有"+handlePage.getPageCount()+"页");
      out.print("每页显示"+handlePage.getShowPage()+"条记录");
      }
      catch(SQLException e)
      {
      out.print(e);
      }
      }
      }
      %>
      <form action="" method="post">
      输入要显示的页:
      <input type="text" name="ok" value="1">
      <input type="submit" value="submit">
      </form>
      <% 
       try
       {
       String s=request.getParameter("ok");
       if(s==null)
       {
       s="1";
       }
       int m=Integer.parseInt(s);
       handlePage.setShowPage(m);
       out.print("目前显示第"+handlePage.getShowPage()+"页");
       int n=handlePage.getShowPage();
       rs.absolute((n-1)*handlePage.getPageSize()+1);
       showList(rs,out,handlePage.getPageSize(),handle);
       }
       catch(Exception e)
       {
       out.print("必须输入数字");
       }
       %>
      </body>
      </html>
    错误如下,谁能侃侃?
    org.apache.jasper.JasperException: Unable to compile class for JSPAn error occurred at line: 47 in the jsp file: /friendSecretMessage.jsp
    Generated servlet error:
    Unhandled exception type IOException
    org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:84)
    org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:328)
    org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:397)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:288)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:267)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:255)
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:556)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:293)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)