一些需要注意的问题!!!

一些需要注意的问题!!!
----------------------


1、JSP页面不能显示通过CSS代码引入的图片问题

原先Ruby的rhtml页面的内容是如下:


将这段内容放到JSP页面中就不能显示图片了,这可能是Ruby与JSP解析页面不同的缘故,修改如
下后问题解决!(注意:在url的括号里加上了英文单引号,去掉了一个斜杠!!!)


================================================================================


2、Tomcat:IOException while loading persisted sessions: java.io.EOFException异常处理

Tomcat在启动时出现如下异常问题:

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

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

将work下面的文件清空,主要是*.ser文件,或者只是删除掉session.ser亦可。

--------------------------------------------------------------------------------
原因:
错误描述:....while loading persisted sessions: java.io.EOFException...
分析:EOFException表示输入过程中意外地到达文件尾或流尾的信号,导致从session中获取数据失败。
异常是tomcat本身的问题,由于tomcat上次非正常关闭时有一些活动session被持久化(表现为一些临时文件),
在重启时,tomcat尝试去恢复这些session的持久化数据但又读取失败造成的。此异常不影响系统的使用。
--------------------------------------------------------------------------------
================================================================================

3、JSTL版本问题

如果要使用JSTL,则必须将jstl.jar和standard.jar这两个文件放到classpath中!!!

JSTL 是个规范,规范中定义的只是接口,具体的实现由不同的厂商进行。

像 Tomcat 中的实现就命名成了 standard.jar,其他的就不一定是这个名字了。

虽然说实现方式不一样,但是结果必须是一样的,因为在 JSTL 规范限定了。

不仅是 JSTL 是这样,J2EE 中所有的东西都是这样,J2EE 只是一个规范 API 接口,由具体的 J2EE 应用服务器厂商自己去实现。
================================================================================


4、SiteMesh、FCKeditor和Struts2整合时需要注意的问题

