JavaEE 5、WAS 6.0 JSP 的奇怪问题包括

标签 java jsf jakarta-ee websphere

我们目前正在将应用程序从生产环境迁移到全新的数据中心。

  • 当前生产环境:Java 1.4、Java EE 3、WAS 5.1、JSF 2.1
  • 新数据中心环境:Java 1.5、Java EE 5、WAS 6.1、JSF 2.1
我们的应用程序基于 JSF 2.1 构建,并在 AJAX 调用之一中包含以下代码:
request.getSession().getServletContext().getRequestDispatcher(
                    "/results.faces").include(request, response);
这就是我们遇到问题的地方。

案例 1:符合标准规范的 EAR 结构
。 EAR -> WAR -> WEB-INF -> lib -> *.jar(所有应用程序特定的 jar 都位于 WEB-INF/lib 下)。这不起作用,我们继续获取类加载器未找到的类的异常。另外,上述 AJAX 调用失败(未生成输出)

情况 2:EAR 包含根目录下的所有应用程序 JAR 文件(MANIFEST.MF 具有手动指定的类路径)。
这种方法工作得很好,所有 JAR 文件都可以毫无问题地加载。此外,AJAX 调用也顺利进行。

任何想法为什么会发生这种情况。

- 阿什

最佳答案

是的,这是因为 Java EE 应用服务器有一个类加载器层次结构,如下所示:首先调用引导类加载器;接下来是 EAR 级别的类加载器,然后是 WAR 级别的类加载器。更高级别的类加载器不会在下面查找他们需要的类。如果他们找不到所需的内容,则会抛出 ClassNotFoundException。

因此 WEB-INF/lib 中的 JAR 对于 EAR 级别的类加载器来说是不可见的。当您将这些 JAR 向上移动时,问题就解决了。它使所有这些 JAR 对您的 EAR 中的所有 WAR 都可见。

您可能想要检查的一件事是 web.xml 和其他文件的规范。 servlet 和 JSP 规范在此过程中发生了一些变化,因此像 JSTL 之类的 JAR 从版本 1.0 变为了 1.1。您可能需要仔细检查您的 web.xml 和所有 JAR,以确保它们符合您的 Java EE 应用服务器支持的规范。

不幸的是,升级应用服务器并不像放入 EAR 或 WAR 那么容易。

关于JavaEE 5、WAS 6.0 JSP 的奇怪问题包括,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/804537/

相关文章:

jakarta-ee - Red 5 录制 RTMP 网络摄像头配置适用于本地主机,但不适用于外部服务器

java - Hibernate标准,从实体A中选择,其中someId在B中

java - 删除聊天 Activity 中的消息没有任何反应

java - servlet 的数据库连接问题 - Java webapp

java - 如何在 Java 中绘制交互式图形/线条?

JSF 2 : can EL do something like this?

java - JSF 实用程序类

java - 测试键盘输入的字符串是否具有有效的日期和格式

java - 为什么这次调用中的服务为空?

java - 在java应用程序中使用谷歌地图