posts - 66,comments - 41,trackbacks - 0
 0、 需要标识符
a) 不在函数内

1、 非法表达式开始
b) 可能:丢失括号 .

2. no data found
a) 可能:setInt(1,100)中,没有100这个值

3. 找不到符号
a) 可能:没导入包

4. 指定了无效URL
a) 可能:数据库名或IP错误,即连接出错

5. 类路径没有找到
a) 可能: ClassNotFoundException: oracle.jdbc.driver.OracleDriver
b) 原因: 一般是指包名写错,或者没有import包,或者没有在类路径中找到jar文件
c) 解决: 没有加载Oracle驱动jar,在.bash_profile中把ojdbc14.jar加进来

6. 空指针异常
a) 可能: 数据源错误 比如数据库名或IP错误

7. 不能执行查询
a) 可能: 数据库中表的问题,比如列名不存在

8. invalid identity
a) 可能: 列名出错

9. 若在数据库中创建了 两个sequence ,运行时出现异常可能是先后执行了多次select语句,导致与原有的序列号产生冲突

10. 表名或列名不存在
a) 可能:表不存在或者没有插入数据到表中

11. 不支持的类,类的版本错误
a) 可能:没有导入jdk5.0,或者编译器仍为1.4

12. MappingNotFoundException
a) Maybe: In the Eclipse Not refersh , or not exist in the dirctory

13. HibernateException: /hibernate.cfg.xml not found
a) Maybe1: hibernate.cfg.xml not in the root directory
b) Maybe2: Could not parse configuration .
c) resolve: database not connect or use another database

14. ConstraintViolationException
a) Maybe: used a not true database

15. 驱动没有找到 或者 JDBC Driver not found
可能:连接数据库的驱动jar包不存在或者版本不一致,比如将旧的版本换成新的会造成该类错误
16. 空指针异常 , java.lang.NullPointerException
a) 可能1:数据库连接出错,比如在hibernate.cfg.xml中的数据错误会导致异常。

17. 数据插入异常 ,GenericJDBCException: could not insert
a) 可能1:没有建立表或者表中没有任何数据
b) 可能2:插入数据后没有执行提交语句:commit

18. LazyInitializationException 或者延迟加载异常
a) 可能1:没有在查询语句中加fetch

19. IdentifierGenerationException
a) 可能1:高位表没有初始化(比如hi_value中没有记录)

20. could not initialize a collection: [hibernate.entity.Role.modules#32768] Syntax error: Encountered "-" at line 1, column 132.
a) 错误原因:<set name="modules" table="module-role" lazy="false">红色字部分中“-”为非法字符,替换为module_role

