| 发表于:2008-01-07 09:46:25 楼主 |
原文地址 这里帖子不能编辑,如有建议或修正,我会在那面更改。 ----------------------------------------------------------------- 一 如何快速提升自己的技术能力 做项目。 自己假设的也算。 比如你要做一个论坛,像csdn 这样的。 在制作过程中,你会遇到非常多的困难。 你的代码结构也会变动很多次,我说的是结构,代码就变动更多了。 遇到问题,首先到搜索引擎上去搜索,我只去google,可以确定一点, 你绝对不是第一个遇到这个问题的人,也不是最后一个。 只有自己通过努力思考,搜索,最终掌握的东西才真正是自己的。 自己实在想不通,也找不到(因为不会找,而不是没有),再到论坛,qq什么的,找其它人帮忙 问题也会局限在某个技术点上,毕竟你已经自己思考过了,别人稍微一点拨,你就会豁然开朗的。 那些直接问,这个功能怎么做啊的,基本都不是自己认真思考过的,否则他只会问,谁知道xxx的地方,怎么弄才能达到yyy的效果? 另外,英文是不不可少的,看到那么多人带着异常来求救,真是.... 二 关于jsp的调试 授之以鱼不如授之以渔,掌握有效的调试方法才是正道。 nullpointerexception classnotfoundexception 这2个出现的频率太高了,如果他能仔细看的话,异常信息连那一行都给你指出来了,自己直接去看源代码不就行了 以tomcat为例。 jsp文件会先被tomcat的 jspc 翻译成 .java文件,一个servlet, 然后再javac 编译成.class文件 找到错误 你的错误信息一般有2种大类 1 源代码错误 复制内容到剪贴板代码: org.apache.jasper.jasperexception: unable to compile class for jsp: an error occurred at line: 24 in the jsp file: /viewthread.jsp syntax error, insert ";" to complete statement 21: } 22: if(post.getidparent()> 0){ 23: %> 24: <script type="text/javascript"> self.location="viewthread.jsp?tid= <%post.getidparent()%> "; </script> 25: <% 26: return; 27: } stacktrace: at org.apache.jasper.compiler.defaulterrorhandler.javacerror(defaulterrorhandler.java:85) at org.apache.jasper.compiler.errordispatcher.javacerror(errordispatcher.java:330) at org.apache.jasper.compiler.jdtcompiler.generateclass(jdtcompiler. 可以看到在第24行,出现了无法编译的问题,经检查,那个 <%post.getidparent()%> 少了等于号 <%=post.getidparent()%> 这类错误因为错误信息和源代码逐行对应,所以比较好找。 2 运行错误 复制内容到剪贴板代码: http status 500 - -------------------------------------------------------------------------------- type exception report message description the server encountered an internal error () that prevented it from fulfilling this request. exception org.apache.jasper.jasperexception org.apache.jasper.servlet.jspservletwrapper.handlejspexception(jspservletwrapper.java:512) org.apache.jasper.servlet.jspservletwrapper.service(jspservletwrapper.java:395) org.apache.jasper.servlet.jspservlet.servicejspfile(jspservlet.java:314) org.apache.jasper.servlet.jspservlet.service(jspservlet.java:264) javax.servlet.http.httpservlet.service(httpservlet.java:802) root cause java.lang.nullpointerexception java.math.bigdecimal.compareto(bigdecimal.java:2406) com.goodtp.sales.html.order.getorderitem(order.java:146) com.goodtp.sales.html.htmlorder.saveorder(htmlorder.java:214) org.apache.jsp.saler.saveorder_jsp._jspservice(saveorder_jsp.java:180) org.apache.jasper.runtime.httpjspbase.service(httpjspbase.java:97) javax.servlet.http.httpservlet.service(httpservlet.java:802) 这个错误最常见,请注意如下这一行 org.apache.jsp.saler.saveorder_jsp._jspservice(saveorder_jsp.java:180) 错误在 saveorder_jsp.java 的 180行, 怎么找到这个文件呢 这个文件就在 tomcat/works/ 目录下面,你可以在这个目录下面搜索文件,就能找到saveorder_jsp.java 打开后,找到 180行,就可以看到到底是哪里出了问题了。 对于eclipse集成tomcat调试的, 这个文件不在 tomcat目录下面,而是在 eclipse\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work 实在找不到,就全盘搜索,一般也就1-3分钟的事情。 问题找到了,怎么调试呢? 我们假设你没有用过log工具,我们现在就用最简单的 system.out.println() 来做 比如nullpointerexception, 那证明那一行的调用方法的对象是null, int id = order.getid(); // 你可以修改成 system.out.println("order="+order); int id = order.getid(); 运行,你就能在控制台看到 order=null 的输出,从而确定 order并没有被正确的赋值。 然后以这里为起点,逐步往前面查找,看看到底是哪里给order赋值的。比如找到 order order = orderservice.find(orderid); 这也许是因为 orderid对应的order根本没有啊,也许是orderid取错了参数。 修改为 system.out.println("orderid="+order); order order = orderservice.find(orderid); 运行,输出为 orderid=35 查看数据库,如果不存在35号数据,可以肯定参数错误,如果存在,可以肯定是 orderservice.find() 方法里面出现了问题。查进取 这就是最基本的jsp调试方法. 对于java应用,比如swing, eclipse提供了集成单步调试工具,就更方便了。 随着经验的积累,你会很快的找到问题的原因,而且同样的错误,你也会降低极大的再次出现的几率。 三 classnotfoundexception 的解决方法 classpath问题,对于jsp,最大的可能是因为你的jar没有放对地方,对于tomcat 有2个地方可放 a) tomcat\shared\lib 目录 tomcat 5.5版本 或者 tomcat\lib目录 tomcat6版本 b) 你的应用的 web-inf\lib 目录 推荐放在这里。 如果你不确认需要哪些jar,就把hibernate随包带的都复制过去就行了。 虽然不推荐,但对于初学者,也是一个临时的解决方法 四 最常见的几种问题和解决方法 1 字符串的== 判断,应该用 equals() 进行 2 resultset 使用前忘了 rs.next(); 3 数据库连接没有放在 finally{} 里面关闭 4 没有判断每个方法的返回值,造成程序隐患 |
|
|
|
|