工作中遇到的问题总结---不断更新

1. 启动tomcat报找不到com.ibm.db2.jcc.db2driver.
答案:将db2jcc.jar,db2jcc_license_cu.jar放入tomcat的lib下。将was.xml放到C:\apache-tomcat-6.0.20\conf\Catalina\localhost下。
2.启动tomcat 报严重: IOException while loading persisted sessions: java.io.EOFException
java.io.EOFException
 at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2228)
 
 Tomcat在启动时出现如下异常问题:

严重: IOException while loading persisted sessions: java.io.EOFException
严重: Exception loading sessions from persistent storage

是因为保存在硬盘上的session数据读取失败,问题似乎不大,但是如果不处理一下,每次启动都会出现这个问题,处理方法如下:

将work下面的文件清空,主要是*.ser文件,或者只是删除掉session.ser亦可。
3.  增加annotation后,发现hibernate停在那了,调高debug级别。发现在等待空闲的链接,在was.txt增加
maxActive="20"   
maxIdle="10"  

解决。
4。 Tomcat 启动时:An exception or error occurred in the container during the request processing
java.lang.OutOfMemoryError: PermGen space
解决:
修改Tomcat\bin\catalina.bat文件。
找到set JAVA_OPTS=%JAVA_OPTS% -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file="%CATALINA_BASE%\conf\logging.properties"这句话。在前面加上rem注释掉。
在它下面加入:
set JAVA_OPTS=-server -Xms1<u>024m -Xmx1</u>024m -Xss512k -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true
重新启动Tomcat,正常启动了

Exception in thread "ContainerBackgroundProcessor[StandardEngine[Catalina]]" java.lang.OutOfMemoryError: PermGen space
set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=128M -XX:MaxPermSize=512m

Tomcat直接启动正常,通过myeclipse启动tomcat内存溢出.
MyEclipse启动Tomcat无视catalina.bat中设置内存大小的问题。
解决:
在 tomcat的catalina.bat中设置set JAVA_OPTS=-Xms128m -Xmx256m,直接使用startup.bat启动tomcat没有问题。
但是在myeclipse中配置tomcat后,通过myeclipse启动就出现内存溢出,之前在catalina.bat中设置的内存似乎没有作用。

           则需要做如下设置即可解决:

           MyEclipse --> Window --> Preference... --> MyEclipse --> Application Servers -->

           Tomcat --> Tomcat 6.X --> JDK --> Optional Java VM arguments :进行设置

           设置的内容:-Xms256m -Xmx512m
                       -Dcom.sun.management.jmxremote=true


-Xms1024m -Xmx1048m  -Dcom.sun.management.jmxremote=true
实际上我的是如下:
-Xms1024m -Xmx1048m -XX:PermSize=100M   -XX:MaxNewSize=256m   -XX:MaxPermSize=256m  -Dcom.sun.management.jmxremote=true


5.如果db2改了表结构后出现不能解决的问题。重启db2控制中心,在控制面板service中重启db2服务即可。
run_>db2cmd 然后db2 ? SQLSTATE号(23505) 看程序中报的db2错误意思.
6。如果出现问题,看日志,控制台打印出来,有很多是因为数据库字段设置问题,trim()一下。
7.db2 数据库创建。安装db2时,选择让db2创建一个用户,第二项,用户名是workbench,密码。。。。在was.xml文件中,必须使用此用户名才行,
username="workbench",而不能使用其他具有db2admin权限的用户。否则会报"com.sun.jdi.InvocationException occurred invoking method."
异常.

8.修改myeclipse部署在tomcat中的位置:
修改项目下的.mymetadata文件, context-root="/部署在tomcat中的目录"

9.WCS 修改spring_customization.xml里的数据库设置
10。项目启动tomcat   报错:
严重: Servlet.service() for servlet jsp threw exception    

org.apache.jasper.JasperException: /index.jsp(2,0) Unable to read TLD "META-INF/c.tld" from JAR file "file:/D:/**/WEB-INF/lib/standard-1.1.2.jar":

