【发布时间】:2013-09-20 14:29:31
【问题描述】:
我们正在使用 Java7 和 Tomcat7 64 位版本的 Windows 系统上运行 Web 应用程序。 登录 webapp 并在任意链接上点击 2-3 次后,所有应由 JSPWriter#print 方法写入的动态字符串内容不再呈现在 jsp 页面中。数字(int)仍然被渲染。
使用Java6和Tomcat6完全没有问题。使用 32Bit 版本也没有问题。
目前唯一避免这个错误的方法是,在作为服务运行时在注册表中添加tomcat的调试参数-Xdebug
-Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n,或者在从eclipse部署时传递它。
我们找不到任何错误配置。有什么建议吗?
编辑: 在 tomcat logging.properties 中将日志级别从 INFO 更改为 FINE 也可以解决问题。更改回 INFO 并立即重新启动 tomcat 会导致再次出现问题。
【问题讨论】:
-
您的应用程序是在 64 位 JDK 中编译的吗?如果没有,请尝试并在此处更新。
-
可能是 java7/tomcat7 互操作性中的一个错误?我会使用 java 1.6 来尝试重现该行为。此外,您应该查看字符串数据的一致性。也许您可以尝试使用硬编码字符串再次测试它。我不太确定..但也许调试选项会减慢您的代码/应用程序的速度,以便在发布时间之前定义字符串?无论如何..没有任何代码,这是一个猜谜游戏..
-
在32Bit版本中使用Java6甚至Java7都没有问题。硬编码字符串呈现没有任何问题。它只是从
<div class="second_column"><%=ViewUtils.encodeAsHTMLEntities(tValues.getHostName())%>等 java 对象读取的动态数据,其中 #getHostName() 只返回一个字符串,#encodeAsHTMLEntities 用 HTMP 特定编码替换字符,用 br 标签替换链接中断,并在每个(配置的)字符数之后插入不可见的换行符.所有方法都适用于 Tomcat5/6 和 Java4/5/6 多年。任何日志文件中也没有错误。 -
另一个奇怪的问题是:我们使用枚举作为数据库列名。
public enum ORGANISATIONAL_UNIT implements IColumnDefinition, IArchiveable { ID, PARENT_ORG_UNIT_ID, ORGANISATIONAL_UNIT_NAME, ORGANISATIONAL_UNIT_KEY,....和 enum.toString() 方法现在也返回了 NULL,我认为这永远不会发生?!?!