1)注意采用js整合FCKeditor时,页面的js里要加上来组织URL路径!!!
2)不让SiteMesh包装FCKeditor的相关页面!!!
在Sitemesh的配置文件decorators.xml中,一定要指定

    /FCKeditor/*

这样做了之后还是出现页面和原来显示一样的问题,请清空浏览器的缓存和Tomcat的work目录!!!
之所以还出现界面被修饰的原因是你的浏览器还有cache,把你的cache清理了就可以了
3)当用Struts2处理一个请求后,会转发到一个页面,而转发到的页面没有被SiteMesh包装的问题
这是因为web.xml中的SiteMesh配置的中没有加入,加入如下
        REQUEST
        FORWARD
        INCLUDE
即可!!!
================================================================================


5)、jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class

信息:
2010-9-15 14:44:07 org.apache.catalina.loader.WebappClassLoader validateJarFile
信息: validateJarFile(E:\workshop\eclipse_jee\DataPlatform\WebContent\WEB-INF\lib\servlet-api-2.5-6.0.29.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class

分析:
jsp-api.jar和servlet-api.jar这两个包tomcat的common\lib已经有了,必须将\WEB-INF\lib\目录下的去掉,否则会冲突的,会引起tomcat启动正常,而页面却总是无内容显示的错误

解决方案:
将\WEB-INF\lib\目录下的jsp-api.jar和servlet-api.jar删除

保证WEB-INF\lib跟tomcat5的common/lib下的JAR包没有重复的即可!
--------------------------------------------------------------------------------
把 webapps\maintenance\WEB-INF\lib\
下面的 servlet-api.jar 删掉吧! tomcat自己有,不需要你提供!
顺便看看其他的jar, 和 tomcat\lib 目录比较一下,tomcat已经有的,就别留着了!

这才想起,我在tomcat/common/lib/中也放入了j2ee.jar等包,去common/lib中处不必要的包后,保证tomcat/common/lib/和WEB-INF/lib这两个目录下的jar没有重复的,问题解决。
原来,tomcat 启动后先将tomcat/common/lib目录下的jar包全部读入内存,如果webapps目录里的应用程序中WEB-INF/lib目录下有相同 的包,将无法加载,估计不同版本的包之间也会造成类似问题。因此建议尽量不要把jar包放入tomcat/common/lib目录下,应该放入WEB- INF/lib目录下。
--------------------------------------------------------------------------------
================================================================================


6)、启动tomcat 6.0.29有如下提示:
2010-9-15 14:49:05 org.apache.catalina.core.AprLifecycleListener init
信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path:

解释:
哦,这个问题,官方的参考资料是:http://tomcat.apache.org/tomcat-6.0-doc/apr.html
tomcat整合本地apr会使效率提升:
一是,处理静态资源的时候速度更快,(注:有人用jmeter,对使用apr前后的tomcat进行压力测试,结果显示,性能是有一定的提升,但是没有想象中多,只有一点点,当然,这与运行的逻辑有关,但是我个人认为在大多数情况下这部分性能提升甚微)。
二是,我认为提升比较多的是对ssl的处理效率,当tomcat处理https的请求是,如果使用本地的openssl库,肯定会比前面提升的效率高。(虽然没有实际测试数据,但我推测这里的性能提升比例上要比第一点多得多)。

我看你写blog,觉得你可能漏了些东西,
运行本地apr,需要一下三个库:
  * APR library
  * JNI wrappers for APR used by Tomcat (libtcnative)
  * OpenSSL libraries
好像,你只是安装了中间那个。。。

APR library那个在主页上有详细的安装说明,windows和linux都有。
OpenSSL 在主页上也有安装说明。

补充一下,其实你这个并不是eclipse或者是myeclipse的问题,而是tomcat本身一个调用本地库的提高运行效率的特性。tomcat没有找到相应的本地库,提示一下而已。
================================================================================


7)、异常:... SQL Error: 1210, SQLState: HY000...Incorrect arguments to mysqld_stmt_execute...
详细异常信息如下:
[orm:15:20:45] WARN [http-8080-1] JDBCExceptionReporter.logExceptions(100) | SQL Error: 1210, SQLState: HY000
[orm:15:20:45] ERROR [http-8080-1] JDBCExceptionReporter.logExceptions(101) | Incorrect arguments to mysqld_stmt_execute
[orm:15:20:50] ERROR [http-8080-1] ActivityPublicizeAction.create(53) | could not insert: [com.byd.dataplatform.model.ActivityPublicize]

原因:
当前使用的数据库为MySQL v5.0.77,而项目中用到的MySQL驱动jar包的是mysql-connector-java-5.0.4-bin.jar,
可能是因为驱动版本较旧的缘故,从而造成此异常的发生!!!

解决办法:换成更高版本驱动如mysql-connector-java-5.1.13-bin.jar之后,系统运行OK!!!
参考:http://bugs.mysql.com/bug.php?id=11084
================================================================================


8)、S2SH存入数据到数据库中变成了乱码!

原因:
字符编码问题!

解决办法:
检查字符编码,包括数据库、JSP页面、web.xml和struts.xml文件以及数据库连接URL!
查看MySQL数据库的字符编码的命令:status和“show variables like "caharacter_set_%"”
数据库连接URL写成如:jdbc.url=jdbc:mysql://localhost:3306/data_platform?useUnicode=true&characterEncoding=utf-8
将所有的涉及编码的地方都将编码改成UTF-8!!!(数据库至少要保证server和db是UTF-8编码字符集的!!!)
web.xml中加入filter过滤字符,将字符编码为UTF-8!!!
================================================================================


9)、log4j-1.2.15.jar的一个Bug!!!
异常信息:
log4j:ERROR LogMananger.repositorySelector was null likely due to error in class reloading, using NOPLoggerRepository.
原因:
这是一个路径替换(subst-mechanism)功能的bug,具体信息见官方bug记录:
https://issues.apache.org/bugzilla/show_bug.cgi?id=43325
解决办法:
log4j-1.2.14.jar中没有此bug,此bug已经在log4j-1.2.16.jar中修复!!!
建议使用log4j-1.2.16.jar包替换log4j-1.2.15.jar包!
注:路径替换相关知识参见:http://lixjluck.javaeye.com/blog/711895
================================================================================


10)、泛型使用注意
因为public class HibernateDao extends
        SimpleHibernateDao,
所以自己写的继承于HibernateDao(T, PK)的xxxDao类必须要保证xxx的主键的类型与
后面的PK类型一致或者是基本类型与其包装类对应!
================================================================================


11)、JPA与Hibernate相关
如果项目中用到了“多对多”这种关系(不管DB中是物理的多对多——表现为有外键,还是逻辑的多
对多——表现为没有外键),一般都要使用一个关联表(或叫连接表),此关联表除了2个外键和可
选的单字段主键之外,不能有业务字段,否则就是一个实体了!!!
所以不用为没有业务列的关联表建立JPA或Hibernate实体类了,如果是用反向工具生成实体类且
DB中的表之间均没有定义外键,则反向后会生成关联表的实体类并且多对多的两个表之间没有用
JPA标注写明多对多的关系,所以这时要在对应的实体类用JPA标注写明多对多关系,并把关联表
反向后的实体类删除!!!

表设计处理注意:(回答了“库表没有外键,但我想用 Hibernate 的 1:n,n:1 等功能,怎么做?”这个问题)
(1)表设计时,涉及到多对多,我通常会建立一个关系表,如此Hibernte中都是用一对一或一对多关联
(2)多对多在hibernate中都需要一个关联表,这个表中保存了两者直接的关系!
(3)hibernate才不管你的数据库表中到底有没有定义外键呢
(4)hibernate只控制逻辑主键和外键~~和实际的数据库定义没关系~~ 
(5)O/R?你只要看着O就行了,配置的时候想象着两个对象关联起来,对象的关联,以后的操作也是针对对象的,操作一个对象带动另一个对象,那是hibernate在做
================================================================================


12)、在eclipse查看与调试Struts2的源码!
在Eclipse中找到Referenced Libraries 中struts2-core-2.xxx.jar
打开一个.class文件,如果没有源码,上面有个按钮,点击,选择External File
直接选择你的struts-2.1.8.1-all.zip,OK.
XWORK:打开一个.class文件,如果没有源码,上面有个按钮,选择External Folder ,直接选择xwork文件夹(文件夹下面是src,core等文件夹)

另外,加载zip的源码时,速度会慢一点。还是将zip的文件解压后,将src指定到那个目录好一点。
并且要保证,指定的目录的结构要正确。

比如:
D:\OpenSource\struts-2.1.8.1\src\core\src\main\java\org\apache\struts2

你的src应该指向到:
D:\OpenSource\struts-2.1.8.1\src\core\src\main\java
================================================================================


13)、使用Struts2的参数拦(截)器ParamsInterceptor时要注意的一件事情!
若页面表单中的某个表单域中使用了disabled="disabled"(或者是disbled)的属性,则使用
Struts2的参数拦(截)器ParamsInterceptor时不会取该表单域的值!!!
要取到值就不要用disabled属性!
================================================================================

 

转载于:https://my.oschina.net/leeoo/blog/51044

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值