您的位置:程序门 -> java -> 非技术区



新手提升jsp技术能力的一点建议


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


新手提升jsp技术能力的一点建议[已结贴,结贴人:java2000_net]
发表于: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   没有判断每个方法的返回值,造成程序隐患  
发表于:2008-01-07 10:08:311楼 得分:2
恩,不错
发表于:2008-01-07 10:12:402楼 得分:2
太感谢了,以前的确遇到很多各种问题,特别是上面提到的问题,虽然都一一解决,但是从没有总结过!
发表于:2008-01-07 10:13:083楼 得分:2
mark,辛苦
发表于:2008-01-07 10:21:394楼 得分:2
呵呵!老紫竹真是太有心了~~~
发表于:2008-01-07 10:24:245楼 得分:1
呵呵,不错,谢谢
发表于:2008-01-07 10:49:006楼 得分:1
;)  
不错,顶!
发表于:2008-01-07 17:15:307楼 得分:1
      您说的很不错.   学习中.
发表于:2008-01-07 17:44:358楼 得分:1
好东西

楼主就差掰手指头教了

顶了
发表于:2008-01-08 17:00:169楼 得分:1
感谢
发表于:2008-01-08 17:17:2910楼 得分:1
你绝对不是第一个遇到这个问题的人,也不是最后一个。  

这句话很有哲理啊!
发表于:2008-01-08 20:07:5211楼 得分:1
感谢,说的很有道理,赞一个!
发表于:2008-01-09 11:42:5812楼 得分:1
授之以鱼不如授之以渔

讲得好.
发表于:2008-01-09 12:13:2913楼 得分:1
哈哈,没有用的,csdn中好多都是学生,他们都不大愿意去思考,一有问题就来问了,
一点搜索信息的能力都没有,而且问的问题有好多都是老生常谈的。
发表于:2008-01-09 12:57:5514楼 得分:0
同意,正说明水平不错的人永远是少数啊!   我就是给那些想成为少数人的朋友看的。
发表于:2008-01-10 11:58:0915楼 得分:1
其实还是不错的,还想说版主在你差一点一个星星之前,你给我回复了我的一个时间问题我本来想给你分,但不会给,找不到结贴的地方,不好意思了.呵呵
发表于:2008-01-10 17:44:2716楼 得分:1
学习啊
发表于:2008-01-10 19:52:1817楼 得分:1
受用咯


快速检索

最新资讯
热门点击