21. could not insert collection rows: [hibernate.entity.Module.roles#1]
在Module.hbm.xml文件的如下配置中加入inverse=”true”
<set name="roles" table="module_role" inverse="true">

22.在部署Struts时,出现如下错误信息:
HTTP Status 404 - Servlet action is not available

type Status report
message Servlet action is not available
description The requested resource (Servlet action is not available) is not available.
问题原因:
1.、web.xml文件中未配置ActionServlet。
2、struts-config.xml文件未配置你要访问的Action。
3、你的jsp文件form标记中action属性的路径名称错误。
4、非以上三种情况。
针对以上4种情况相应的解决方案如下:
1、在web.xml文件中加上ActionServlet的配置信息
?????? /WEB-INF/struts-config.xml?
?2、在struts-config.xml文件检查你要访问的Action配置文件。
3、检查jsp文件form标记中action属性的路径名称是否与struts-config.xml文件中action标记的path属性的路径名称一致。
4、非以上情况的解决办法就是检查web容器的log日志,如果时tomcat则检查下logs目录下的localhost_log文件,看里边是否记录有错误信息,然后根据错误信息提示将其纠正。

23.java.lang.NoClassDefFoundError: org/apache/commons/beanutils/Converter
缺少spring-framework-2.0.3\lib\jakarta-commons\commons-beanutils.jar

24.
ava 代码Caused by: java.lang.NoClassDefFoundError: org/objectweb/asm/Type
缺少spring-framework-2.0.3\lib\asm\asm-2.2.2.jar包,版本不同,该包的名字有相应的区别

java 代码Caused by: java.lang.NoClassDefFoundError: org/dom4j/DocumentException
缺少spring-framework-2.0.3\lib\dom4j\dom4j-1.6.1.jar包,版本不同,该包的名字有相应的区别
把这个包进去就可以了:\Spring206\lib\dom4j、dom4j-1.6.1.jar

java 代码Caused by: java.lang.NoClassDefFoundError: org/apache/commons/collections/SequencedHashMap
缺少spring-framework-2.0.3\lib\jakarta-commons\commons-collections.jar包,版本不同,该包的名字有相应的区别

java 代码Caused by: java.lang.NoClassDefFoundError: net/sf/cglib/proxy/CallbackFilter
缺少spring-framework-2.0.3\lib\cglib\cglib-nodep-2.1_3.jar包,版本不同,该包的名字有相应的区别

java 代码Caused by: java.lang.NoClassDefFoundError: org/objectweb/asm/CodeVisitor
缺少hibernate-3.2\lib\asm.jar包,版本不同,该包的名字有相应的区别

java 代码
org.hibernate.exception.SQLGrammarException: could not load an entity: [www.proudsoul.xml.User#1]
JAVA工程与WEB工程包的区别:一个是asm.jar,一个是jta.jar

java 代码Caused by: java.lang.NoClassDefFoundError: javax/transaction/TransactionManager
缺少spring-framework-2.0.3\lib\j2ee\jta.jar包,版本不同,该包的名字有相应的区别此种错误请检查相应的***.hbm.xml配置文件的配置

25,
Exception in thread "main" org.springframework.dao.InvalidDataAccessResourceUsageException: could not get next sequence value; nested exception is org.hibernate.exception.SQLGrammarException: could not get next sequence value
Caused by: org.hibernate.exception.SQLGrammarException: could not get next sequence value
原因:没有加Sequence或者数据库的方言写错了

26,
我的配置文件
<id name="id" column="id">
<generator class="native" />
</id>
然后我运行保存一条数据进去
The database returned no natively generated identity value
就会报这个错误
因为你native是根据看底层数据库的能力选择identity, sequence 或者hilo中的一个
而我建表的时候id没有指定
alter table `student` change `id` `id` int auto_increment
我们把我们的表的结构小小的改动一下就没问题了

27,
UpdateManager无法启动2007-08-09 15:21如果在应用程序安装过程中,暴力中断安装程序,会出现如下状况:1.apt-get remove 和dpkg --remove 无法删除软件 2.UpdateManager无法启动3.新立得软件包管理程序无法启动
以上可能是deb损坏之类造成的
sudo dpkg -r sqldveloper
正在读取软件包列表... 完成
正在分析软件包的依赖关系树... 完成
E: 软件包 sqldeveloper 需要重新安装,但是我无法找到相应的安装文件。
解决方法:1.从 /var/lib/dpkg/status 中把对应的段删掉
重要:修改之前请先备份
在status中找到你对应的包删除就OK了...

28,
Exception in thread "main" java.lang.NoClassDefFoundError: antlr/ANTLRException
少了antlr-2.7.5H3.jar包,从D:\eclipse\eclipse\plugins\com.genuitec.org.hibernate.eclipse_4.1.1\myeclipse-data\3.0\lib

29,
Caused by:
java.lang.NoClassDefFoundError: javax/transaction/Synchronization
缺少Spring206\lib\j2ee\jta.jar

30,
Caused by:
java.lang.IllegalArgumentException: Cannot convert value of type [$Proxy3] to required type [business.impl.PriceBiz] for property 'priceBiz': no matching editors or conversion strategy found
java类中设置priceBiz时应该设置的是接口PriceBizIf,而非实现类

31, 数组越界
可能1: 在命令行后面需要加入参数.
可能2:加入的参数错误
32, car is not mapped
可能1: 在cfg.xml中没有增加映射的hbm.xml文件在<mapping.../>中

33, 属性没有找到
可能1: hbm.xml文件中的 <property name =""> 有问题, 也许是name的值与对应类中的成员名不一致

34,SQLException: 无当前连接 可能1:在比如创建帐户时没有对相应的方法添加到<list>中去,比如这个没有加入:<value>newAccount</value>

<bean id="transactionAdvisor" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">   
   
<property name="advice">   
    
<ref bean="advice"/>   
   
</property>   
   
<property name="mappedNames">   
    
<list>   
     
<value>transfer</value>   
    
</list>   
</bean>  

35,SQLException: Syntax error: Encountered "table" at line 1, column 8.
可能1;执行SQL时出现冲突,可能是SQL语句中使用了关键字作为变量来用,比如
update order set balance=1000000;
其中order被用作表名来使用,这是错误的,因为order是个关键字,用在order by中

36, Servlet /Spring-WebMvc threw load() exception
org.xml.sax.SAXParseException: Document root element "beans", must match DOCTYPE root "null".
jar包的冲突,spring-1.2.6.jar和spring.jar出现在一个war的目录中:JBoss/server/all/deploy/Spring-WebMvc.war/WEB-INF/lib

37, java.sql.SQLException: 当事务仍处于活动状态时,无法关闭连接。


38 ,
validateJarFile(/home/soft01/Tomcat/webapps/sms-token-struts/WEB-INF/lib/servlet-api.jar)
Servlet /sms-struts-tiles threw load() exception
java.lang.ClassNotFoundException: org.apache.struts.action.ActionServlet
原因:在WEB-INF/lib/ 目录下有servlet-api.jar与/Tomcat/common/lib目录下的servlet-api.jar冲突了,把WEB-INF/lib/下的servlet-api.jar删除就可以了

39,java.lang.ClassNotFoundException: org.springframework.web.struts.ContextLoaderPlugIn
Marking servlet action as unavailable
10:30:47,088 ERROR [/NetCT_OSS]:3953 - Servlet /NetCT_OSS threw load() exception
javax.servlet.UnavailableException

40,org.xml.sax.SAXParseException: Document root element "beans", must match DOCTYPE root "null".
缺少MyEclipse/eclipse/plugins/com.genuitec.eclipse.springframework_5.5.0/data/2.0/dist/modules/spring-struts.jar

41,Caused by: java.sql.BatchUpdateException: ORA-02291: integrity constraint (SD0702.FK82D343CF49A4B831) violated - parent key not found
Caused by: org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
有可能是ID生成策略的问题,我将它XML映射文件改成<generator class="increment" />就好了

42,
2007-08-19 16:21:43,290 ERROR [org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/OSS].[action]] - Servlet.service() for servlet action threw exception
org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [entity.Module#2]
java.util.ConcurrentModificationException
原因:已经有对象拥有了所选择的module,用clear(),而不是remove();

43,
ERROR [org.apache.catalina.session.ManagerBase] - IOException while loading persisted sessions: java.io.InvalidClassException: entity.Module; local class incompatible: stream classdesc serialVersionUID = -5988350031935445758, local class serialVersionUID = -297934247726484429
java.io.InvalidClassException: entity.Module; local class incompatible: stream classdesc serialVersionUID = -5988350031935445758, local class serialVersionUID = -297934247726484429
在Module中加上一个关键字:transient

44,
Caused by: java.sql.BatchUpdateException: ORA-02292: integrity constraint (SD0702.SYS_C00132664) violated - child record found
原因:有其他的表引用了该表的外建,所以报这个异常,如果没有引用就不会出现

45,
出现数组越界的时候,看看是不是循环时没有加=,比如:
for(int i = 1; i<arr.length;i++)可以改成
for(int i = 1; i<=arr.length;i++)


46.如果使用Ant和Junit是被报找不到test,检查一下是否误用了private
出错信息:
<failure message="No tests found in test.AllTest" type="junit.framework.AssertionFailedError">junit.framework.AssertionFailedError: No tests found in test.AllTest
该错误有个很特别的特点,当你不通过ant来运行测试,而是通过AllTest类来运行的话,可以正常运行。小心哦

47.如果遇到报:表名无效,且jvm报严重错误,看看是不是用了数据库的保留关键字来做表名了,如User。

48.使用ant时必须小心ant的classpath它用的不是IDE的classpath,小心!

49.小心下边的异常,
exception setting property value with CGLIB (set hibernate.cglib.use_reflection_optimizer=false for more info) setter of xp.bean.Users.?" type="net.sf.hibernate.PropertyAccessException">java.lang.ClassCastException at xp.bean.UsersMetaClass1.setPropertyValues(<generated>) at net.sf.hibernate.persister.AbstractEntityPersister.setPropertyValues
上次出现该错错误的原因是:
源文件里我的class类型为一个类Contact contact
而跑到mapping里却成了Set,呵呵厉害。

50.突然间冒出大量的NullPointException
重新build一下。

51.="Flush during cascade is dangerous - this might occur if an object was deleted and then re-saved by cascade"

52.Tapestry的出错信息:
Class com.bookshop.Hello does not implement the IPage interface.
location: context:/WEB-INF/Home.page, line 6
原因:与显示有关的哪个java类没有从IPage家族继承。

53.使用ant时给出的路径好象不允许出现空格。

54.由于使用ant时用junit做测试的话,classpath中出现j2ee.jar的话,问题多多。例如xml格式的log文件生成不了,莫名其妙的NullPointException等。所以我设置了两个包个包含j2ee.jar,为编译用;一个没有,为junit用

55.进行单元测试时,在查询返回后应马上assertNotNull(),这样可以更快速的定位NullPointException

56.要使用ResourceBundle的话,要千万小心。必须用日志记录下它的状态。还有该属性文件应该放在classes下面。

57.当要显示任何页面时,都被提示无效,那么应该检查一下lib目录了,还有一些很奇怪的异常,例如你明明可以找到一个类但是服务器却提示ClassNotDefException,那么估计是缺少了该类所必须的包了。或者多了不兼容的包,如, xdoclet系列包不被struts的lib目录所兼容

58.编写clone时从Java编程思想(2nd)上学到的(732):
.引数传递过程中会自动产生别名(alias)。
.没有局域对象(local objects),只有局域性的(local)references。
.reference受范围(scope)的限制,对象则否。
.对象的寿命从来不是Java的讨论议题(因为有垃圾回收机制)

59.try catch finally的域居然是分离的。

60.jsp乱码的其中一个原因:charset="gb2312" 等号"="的两边不允许有空格。

61.我的基于Displaytag的简单报表解决方案。
http://displaytag.sourceforge.net/
下载displaytag.jar和displaytag.tld
displaytag.jar放在lib目录,而displaytag.tld放在WEB-INF目录,在web.xml中为displaytag.tld声明一下。
<taglib>
<taglib-uri>http://displaytag.org</taglib-uri>
<taglib-location>/WEB-INF/displaytag.tld</taglib-location>
</taglib>
在jsp里使用前,加上
<%@ taglib uri="http://displaytag.org" prefix="display" %>

注意该软件有个bug,他要用的一个包common-lang.jar版本必须在2.0以上。
如果碰到下面异常,则应坚持一下是否该包的版本问题。
java.lang.NoSuchMethodError: org.apache.commons.lang.StringUtils.capitalize(Ljava/lang/String;)Ljava/lang/String;
然后就可放心使用了
<display:column property = "xxx"/>其中xxx为对象中的带有getter的变量>。
定义表格的样子,用css定义。如
TABLE.its THEAD TR {
BACKGROUND-COLOR: #69c
}
TABLE.its TR.even {
BACKGROUND-COLOR: #def
}
在使用分页时,可能会出现这种情况,点击其他页时,弹出下载窗口,让你下载当前jsp页面,这是因为你在当前页面读取了数据的缘故。解决办法为在action里读取数据而不是在jsp里。可以参考
http://www.displaytag.org/example-paging.jsp?d-26189-p=2

62.使用displaytag时,在一列中放入多个元素
必须在display:table中定义一个id
<display:table name = "allBooks" class = "its" pagesize = "5" id = "item">
<display:column title = "操作">
<a href = "/Bookshop/admin/bookManagement.do?action=view&id=<%=((Book)item).getId()%>" target = "_blank" >查看</a>
<a href = "/Bookshop/admin/bookManagement.do?action=edit&id=<%=((Book)item).getId()%>">编辑</a>
<a href = "/Bookshop/admin/bookManagement.do?action=delete&id=<%=((Book)item).getId()%>">删除</a>
</display:column>
要在displaytag中使用链接,必须具备paramId,否则不显示为链接
<display:column property = "product.name" href = "viewDetailV2.0.jsp" title = "书名" paramId="item" paramProperty="product.id"/>
可以这样使用display
<display:column property = "product.id" title = "ID"/>
其中product为对象

63.<bean:write name = "xxxx" property = "xxx"/> 可以直接取到session.getAttribute()取到的东西。

64.实验struts-upload例子时要注意的地方:
1.If you would rather write this file to another file, please check here:
这一行要打钩
2.If you checked the box to write to a file, please specify the file path here:
在这里要重命名如:c:\b.jpg
上传成功的话,会出现提示 The file has been written to "c:\b.jpg"

65.Hibernate的like可以这么用:
Query query = session.createQuery("from src.persistent.Book as book where upper(book.name) like :name ");
query.setString("name", "%");
result = query.list();

66.Hibernate出现 duplicate import : className
异常也可能是因为忘了为持久类在configuration中addClass了

67.<logic:iterate id = "author" name = "authors">
name所引用的是session里的attribute。

68.如果发现要出现询问下载的情况,有可能是因为要跳转的页面出现了问题。试试在要跳转到的页删掉
<%@ page contentType="text/html; charset=gb2312"%>

69.如果JSP页面跳转时出现下边的错误信息:
The request sent by the client was syntactically incorrect (Invalid path /web/shoppingCart was requested).
原因是struts-config的action = "x" 写成了 action = "x.do"

70.在struts中,strut-config.xml中,forward时使用redirect = "true"可以将.do重定向为.jsp

71.以后在判断相等性之前先用logger把两个值显示出来。

72.从session里getAttribute后,修改并不需要重新setAttribute一次。

73.在hibernate中使用subclass是一棵继承树共用一个表,仅生成个mapping。
每个类中必须有discrimator-value。在最上层的类中必须声明:
@hibernate.discriminator column = "class"。
不可以将子类添加到configuration里去。(即不可addClass(子类))
使用Xdoclet的建立subclass的例子(该类是父类)
/**
* @hibernate.class discriminator-value = "customer"
* @hibernate.discriminator column = "class"
*/

而使用joined-subclass则是一类一表,也不许将子类添加进configuration里去。
/**
* @hibernate.joined-subclass
* @hibernate.joined-subclass-key
* column="customer_id"
*/
如果发现生成的mapping文件中joined-subclass的key column为空,那么可能是@hibernate.joined-subclass-key这句没有写对。
用joined-subclass生成的表,仔细看。Member extends Customer
create table Customer (
id VARCHAR2(255) not null,
name VARCHAR2(255),
description VARCHAR2(255),
primary key (id)
)
create table Member (
customer_id VARCHAR2(255) not null,
password VARCHAR2(255),
primary key (customer_id)
)

74.在junit中尽量使用assertEquals代替assertTrue;

75.Hibernate
如果Child extends Parent
那么from Parent as parent 也将会将Child选出来,而from Child as child 则不会选出Parent

76.Hibernate
使用hibernate的one-to-one时,应该两方向都set,否则会报save NullPointException
parent.setChild(child);
child.setParent(parent);

77.Hibernate
遇到下边的异常,估计是与因为外键出现了问题:

java.lang.NullPointerException
at net.sf.hibernate.persister.AbstractEntityPersister.getPropertyValue(AbstractEntityPersister.java:675)
at net.sf.hibernate.id.ForeignGenerator.generate(ForeignGenerator.java:33)
如:
* @hibernate.id generator-class = "foreign"
* @hibernate.generator-param name = "property" value = "customer"
* @hibernate.one-to-one name = "custmoer" class = "src.persistent.Customer"
value的值和one-to-one 中name的值不符,则会出现上边的异常。如果不显示指定name则默认取成员变量名

Customer a
则name = "a" 需要小心的是不是类名。所以,以后最好显示指定名字为好。

78.出现异常:
Exceptionobject references an unsaved transient instance - save the transient instance before flushing: src.persistent.Product
原因没有为某对象进行set设置, 如上边的这个就是某对象没有调用setProduct

79.
"xxx action = "/a" 不用.do和根目录名
<a href = "b.do" 需要.do和根目录名

80.
Caused by: java.sql.SQLException: ORA-02291: 违反完整约束条件 (BOOKSHOP.FK4AAEE
47687CCA6B) - 未找到父项关键字
如果你觉得该做的e是出现这个问题,那么检查一下,是否将类的继承关系在hibernate的mapping中反映了出来。joined-subclass或subclass
例如a extends b
如果持久类c 需要Set的是持久类a,那么你把b传入,而b又没有在mapping中将父子关系反映出来的话,就会出现该异常

81.使用DynaActionForm需要注意的问题
在struts-config声明
<form-bean name="memberloginForm" dynamic ="true" type="org.apache.struts.action.DynaActionForm">
<form-property name = "name" type = "java.lang.String"/>
<form-property name = "password" type = "java.lang.String"/>
</form-bean>
在Action里将form强制转化成DynaActionForm,然后get("属性名")就可以了

82.struts的validate最简单实现
1.首先准备好错误提示信息。
xxx.properties 里
errors.required={0} is required.(默认已有)
2.Form必须从ValidatorForm继承
3.不可以重载ValidatorForm的validate函数
4.在validate.xml中为你想验证的表单进行验证设计。例如
<form name="logonForm">
<field property="userName" depends="required">
<arg0 key="prompt.userName"/>
(该参数将在显示错误信息是从xxx.properties读取prompt.userName,填入{}方括号里,取代0。如果是arg1将将填入{1}位置,以此类推。
</field>
</form>
不需要在action里做任何处理。只管forward就行了。作为forward的目标页,不需要任何有关用于处理出错信息的处理。

83.服务器报
The requested resource (/xxxx/xxx.htm) is not available.的很奇怪的一个的可能原因
在web.xml中定义的tld,没有找到
或者是lib目录下的包太多出现了问题。

<taglib>
<taglib-uri>/spring</taglib-uri>
<taglib-location>/WEB-INF/spring.tld</taglib-location>
</taglib>
如WEB-INF目录下不存在spring.tld的话,就会报上边的错误

84.
spring的xxx-servlet.xml的使用SimpleFormController系列的类问题:
<bean id = "priceIncreaseForm" class="PriceIncreaseFormController">
<property name="sessionForm"><value>true</value></property>
<property name="beanName"><value>priceIncrease</value></property>
<property name="commandClass"><value>PriceIncrease</value></property>
<property name="formView"><value>priceIncrease</value></property>
<property name="successView"><value>hello</value></property>
<property name="productManager">
<ref bean="prodMan"/>
</property>
</bean>
这里要注意几个问题:
(1)上边的PriceIncrease是了类名,必须在classes里存在该类,否则报:
PropertyVetoExceptionsException: 1 errors:-- ErrorCodedPropertyVetoException: message=[Failed to convert property value of type [java.lang.String] to required type [java.lang.Class] for property named 'commandClass'; nested exception is:
java.lang.IllegalArgumentException: Invalid class name [PriceIncrease]: PriceIncrease]; errorCode=[typeMismatch]
java.lang.IllegalArgumentException: Invalid class name [PriceIncrease]: PriceIncrease
(2)<property name="formView"><value>priceIncrease</value></property>
这一行必不可少,priceIncrease是页面的名字,他将会是prefix + priceIncrease + suffix
如果缺少该行,则报:
javax.servlet.ServletException: Error in ModelAndView object or View resolution encountered by servlet with name 'pocketSpring': View to render cannot be null with ModelAndView [ModelAndView: materialized View is [null]; Model=[{priceIncrease=PriceIncrease@148e798, org.springframework.validation.BindException.priceIncrease=org.springframework.validation.BindException: BindException: 0 errors}]]

使用Errors的rejectValue相关问题:
rejectValue(java.lang.String field, java.lang.String errorCode, java.lang.Object[] errorArgs, java.lang.String defaultMessage)
Reject the given field of the current object, using the given error description.
当前对象指的是xxx-servlet.xml中与validator类有联系的哪个对象。

第一个是:当前对象的属性名,必须存在
第二个是:将要从属性文件中读取的消息
第三个是:传递给所读取的消息的参数,如:
error.too-low=You have to specify a percentage higher than {0}!
第四个是:当从属性文件中读取消息不成功时,所reject的值

以后从request中读取parameter可以借用spring的RequestUtils包里的
getStringParameter
public static java.lang.String getStringParameter(javax.servlet.http.HttpServletRequest request,
&bsp; java.lang.String name,
java.lang.String defaultVal)
Get a string parameter, with a fallback value. Never throws an exception. Can pass a distinguished value to default to enable checks of whether it was supplied.
不会抛异常
Hibernate的问题:2.1rc的问题
INFO: cache provider: net.sf.ehcache.hibernate.Provider
net.sf.hibernate.HibernateException: could not instantiate CacheProvider:
解决办法,2.1rc比以前的版本多需要一个包
ehcache.jar

85.static的问题
static函数只可以访问static成员变量。
而static变量可以被任何成员函数访问。

86.
java.lang.NoClassDefFoundError: javax/transaction/Synchronization];
需要添加JTA.jar
posted @ 2008-01-18 13:25 kylixlu 阅读(633) | 评论 (0)编辑 收藏
     摘要:         最近HR要求把公司的HRMS一些关键数据加密,加密的数据应该包括两方面,一个是当然Spring读取的属性文件(e.g :System.properties),还有一个是数据库的关键字段(不知道当初设计时为什么没有实现加密,我真是搞不懂,现在扔给我,恶改ing)。     ...  阅读全文
posted @ 2008-01-13 13:18 kylixlu 阅读(2284) | 评论 (2)编辑 收藏
出错状况:
我用的是Windows XP,在“服务”中启动“OracleOraHome90TNSListener”失败,说是
在 本地计算机 无法启动 OracleOraHome90TNSListener 服务。

错误 3: 系统找不到指定的路径。

于是,我在CMD中输入“LSNRCTL”

LSNRCTL for 32-bit Windows: Version 9.0.1.1.1 - Production on 28-1月 -2005 10:56
:54

Copyright (c) 1991, 2001, Oracle Corporation.  All rights reserved.

欢迎来到LSNRCTL,请键入"help"以获得信息。

LSNRCTL> start
启动tnslsnr:请稍候...

Failed to start service, error 3.
TNS-12560: TNS: 协议适配器错误
TNS-00530: 协议适配器错误
  32-bit Windows Error: 3: No such process
 
 
解决办法:
1.你修改了主机名,如果是的话,你可以把主机名改回来,然后重起计算机后,就可以找到监听程序了.
2.由于你的错误删除了监听程序的路径,要恢复很简单:点开始->运行输入"regedit"然后在查找里输入OracleOraHome90TNSListener去查找.如果找到后你就要增加一项ImagePath,定义成字符集,路径为: "盘符:\oracle\ora90\bin\tnslsnr".添加完后继续按F3来找!修改同上.至到搜索完毕为止!此方法成功几率为90%以上
posted @ 2008-01-13 12:38 kylixlu 阅读(301) | 评论 (0)编辑 收藏
主要就我所了解的J2EE开发的框架或开源项目做个介绍,可以根据需求选用适当的开源组件进行开发。主要还是以Spring为核心,也总结了一些以前web开发常用的开源工具和开源类库

  1持久层:

  1)Hibernate

  这个不用介绍了,用的很频繁,用的比较多的是映射,包括继承映射和父子表映射

  对于DAO在这里介绍个在它基础上开发的包bba96,目前最新版本是bba96 2.0它对Hibernate进行了封装, 查询功能包括执行hsql或者sql查询/更新的方法,如果你要多层次逻辑的条件查询可以自己组装QueryObject.可以参考它做HibernateDAO.也可以直接利用它

  2) iBATIS

  另一个ORM工具,Apache的,没有Hibernate那么集成,自由度比较大

  2:SpringMVC

  原理说明和快速入门:

  配置文件为:

  Spring的配置文件默认为WEB-INF/xxxx-servelet.xm其中xxx为web.xml中org.springframework.web.servlet.DispatcherServlet的servlet-name.

  Action分发:

  Spring将按照配置文件定义的URL,Mapping到具体Controller类,再根据URL里的action= xxx或其他参数,利用反射调用Controller里对应的Action方法。

  输入数据绑定:

  Spring提供Binder 通过名字的一一对应反射绑定Pojo,也可以直接从request.getParameter()取数据。

  输入数据验证

  Sping 提供了Validator接口当然还可以使用开源的Commons-Validaor支持最好

  Interceptor(拦截器)

  Spring的拦截器提供接口需要自己编写,在这点不如WebWork做的好。全面

  (这里提一下WebWork和Struts的区别最主要的区别在于WebWork在建立一个Action时是新New一个对象而Struts是SingleMoule所有的都继承它的一个Action,所以根据项目需要合适的选择。)

  3:View层

  1) 标签库:JSP2.0/JSTL

  由于Webwork或Spring的标签确实很有限,一般view层用JSTL标签,而且据说JSTL设计很好速度是所有标签中最快的使用起来也很简单

  2) 富客户端:DOJO Widgets, YUI(YahooUI),FCKEditor, Coolest日历控件

  Dojo主要提供Tree, Tab等富客户端控件,可以用其进行辅助客户端开发

  YahooUI和DOJO一样它有自己的一套javascript调试控制台,主要支持ajax开发也有很多Tree,Table,Menu等富客户端控件

  FCKEditor 最流行的文本编辑器

  Coolest日历控件 目前很多日历控件可用,集成在项目中也比较简单,这个只是其中的一个,界面不错的说……

  3) JavaScript:Prototype.js

  Prototype.js作为javascript的成功的开源框架,封装了很多好用的功能,通过它很容易编写AJAX应用,现在AJAX技术逐渐成熟,框架资源比较丰富,比如YUI,DWR等等,也是因为JavaScript没有合适的调试工具,所以没有必要从零开始编写AJAX应用,个人认为多用一些成熟的Ajax框架实现无刷新更新页面是不错的选择。

  4)表格控件:Display Tag ,Extreme Table

  这两个的功能差不多,都是View层表格的生成,界面也比较相向,可以导出Excel,Pdf,对Spring支持很容易。

  相比较而言比较推荐ExtremeTable,它的设计很好功能上比DisplayTag多一些,支持Ajax,封装了一些拦截器,而且最方面的是在主页wiki中有详细的中文使用文档。

  5):OSCache

  OSCache是OpenSymphony组织提供的一个J2EE架构中Web应用层的缓存技术实现组件,Cache是一种用于提高系统响应速度、改善系统运行性能的技术。尤其是在Web应用中,通过缓存页面的输出结果,可以很显著的改善系统的稳定性和运行性能。

  它主要用在处理短时间或一定时间内一些数据或页面不会发生变化,或将一些不变的统计报表,缓冲在内存,可以充分的减轻服务器的压力,防治负载平衡,快速重启服务器(通过硬盘缓存)。

  6)SiteMesh

  sitemesh应用Decorator模式主要用于提高页面的可维护性和复用性,其原理是用Filter截取request和response,把页面组件head,content,banner结合为一个完整的视图。通常我们都是用include标签在每个jsp页面中来不断的包含各种header, stylesheet, scripts and footer,现在,在sitemesh的帮助下,我们删掉他们轻松达到复合视图模式。

  Sitemesh也是 OpenSymphony的一个项目现在最近的版本是2.2,目前OpenSymphony自从04年就没有更新的版本了……感觉它还是比较有创新的一种页面组装方式, OpenSymphony开源组织的代码一般写的比较漂亮,可以改其源代码对自己的项目进行适配。

  测试发现Sitemesh还存在一些问题,比如中文问题,它的默认编码是iso-8859-1在使用时候需要做一些改动。

  7)CSS,XHTML

  这个不用说了,遵循W3C标准的web页面开发。

  8)分页标签: pager-taglib组件

  Pager-taglib 是一套分页标签库,可以灵活地实现多种不同风格的分页导航页面,并且可以很好的与服务器分页逻辑分离。使用起来也比较简单。

  9)Form: Jodd Form taglib

  Jodd Form taglib使用比较简单,只要把

  的头尾以包住

  就会自动绑定mybean, 自动绑定mybean的所有同名属性到普通html标记input, selectbox, checkbox,radiobox……在这些input框里不用再写任何代码…

  10)Ajax:DWR

  J2EE应用最常用的ajax框架

  11)报表 图表

  Eclipse BIRT功能比较强大,也很庞大……好几十M,一般没有特别需求或别的图表设计软件可以解决的不用它

  JasperReports+ iReport是一个基于Java的开源报表工具,它可以在Java环境下像其它IDE报表工具一样来制作报表。JasperReports支持PDF、HTML、XLS、CSV和XML文件输出格式。JasperReports是当前Java开发者最常用的报表工具。

  JFreeChart主要是用来制作各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。

  琴棋报表,国产的……重点推荐,适合中国的情况,开放源代码,使用完全免费。纯JAVA开发,适用多种系统平台。特别适合B/S结构的系统。官方网站有其优点介绍,看来用它还是不错的选择,最重要的是支持国产呵呵

  4:权限控制: Acegi

  Acegi是Spring Framework 下最成熟的安全系统,它提供了强大灵活的企业级安全服务,如完善的认证和授权机制,Http资源访问控制,Method 调用访问控制等等,支持CAS

  (耶鲁大学的单点登陆技术,这个单点登陆方案比较出名。我也进行过配置使用,可以根据项目需要,如果用户分布在不同的地方不同的系统通用一套登陆口令可以用它进行解决,一般注册机登陆机就是这样解决的)

  Acegi只是于Spring结合最好的安全框架,功能比较强大,当然还有一些其他的安全框架,这里列举一些比较流行的是我从网上找到的,使用方法看其官方文档把…

  JAAS, Seraph, jSai - Servlet Security, Gabriel, JOSSO, Kasai, jPAM, OpenSAML都是些安全控制的框架……真够多的呵呵

  5:全文检索

  1) Lucene

  Lucene是一套全文索引接口,可以通过它将数据进行倒排文件处理加入索引文件,它的索引速度和查询速度是相当快的,查询百万级数据毫秒级出结果,现在最火的Apache开源项目,版本更新速度很快现在已经到了2.0,每个版本更新的都比较大,目前用的最多的版本应该是1.4.3,但它有个不太方面的地方单个索引文件有2G文件限制,现在2.0版本没有这个限制,我研究的比较多,它的扩展性比较好,可以很方面的扩充其分词接口和查询接口。

  基于它的开发的系统很多,比如最常用的Eclipse的搜索功能,还有一些开源的软件比如Compass,Nutch,Lius,还有我最近做的InSearch(企业级FTP文件网页搜索)

  6:公共Util类

  主要是Jakarta-Commons类库,其中最常用得是以下几个类库

  1) Jakarta-Commons-Language

  最常用得类是StringUtils类,提供了使用的字符串处理的常用方法效率比较高

  2) Jakarta-Commons-Beantuils

  主要用Beantuils能够获得反射函数封装及对嵌套属性,map,array型属性的读取。

  3) Jakarta-Commons-Collections

  里面有很多Utils方法

  7 日志管理

  Log4J

  任务是日志记录,分为Info,Warn,error几个层次可以更好的调试程序

  8 开源的J2EE框架

  1) Appfuse

  Appfuse是Matt Raible 开发的一个指导性的入门级J2EE框架, 它对如何集成流行的Spring、Hibernate、iBatis、Struts、Xdcolet、JUnit等基础框架给出了示范。 在持久层,AppFuse采用了Hibernate O/R映射工具;在容器方面,它采用了Spring,用户可以自由选择Struts、Spring/MVC,Webwork,JSF这几个Web框架。

  2) SpringSide

  。SpringSide较完整的演示了企业应用的各个方面,是一个电子商务网站的应用 SpringSide也大量参考了Appfuse中的优秀经验。最重要的是它是国内的一个开源项目,可以了解到国内现在的一些实际技术动态和方向很有指导意义…

  9:模版 Template

  主要有Veloctiy和Freemarker

  模板用Servlet提供的数据动态地生成 HTML.编译器速度快,输出接近静态HTML 页面的速度。

  10:工作流

  我所知道比较出名的主要有JBpm Shark Osworkflow,由于对它没有过多的研究所以还不是很清楚之间有什么区别。

  项目管理软件

  dotProject:是一个基于LAMP的开源项目管理软件。最出名的项目管理软件

  JIRA: 项目计划,任务安排,错误管理

  Bugzilla:提交和管理bug,和eclipse集成,可以通过安装MyEclipse配置一下即可使用

  BugFree借鉴微软公司软件研发理念、免费开放源代码、基于Web的精简版Bug管理

  CVS:这个就不介绍了都在用。

  SVN: SubVersion已逐渐超越CVS,更适应于JavaEE的项目。Apache用了它很久后,Sourceforge刚刚推出SVN的支持。

  测试用例:主要JUnit单元测试,编写TestCase,Spring也对Junit做了很好的支持