解决:删掉project-name/WEB-INF/lib下jsp-api.jar

11.在我们写javascript的时候经肯定会经常用到 document.getElementById() 这个方法,这么长一串很容易写错,而且其中getElementById又有大小写之分。
 其实prototype.js里提倡的一个方法就是使用$()简写,通过以下的函数,你可以用$('id')来实现document.getElementById('id') 这个功能,怎么样,很爽吧!


12.struts2 迭代二维list。
<s:if test="3-inputLayout[#key][#status.index].size()>0">
               <s:bean name="org.apache.struts2.util.Counter" id="counter">  
               <s:param name="first" value="1" />  
               <s:param name="last" value="(3-inputLayout[#key][#status.index].size())*2" />  
               <s:iterator>  
               <td width="16%" class="tableTitle1"></td>
              </s:iterator>  
           </s:bean>  
              
              
             
            </s:if>
            

13.
在java.lang包中有String.split()方法,返回是一个数组
我在应用中用到一些,给大家总结一下,仅供大家参考:
1、如果用“.”作为分隔的话,必须是如下写法:String.split("\\."),这样才能正确的分隔开,不能用String.split(".");
2、如果用“|”作为分隔的话,必须是如下写法:String.split("\\|"),这样才能正确的分隔开,不能用String.split("|");
“.”和“|”都是转义字符,必须得加"\\";
3、如果在一个字符串中有多个分隔符,可以用“|”作为连字符,比如:“acount=? and uu =? or n=?”,把三个都分隔出来,可以用String.split("and|or");
使用String.split方法分隔字符串时,分隔符如果用到一些特殊字符,可能会得不到我们预期的结果。
我们看jdk doc中说明

 

public String[] split(String regex)  Splits this string around matches of the given regular expression.  参数regex是一个 regular-expression的匹配模式而不是一个简单的String,他对一些特殊的字符可能会出现你预想不到的结果,比如测试下面的代码:

用竖线 | 分隔字符串,你将得不到预期的结果

    String[] aa = "aaa|bbb|ccc".split("|");
    //String[] aa = "aaa|bbb|ccc".split("\\|"); 这样才能得到正确的结果

    for (int i = 0 ; i <aa.length ; i++ ) {
      System.out.println("--"+aa[i]);
    }

用竖 * 分隔字符串运行将抛出java.util.regex.PatternSyntaxException异常,用加号 + 也是如此。

    String[] aa = "aaa*bbb*ccc".split("*");
    //String[] aa = "aaa|bbb|ccc".split("\\*"); 这样才能得到正确的结果   

    for (int i = 0 ; i <aa.length ; i++ ) {
      System.out.println("--"+aa[i]);
    }

显然,+ * 不是有效的模式匹配规则表达式,用"\\*" "\\+"转义后即可得到正确的结果。

"|" 分隔串时虽然能够执行,但是却不是预期的目的,"\\|"转义后即可得到正确的结果。

还有如果想在串中使用"\"字符,则也需要转义.首先要表达"aaaa\bbbb"这个串就应该用"aaaa\\bbbb",如果要分隔就应该这样才能得到正确结果:

String[] aa = "aaa\\bbb\\bccc".split("\\\\");

转自:http://hi.baidu.com/danghj/blog/item/7259c2b461bebc708bd4b21e.html

14.ext onReady 用 window.onload(a);解决。
或是在目标div 后使用 Ext.onload(a); function a () {  Ext.tabTanel = ...}

