沃杂志后台项目开发测试问题总结 之 后台问题

/***********************后台bug总结**********************************
下面是在工作中常用的一些后台的bug,
目标:总结常用的问题的解决方法,提高开发效率
开始时间:2011-11-10
编写人:happ
参阅书籍:
相关项目:《中国联通电子杂志后台【2011-10~】 技术:ssh1+oracle+javaScript||jQuery》
*/

目录【按项目划分】

1 杂志管理项目中遇到的bug【2011-10~2012-1】
    1.1 在做验证杂志不能重复时 【2011-11-10】
    bug描述:Caused by: org.hibernate.hql.ast.QuerySyntaxException: unexpected token: Z near line 1,   column 97 [from com.sinovatech.mall.magazine.model.dto.TMagazineDTO Z where Z.isDel=0 and      Z.name='happ043' Z.period='2018002']
    原因:在where 条件中新增的查询条件之前没有加"and",请仔细看 “where Z.isDel=0 and Z.name='happ043'   Z.period='2018002'”
   解决方案:在“Z.period” 前边加“and” where Z.isDel=0 and Z.name='happ043' Z.period='2018002'

    1.2 在做会员管理的会员信息的查询时【2011-11-14】 

        bug描述:org.apache.commons.beanutils.ConversionException: No value specified for 'Date'
          org.apache.commons.beanutils.ConversionException: DateConverter does not support default String to 'Date' conversion.
        原因:在jsp页面上的数据类型时String,而在实体中定义的是Date,所以在提交时往bean中填充值时出错
        解决法案:将该字段的name属性的值改为不和bean中一样的,在提交时就不会自动填充值,然后在后台自动取值就可以 


     1.3 在做会员管理会员信息的编辑【2011-11-15】 

      bug描述:java.text.ParseException: Unparseable date: "" 
      原因:在后台action中索取到的日期字段的值为空
      解决方案:加上不为空的验证即可 


     1.4 在做会员管理会员信息的编辑【2011-11-15】 

      bug描述:java.text.ParseException: Unparseable date: "2011-11-03"
      原因:在后台action中索取到的日期字段的值为 2011-11-03 而SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");包含时分秒,格式不匹配
      解决方案:将取到的值加上时分秒,或者将格式中的时分秒去掉 


     1.5 在做会员管理会员信息的编辑【2011-11-15】 

      bug描述:request.setAttribute("error", "1");,但是在前台取怎么都取不到
      原因:未知      
      解决方案:将tomcat重启就可以取到了 


     1.6 在做会员管理会员信息的查看时【2011-11-15】 

      bug描述:org.apache.jasper.JasperException: File "/WEB-INF/tld/extremecomponents.tld" not found
      原因:在所对应的jsp页面引入tabglib时路径写错      
      解决方案:找到对应的页面将其改对就可 


     1.7 在做会员管理会员信息的查看时【2011-11-15】 

      bug描述: <tr align="center" class="title">
     <td align="right" bgcolor="#f7f7f7">
      性别:
     </td>
     <td align="left" bgcolor="#f7f7f7">
      <c:if test="${m.sex eq '0' }" >女</c:if>      
              <c:if test="${m.sex eq '1' }">男</c:if>        
     </td>
    </tr>
    在前台显示的是“女男”,其实应该显示“女”
      原因:在所对应的jsp页面未引入<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>标签     
      解决方案:找到对应的页面将<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>引入即可

 
     1.8 在做会员管理-消费记录的查询时【2011-11-16】

      bug描述: /**
     * <ul>
     * <li> <b>Ŀ��:</b> <br />
     * <p>
     * ά����TMemberOrderDTO��Action
     * </p>
     * </li>
     * <li><b>���õIJ�����</b></li>
     * <li><b>���в��ԣ�</b></li>
     * <li> <b>�޸���ʷ��</b><br />
     * <p>
     * ����:2011-11-08 16:17:54<br />
     * ����:CodeGenerator
     * </p>
     * </li>
     * <li><b>��֪���⣺</b></li>
     * </ul>
     */
     在action中出现了乱码,如上所示
      原因:action原来采用的是GBK编码,后来将其改为UTF-8,就出现了如上所示的乱码     
      解决方案:将文件改为GBK编码,变为正常的中文后,拷贝文件的内容,然后将文件的编码改为UTF-8,将文件的内容覆盖,即可;如果不行,将该文件先关闭然后重新打开即可
      
     1.9 在做会员管理-消费记录的分页时【2011-11-16】

 

       bug描述:javax.servlet.ServletException: org.apache.jasper.JasperException: javax.el.ELException: Error reading 'memberName' on type com.sinovatech.mall.member.model.dto.TMemberDTO_$$_javassist_47
        org.apache.jasper.JasperException: javax.el.ELException: Error reading 'memberName' on type com.sinovatech.mall.member.model.dto.TMemberDTO_$$_javassist_47
        javax.el.ELException: Error reading 'memberName' on type com.sinovatech.mall.member.model.dto.TMemberDTO_$$_javassist_47
        org.hibernate.LazyInitializationException: could not initialize proxy - no Session
        报如上异常,还是支出在jsp页面的   <td>${mem.tbTMemberDTO.memberName}</td>这一行报错,将其改为 <td>${mem.tbTMemberDTO.id}</td>后不报错
      原因:从网上查org.hibernate.LazyInitializationException: could not initialize proxy - no Session这个异常是原因是hibernate的session已经关闭,集合没有被初始化。
        在hibernate中:hibernate3 默认支持延迟加载(lazy="proxy"我们可以把proxy看作是true
      解决方案:将映射文件中<many-to-one> 中设置 lazy="false"
      
     2.0 在做会员管理-消费记录的查询时【2011-11-16】

       bug描述: could not resolve property: servicename of: com.sinovatech.mall.member.model.dto.TMemberOrderDTO        
      原因: 异常的意思是不能解析“servicename”属性,就是在实体com.sinovatech.mall.member.model.dto.TMemberOrderDTO 里找不到对应的属性
      解决方案:看看实体TMemberOrderDTO中的值是怎么拼写的,估计是servicename拼写错误,将其改正即可
      
     2.1 修改杂志管理-杂志信息-下载的bug时【2011-11-21】

       bug描述:点击文件下载链接进行下载,采用ajax提交方法,显示alert弹出框,框中有“pk U”的字样,并且不能弹出下载框  
      原因: ajax不能完成文件下载,只能完成请求提交并获取返回信息,不能处理下载文件的response
      解决方案:改为  var url = "${ctx}/magazineshow/downLoadFile.do?fileName="+name+"&file="+value; 
  window.location.href=url;提交方法
  
     2.2 修改杂志管理-杂志信息-下载的bug时【2011-11-21】【可以看看自己的javaeye博客中《JAVA中文字符编码问题详解》这篇文章】

       bug描述:在jsp页面采用get方式提交中文中,用struts1在后台取值时出现乱码 "/upload/magfile/1321593057562/杂志女友.zip" 
      原因:在采用get方式进行提交时需用encodeURI 方法进行两次编码如:name=encodeURI(encodeURI(name)),
        并且在后台进行解码:file = java.net.URLDecoder.decode(file,"UTF-8");
        如果不进行解码 则会出现如下结果:/upload/magfile/1321593057562/%E6%9D%82%E5%BF%97%E5%A5%B3%E5%8F%8B.zip       
      解决方案:改为  var url = "${ctx}/magazineshow/downLoadFile.do?fileName="+name+"&file="+value; 
    window.location.href=url;提交方法


     2.3 发布magazine时【2011-11-23】 

      bug描述:Caused by:
    org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Communications link failure
    The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.)
      
      原因: mysql 服务器所在的机器开着防火墙或者没给开放访问权限
      解决方案: 请客户给开放
 
     2.3 发布magazine时【2011-11-23】 

 

      bug描述:mysql SQL Error: 1146, SQLState: 42S02 (linux)
      2011-11-24 17:06:20,367 ERROR [org.hibernate.util.JDBCExceptionReporter] - Table 'magazine.BMS_DOMAIN' doesn't exist
      Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'magazine.BMS_DOMAIN' doesn't exist
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
        at com.mysql.jdbc.Util.getInstance(Util.java:384)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1054)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3566)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3498)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2113)
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2568)
        at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2113)
        at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2275)
        at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:92)
        at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)
        at org.hibernate.loader.Loader.getResultSet(Loader.java:1787)
        at org.hibernate.loader.Loader.doQuery(Loader.java:674)
        at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
        at org.hibernate.loader.Loader.doList(Loader.java:2220)
        ... 48 more
      
      
      原因:项目在开发的时候在WINDOWS平台下开发的,开发完了之后在LINUX环境上部署好之后,运行时MySQL数据库报错,提示为某个表不存在之类的错误信息,后来修改了MySQL的配置文件将大小写敏感去掉,问题解决。
   这个问题的根源在于,在 MySQL 中,数据库和表其实就是数据目录下的目录和文件,因而,操作系统的敏感性决定数据库和表命名的大小写敏感。这就意味着数据库和表名在 Windows 中是大小写不敏感的,而在大多数类型的 Unix/Linux 系统中是大小写敏感的。
   MySQL大小写敏感可以通过配置文件的lower_case_table_names参数来控制。
        
      解决方案:WINDOWS:
   编辑MySQL安装目录下的my.ini 文件,在[mysqld]节下 添加 lower_case_table_names=0 (备注:为0时大小写敏感,为1时大小写不敏感,默认为1),可以实现MySql按照建表Sql语句的大小写状态来定义表名。
   LINUX:
   编辑/etc/my.cnf文件,在[mysqld]节下 添加 lower_case_table_names=1 参数,并设置相应的值 (备注:为0时大小写敏感,为1时大小写不敏感,默认为0)。
  
  注意:看是否有修改/etc/my.cnf的权限,如果不能修改,请客户开放修改配置文件的权限
 
  2.4  测试magazine时【2012-1-10】  

   bug描述:
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
   at com.sinovatech.web.filter.BmsIntegrationFilter.doFilter(BmsIntegrationFilter.java:69)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
   at com.sinovatech.common.web.filter.EncodeFilter.doFilter(EncodeFilter.java:59)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
   at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
   at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
   at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
   at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
   at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
   at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
   at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
   at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
   at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
   at java.lang.Thread.run(Unknown Source)
      原因:
      解决方案:
      注意:


  2.5  第三轮测试magazine时【2012-1-10】  


   bug描述:Caused by: java.lang.NoSuchFieldError: deferredExpression
    
      原因:
      解决方案:
      注意:
 

猜你喜欢

转载自helloworlda.iteye.com/blog/1632821