JAVA里一些易被疏忽的BUG

来源:互联网 发布:snmp客户端软件 编辑:程序博客网 时间:2024/05/22 12:06

         这些BUG如果是在调试环境下很容易发现问题所在,但在我们日常编程中可能疏忽,为减少调试次数提高开发效率,这里列出了一些常见的疏忽可能导致的BUG:

        1.空字符串用分隔符分隔后的数组长度为1,不为0.观察下面的代码片段:

         String attach = rs.getString("ENCLOSURELOGICNAME");    //rs为数据库查询出来的结果集,该字段存有附件信息,多个附件用分号分隔,如果没有附件则为空字符串       

         if(attach!=null && !attach.equals("")){ 
            String files[] = attach.split(";");
            for(int i=0;i<files.length;i++){
                   String str = files[i];
                   URI uri = new URI(str,false,"UTF-8");  

                   URL url = new URL(uri.toString());
                   ......           //后续代码省略

           }
        }

      上面这段代码,如果不加红色字体的那个条件,在有附件的时候不会有问题,但是如果没有附件attach 为null的时候就在最后那行上出问题了,会报IO异常:HOST parameter is not valid......

       2.在涉及到上传下载跳转等行为的时候,如果请求路径中包含中文或者特殊字符,要进行特殊处理。看下面的代码片段,该方法用来取得要下载的文件的长度。

       private static int getFileSize(String filePath) throws IOException{

             org.apache.commons.httpclient.URI uri = new org.apache.commons.httpclient.URI(filePath,false,"UTF-8"); 
             URL url = new URL(uri .toString());
             HttpURLConnection conn = (HttpURLConnection)url.openConnection();
             conn.setRequestMethod("GET");
             conn.connect();
             int code = conn.getResponseCode();
             if(code==200){
                  return Integer.valueOf(conn.getHeaderField("Content-Length"));
             }else{

              ...//此处省略请求异常处理代码
                 return 0;
            }
       }

    上述代码在tomcat环境下运行,如果不进行第一行的转换,那么只能正常获取不含中文字符或者特殊字符的文件长度,如果含有中文字符就会报错.

     3,tomcat在默认情况下对于post请求有长度限制(大约3M左右),所以,在用post请求传递参数的时候数据量不大服务正常,但数据量大的时候服务器端接收到的参数值为null,那么得检查下tomcat服务器的server.xml配置文件里是否有maxPostSize配置,添加此属性或者将此值改大或者设为0可以解决这个问题。

原创粉丝点击