posted @ 2007-12-28 13:54 kylixlu 阅读(150) | 评论 (0)编辑 收藏

一.JSP页面部分

  1. 页面文字处理

  1.1概述

  由于STRUTS提供了很好的国际化的支持,因此JSP页面可以STRUTS的这一特性做到国际化。

  STRUTS允许将不同语言的文字写在多个资源文件中,每个资源对应一种语言,而在JSP页面上则通过STRUTS标签< bean:message>来显示文字,该标签可以根据浏览器的当前语言设置确定从对应的语种资源文件中取出字符串,显示在页面上。

  1.2资源文件

  实现国际化,首先需要准备好资源文件,需要支持的语言各对应一个。资源文件一定要用支持多国语言文字的文本编辑器(如WORD,一定不能用NOTEPAD、UE等)编写,其格式如下:

  # Project international

  index.title=XX信息系统

  index.copyright=XXX有限公司 版权所有

  其中以#开头的行是注释,其它的行都是KEY=VALUE的形式,定义了一个KEY对应当前语言下的文字。保存资源文件时,需要在文件类型选项中选择纯文本类型,编码选择其它>>UTF-8,注意资源文件的扩展名为.properties,文件名可以任意取。

  这样保存的资源文件还不能直接被STRUTS使用,JDK提供了一个工具native2ascii对编写的资源文件进行转换,该工具位于%JDK%/bin/目录下,一般在JDK正确安装后可以直接在命令行使用。使用native2ascii工具转换的资源的文件的命令行格式如下:

  native2ascii -encoding UTF-8 ApplicationResources.properties ApplicationResources_zh_CN.properties

  其中-encoding参数指明编写的资源文件的编码格式,这里必须与编辑时选择保存的编码格式一致,后面两个参数分别是需要转换的资源文件名和转换后保存的资源文件名。

  转换后的资源文件名都必须以一个特定的前辍开头,该前辍写在struts-config.xml配置中,后辍是对应语言的简称,如

  英文(美国) ApplicationResources _en_US.properties

  中文(简体)ApplicationResources _zh_CN.properties

  中文(繁体)ApplicationResources _tw.properties

  泰语 ApplicationResources _th.properties

  资源文件的存放目录可以是/WEB-INF/classes/下的任意目录,为了便于管理 ,建议在/WEB-INF/ classes/下建立目录resources,将所有的资源文件都放在该目录下。STRUTS通过配置文件struts-config.xml配置资源文件的所在位置,如:

  < message-resources parameter="resources.ApplicationResources" />

