谁能讲一下jsp的调试问题.我刚学jsp,有些问题真的令我十分郁闷,很多天都解决不了. 用一个好一点的IDE,基本都可以做到JSP单步调试 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 java.lang.NullPointerException多半没有初始化。 44行这个String literal变量有问题仔细查查看! 随便什么都行,都可心自己做到单步的,你可以在你想要观察那个变量的值的前面在它还没有改变的时候,查看它的值,比如用一个消息框弹出,这样就好比在JAVA中的System.out.println();如此这般,慢慢的查找就OK了,还有,比如你的第二个错误,它都提示你了,44行有错误嘛,自己慢慢找看啊,编程中,写代码很容易,难的就是调试,不要放弃,错误遇到多了就会调了,写代码的错误也就少了,加油吧! JSP的调试问题确实不好办,因为JSP是由服务器自动编译成servlet,它给出的错误行号有可能是servlet的,和jsp文件对不上的。一般简单点就是写输入。用out.println()。高级点就是用lomboz eclipse,它可以实现在tomcat上调试,据说JBOSS也可以,不过我没试出来……再说深一点,JSP中本来就不应该有任何复杂的代码,你完全可以把这些代码独立成JAVA类,做好单元测试后交由JSP调用,或者使用流行框架开发(现在基本上现代一点的WEB程序都用框架,比如Struts或Tapestry等) 我用的是tomcat5.5.9 ,开发工具其实记事本不就可以吗.不过我以前学一点java时用的是jcreator所以写jsp也用jcreator了.不过它好象不能debug调试jsp. Jsp最后都会编译为Servlet如果出现未知错误可以在头尾加上try{......}catch(Exception ex){ex.printStackTrace();}可以显示出错误并可以知道编译后的Servelt是哪一行出现错误不过只对算法错误有效对逻辑错误不一定有效 原文件<%@ 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.jspGenerated 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) 分类 树状 UI Struts 中如何打开一个新的小窗口? 如何在代码中解决弹出新窗口跨浏览器的问题 ww:include引入文件时出现中文乱码 如何判别数字的长度? oracle有关 高手们,难题求救 jsp和servlet之间传递vector的问题 在线等待:字符串的问题,达人请帮瞧瞧 数据库中的数据怎么变味儿了? 小妹求问各位大哥大姐关于applet怎样访问数据库的问题? setAttibute后为什么在另一个页面中取不到?
多半没有初始化。
仔细查查看!
前面在它还没有改变的时候,查看它的值,比如用一个消息框弹出,这样就好
比在JAVA中的System.out.println();
如此这般,慢慢的查找就OK了,还有,比如你的第二个错误,它都提示你了,
44行有错误嘛,自己慢慢找看啊,编程中,写代码很容易,难的就是调试,不
要放弃,错误遇到多了就会调了,写代码的错误也就少了,加油吧!
一般简单点就是写输入。用out.println()。高级点就是用lomboz eclipse,它可以实现在tomcat上调试,据说JBOSS也可以,不过我没试出来……再说深一点,JSP中本来就不应该有任何复杂的代码,你完全可以把这些代码独立成JAVA类,做好单元测试后交由JSP调用,或者使用流行框架开发(现在基本上现代一点的WEB程序都用框架,比如Struts或Tapestry等)
所以写jsp也用jcreator了.不过它好象不能debug调试jsp.
如果出现未知错误
可以在头尾加上
try{
......
}catch(Exception ex)
{ex.printStackTrace();}
可以显示出错误
并可以知道编译后的Servelt是哪一行出现错误
不过只对算法错误有效对逻辑错误不一定有效
<%@ 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)