15.Hibernate 懒加载问题,不能load出属性为List 类型的对象列表,这是没有把数据库操作加到相应的事物中的结果。
没有放到事务的结果。
报invokeException.
解决:
在web.xml中,
<filter>
  <filter-name>hibernateFilter</filter-name>
  <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
  <!--
   set the singleSession to false, otherwise,
   the flush_mode will be set to NEVER(read-only),
   then we can not save or update or delete the entity
  <init-param>
   <param-name>singleSession</param-name>
   <param-value>true</param-value>
  </init-param>
  -->
 </filter>
 
 <filter-mapping>
  <filter-name>hibernateFilter</filter-name>
  <url-pattern>*.do</url-pattern>
 </filter-mapping>

 <filter-mapping>
  <filter-name>hibernateFilter</filter-name>
  <url-pattern>*.jsp</url-pattern>
 </filter-mapping>
 
 
 在applicationContext.xml中,
 <tx:advice id="txAdvice" transaction-manager="transactionManager">
     <tx:attributes >
      
      <!-- Web action -->
      <!-- Web Action can't be advised, spring aop(including annotation) conflicts with struts interception mechanisam -->
      <!-- Using struts transaction interceptor instead -->
      
      <!-- Service -->
      <tx:method name="trans*" propagation="REQUIRED" rollback-for="Throwable"/>
      <tx:method name="generate*" propagation="REQUIRED" rollback-for="Throwable"/>
      <tx:method name="get*" propagation="REQUIRED" rollback-for="Throwable"/>------- 加的
      
      <!-- DAO action -->
      <tx:method name="*Save*" propagation="REQUIRED" isolation="READ_COMMITTED" rollback-for="Throwable"/>
      <tx:method name="*Delete*" propagation="REQUIRED" isolation="READ_COMMITTED"  rollback-for="Throwable"/>
      <tx:method name="find*" propagation="REQUIRED" isolation="READ_COMMITTED"  rollback-for="Throwable"/>------- 加的
      
      <!-- default process for all method invoke, should be reconsidered with performance test result. -->
      <tx:method name="*" propagation="NOT_SUPPORTED" read-only="true" rollback-for="Throwable"/>
      
     </tx:attributes>
   </tx:advice>

16。报query出错,语法错误,很多时候是数据库表没有数据造成的,这是数据库表数据不正确问题。
解决:
 重新导入一个好用的库。
 17。tomcat 启动时,struts2报错。一种情况是tomcat安装目录中存在空格,这肯定报错。
 18.update 数据时出错。报
 异常信息查看 Could not execute JDBC batch update; nested exception is org.hibernate.exception.DataException: Could not execute JDBC batch update org.springframework.dao.DataIntegrityViolationException: Could not execute JDBC batch update; nested exception is org.hibernate.exception.DataException: Could not execute JDBC batch update
 解决:
 这是插入的字段类型和数据库字段不匹配导致的,每个字段输入符合数据库字段类型的正确的数值即可。
 
 19。页面传给后台时使用的是name字段,不是id。否则报找不到id错误。
 解决:
 <s:hidden name="appId" id="appId"></s:hidden>
 页面显示No Result Defined.一般是页面传递参数有问题,传递的值是空值
 解决:加%{}
 <s:hidden name="appMain.appMainId" value="%{appMain.appMainId}"></s:hidden>
     <s:hidden name="appId" value="%{appMain.appMainId}"></s:hidden>
     
 20.db2单独导出导入一个表连同其数据的方法    
 我们可以尝试一下这种方式备份数据。
1、连接数据库 DB2 CONNECT TO DB USER ** USING PASSWORD
2、使用命令。DB2 EXPORT TO ***.ixf OF ixf SELECT * FROM TAB1 这样就可以将一个表的数据全部备份,而且同时创建了TAB表结构。
3,使用命令。DB2 IMPORT FROM ***.IXF OF IXF CREATE INTO TAB2 这样就可以将数据连同表结构导入数据。

这种方法很方便,数据及结构一次性全部搞定。但是缺点就是只能针对一个表的操作。若要对整个数据库做操作,我们可以编写一个批量脚本的BAt文件,可以直接运行。这样的备份时很方便的。

21。CodeTable 业务数据作为主键,设计错误。
解决:
表的主键是不允许被更改的,这是数据库设计的基本原则。