其中目录以包的方式表示。

  1.3 JSP页面显示

  为了支持国际化,JSP页面的编码方式需要设成UTF-8,即在页面的头部加入以下几行:

  < %@ page contentType="text/html; charset=UTF-8" %>

  < %@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>

  ……(STRUTS及其它标签库引用)

  < html:html locale="true">

  JSP页面的中文字要全部写到资源文件中,注意每种语言资源文件都要写到,否则在使用某种语言访问系统时可能会报错。JSP中使用STRUTS标签< bean:message key="index.title"/>显示资源文件中定义的字符串。这样当改变浏览器的当前语言后,页面会自动取得与浏览器当前语言对应的资源文件中的字符串显示在页面上。

  对于在ACTION的JAVA代码中直接设置的变量,如需要在JSP页面上进行显示,那么在设置变量时也需要从资源文件中通过KEY取到当前语言的字符串,再使用request.setAttribute方法进行设置,这样在JSP页面上使用< bean:write>标签展现设置的变量才会对应不同的语言会呈现不同的字符串。

  在JAVA代码中取资源文件的信息的方法是,首先通过Globals.MESSAGES_KEY从request或session变量中取得资源对象(MessageResources),再调用MessageResources.getMessage方法即可取得相应的字符串,该方法需的两个参数是当前语言区域设置(Locale)和字符串的KEY,其中当前语言区域设置(Locale)保存在SESSION变量中,其变量名为Globals.LOCALE_KEY,该变量在下一节手工设置语言时也有提到。

  1.4手工设置显示语言

  用浏览器的语言设置来决定系统采用哪种语言展现可能会出现一个问题,就是用户的浏览器语言与他想要使用系统的语言不一致的情况,如某客户浏览器的语言设置为英文,但他还是在使用主站系统时看到的是中文界面。该问题可以通过手工选择语言来解决,在程序中可以通过设置名为Globals.LOCALE_KEY(Globals.LOCALE_KEY 是 struts的常量)的SESSION变量,也能改变系统中当前语言的设置,代码类似于:

   Locale newLocale = new Locale( language, country );
  session.setAttribute( Globals.LOCALE_KEY, newLocale );
  其中变量language, country 可以通过用户的选择设置相应的值,各种语言的对应值参考http://www.unicode.org/unicode/onlinedat/countries.html。

  2. 带有文字的图片处理

  2.1静态图片

  带有文字的图片应该也要根据语言的不同而显示不同的图片,但图片本身不是文本信息,无法直接用< bean:message>标签来完成国际化操作。但由于页面上显示图片取决于< image>标签的src属性,因此可以为每个图片对应各种语言的都准备一个版本,文件名或路径有所差异,然后将每种语言对应的图片的路径及文件名放在资源文件中,而在JSP页面上< image>标签的src属性由< bean:message>标签指定,这样即可以完成图片的国际化。

  2.2 JAVA生成动态图片

  由于生成动态图片是在服务器端进行,因此同样需要将生成图形字符的静态部分放在资源文件中,如图形名称等,从资源文件中取字符串的方法在JSP页面显示部分已有说明;从数据库中取出的部分可以不用做任何处理,直接从数据库取出与静态部分拼装成图形字符串即可,数据库相关设置在数据库部分有详细说明。

  3. 页面提交参数处理

  页面上向WEB服务器提交参数有两种方式,一是在访问URL后面附加上request变量,这样的变量在服务器端可以通过request.getParameter方法得到,另一种方式是在JSP页面上用FORM表单方式提交,这种方法提交的变量在服务器端可以通过form的getXXX方法取到变量的值。

 当WEB系统需要国际化时,JSP页面的编码方式被指定为UTF-8(前面已有说明),也就是说页面上可以处理各国文字,在使用URL传递变量时需要将变量用JS方法encodeURI方法处理过,才能在服务器端得到正确的值,如

  location.href="int/do/common/queryUserInfo.do?sqlcode=QUERY0001&hh="+encodeURI(document.all.hh.value)+"&hm="+encodeURI(document.all.hm.value)+"&bmbh="+encodeURI(document.all.bmbh.value);

  由于这种方式需要对每个request变量调用encodeURI方法,处理起来比较麻烦,但用FORM表单提交的方式即不需要进行任何处理,因此在开发时应尽量使用FORM表单提交的方式进行数据传递。

  如果需要JAVA代码中生成URL,则其中传递的参数也需要调用URLEncoder.encode方法进行处理,并指定编码方式为"UTF-8"。

  在服务器端取得客户端传递的参数时也需要对参数进行字符集的转换后才可以下确使用,如

  strString = new String(strString.getBytes("ISO-8859-1"), "GBK");

  但如此对每个变量都需要这样处理也是非常麻烦,实际上可以利用servlet的Filter机制进行统一处理。在调用servlet(包括struts)时,在到达实际的servlet类前,会首先调用指定的Filter进行处理,Filter处理完成后再决定是否交给实际请求的servlet类处理。

  利用这一点,我们可以新建一个类继承自Filter基类,重载doFilter方法,并在该方法中加入

  request.setCharacterEncoding(“UTF-8”);

  指定客户端的字符集为UTF-8(默认客户端的字符集为ISO8859),这样在ACTION类中取得的参数就不需要进行任何的转换处理了。

  配置Filter的地方在web.xml,在web.xml文件中加入类似这样的配置即可以使自定义的Filter生效:

   < filter>
  < filter-name>charsetfilter< /filter-name>
  < filter-class> international.CharsetFilter< /filter-class>
  < init-param>
  < param-name>encoding< /param-name>
  < param-value>UTF-8< /param-value>
  < /init-param>
  < /filter>
  < filter-mapping>
  < filter-name>charsetfilter< /filter-name>
  < url-pattern>/*< /url-pattern>
  < /filter-mapping>
  二.数据库设置

  在数据库建库时需要将数据库的字符集指定为unicode编码类型,以支持多种语言。

  有一点需要特别说明的是UTF-8是用3个字节表示一个汉字,这点在进行表结构设计时需要注意,适当设置字段的长度。

posted @ 2007-12-28 09:54 kylixlu 阅读(185) | 评论 (0)编辑 收藏
仅列出标题
共14页: First 上一页 6 7 8 9 10 11 12 13 14 下一页