22.struts2配置文件加载顺序。
默认只加载类路径下的struts.xml等三类文件。
我的:
D:\workspace-was\WAS_V10_SRC\src\main\resources\struts.xml
<struts>
 <include file="/was/struts.xml"/>
 <include file="/advanced/struts.xml"/>
 <include file="/basic/struts.xml"/>
</struts>
后面覆盖前面的。

23.导入一个id为自增类型IXF文件
一般会拒绝读入.
解决:
IMPORT FROM 'C:\Documents and Settings\cn02557\Desktop\temp\bs_role_mod_entry.ixf' OF IXF
modified by identityignore
  COMMITCOUNT AUTOMATIC
  INSERT INTO "WORKBENCH"."BS_MOD_ROLE_ENTRY";

#SYNC 10;

24.代码表修改后需要重启Server才起效,否则还是先前的结果。
25.国际化文件不起作用。
解决:
首先,查看struts-base.xml中,value中是否已经包含了国际化文件的baseName.
<constant name="struts.custom.i18n.resources" value="/basic/string,/advanced/string,/was/string, workbench_string"></constant>

26.调试struts页面用的JS:
解决:
 <script type="text/javascript">
   var  stepsAll = [
       <s:iterator value="relations" id="relation">
       <s:text name="#relation.entity" />
       <s:text name="#parameters.action" />
       <s:text name="#parameters.id"/>
       <s:text name="@com.atosorigin.workbench.core.util.Utils@toLowerCase(#relation.entity)" />
       <s:text name="Entity.%{#relation.entity}" />
       </s:iterator> 
    ];
  
  
  </SCRIPT>
  
  27.报Struts has detected an unhandled exception,java.io.IOException: Stream closed
  发现是因为里面的属性没有初始化造成的。参考了如下:
  
http://hi.baidu.com/jxcfree/blog/item/31873d5396c05d6e853524b6.html
  Struts has detected an unhandled exception2010-04-29 23:15今天写了一个小时的程序,结果调试就用了四个多小时。。。

调试时,总会有“Struts has detected an unhandled exception”报错,实在找不了问题,最后没办法了把以前一个相近的程序拿来对比,才发现忘了把model初始化了,因为用了ModelDriven<T>接口,唉,又是四个小时。。。
 


  解决:
  private List<ParamHelper> included -》private List<ParamHelper> included = new ArrayList<ParamHelper>();
  private List<ParamHelper> excluded -》private List<ParamHelper> excluded = new ArrayList<ParamHelper>();
  所以要养成正确编码的习惯,否则可能报很多莫名错误。
  
  28。在测试页面时每个页面尾部</body>上面加上jxw.jsp的路径,方便调试,和最后的清除。
  如</table>
  jxw.position/view.jsp
 </body>
 
 29.hibernate的Could not execute JDBC batch update错误原因及处理
 这个是由于没有将方法放入事务中的结果。
 解决:
 1。首先applicationContext-datasource.xml中设置hibernate.jdbc.batch_size =0,这样可以报出隐藏在batch update的真正错误原因。
 2。applicationContext.xml中将方法加入事务。如下:
 <tx:method name="modify*" propagation="REQUIRED" isolation="READ_COMMITTED" rollback-for="Throwable"/>
 3如果上两步还没解决,看下数据库字段设置。如果复合主键的每个主键设置成character(10),则页面上必须输入10位,否则hibernate会认为这是一条新的数据,
 将会执行insert操作,而不是update。因为系统的某个地方对空格进行了trim,如果页面上没有输满10位,数据库中的数据是带空格的,但是系统里不带空格,
 则从数据库中取不到相应的数据。所以页面上也显示不出来数据。----------这个我本来该注意到的。。将字段设置成varchar(10),则没有问题了。但是会带来性能问题。
 varchar性能低于character。
 
 最简单情况:
 
关键字: hibernate could not execute jdbc batch update
碰到这个错误Could not execute JDBC batch update

原因:数据库表中设置了关联关系,但是在插入数据的时候没有设置关联关系,插入的时候就是错误的。

改正:设置对表之间的关联关系就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值