【问题标题】:Tomcat6 and Java 7Tomcat6 和 Java 7
【发布时间】:2023-03-18 09:04:01
【问题描述】:

在 linux 中,是否可以在 tomcat6 上部署使用 Java 7 编写的 Web 应用程序?如果是这样,需要修改什么配置才能使其工作?

我已尝试更改tomcat6.conf文件中的JAVA_HOME变量并重新启动,但根据tomcat管理器网页它仍然使用1.6,并且只有以1.6或更低版本编写的应用程序才能正确部署。

我在不同的位置安装了 jdk 1.6 和 1.7。

【问题讨论】:

  • 不确定tomcat6.conf 文件应该是什么,我从未见过。您可能想检查在设置 JAVA_HOME 变量的bin 目录中是否有setenv 批处理/shell 脚本
  • Tomcat 6 并未正式支持 JDK 7(基于所有错误报告,我怀疑您是否也想尝试让它与它一起工作)。使用 1.6 兼容模式编译您的应用程序或升级到 Tomcat 7。

标签: java tomcat6 java-7


【解决方案1】:

我在使用 java JDK 1.7.0 编译我的 servlet 时遇到了一个重大问题,由于运行时 manor.major 版本错误,Tomcat 无法启动。

要让 Tomcat6 使用 JDK 1.7 运行您的类,请执行以下操作:

  1. 以root权限打开文件/etc/init.d/tomcat6

  2. 您会在第 83 行找到一个名为 JDK_DIRS 的变量。

  3. 通过在行首添加# 将其注释掉。

  4. 在下面写下:JDK_DIRS="/usr/lib/jvm/java-1.7.0-openjdk-i386"

  5. 保存并重启tomcat

【讨论】:

    【解决方案2】:

    我只是使用默认的 Tomcat 安装,除了用于 GUI 登录的 tomcat-users.xml 之外没有设置任何配置文件。

    Apache Tomcat 6.0.35 和 6.0.16 均在 JVM 1.7.0_03-b05 (Windows+Linux) 上运行。

    JAVA_HOME 必须指向 JDK 文件夹;例如:

    C:\Program Files\Java\jdk1.7 (Windows)

    /usr/lib/jvm/java-6-sun(Ubuntu,此链接指向JDK安装)

    【讨论】:

    • 问题不在于直接使用Java 1.7运行tomcat,没问题。问题是,tomcat 使用哪个版本来启动 servlet。问题是如何让tomcat使用Java 1.7来启动它的servlet,而不是你是否可以在Java 1.7上启动tomcat本身,这显然工作正常。
    【解决方案3】:

    我也遇到过类似的问题,JDK 1.7 似乎没有向后兼容 Tomcat 6。您需要将其部署到 Tomcat 7 或使用 JDK 1.6 重新编译。

    【讨论】:

    • 对我来说这听起来不太可能。你有什么可以支持的吗?
    • Tomcat 本身在 1.6 上运行良好,但问题在于 tomcat 用于启动 servlet 实例的版本。 Tomcat 6 本身不会运行用 Java 1.7 编写的 servlet。
    • 这个答案应该是最好的答案,因为它可能会产生误导。 Java 7 确实在 Tomcat 6 上运行。(请注意 @Zero 所说的)
    • @JunhoPark 我更新了我的答案选择,尽管我目前无法使用 Ramzi Komati 的修改来测试 1.7 servlet 是否在 tomcat 6 实例中运行。我会相信你的话。
    【解决方案4】:

    我发现 Tomcat 6 使用了 哪个 Java 7。

    #JAVA_HOME=/usr/lib/jvm/java-7-openjdk  ## Did not work
    JAVA_HOME=/usr/lib/jvm/java-7-oracle    ## DID WORK
    

    “没有工作”,我的具体意思是,在启动我的 web 应用程序时,我得到了ClassNotFoundException: java.lang.AutoCloseable。这个接口是new with Java 7

    Caused by: java.lang.NoClassDefFoundError: java/lang/AutoCloseable
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:751)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:144)
        at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2818)
        at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1159)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1647)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
        at org.springframework.util.ClassUtils.forName(ClassUtils.java:249)
        at org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:395)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doResolveBeanClass(AbstractBeanFactory.java:1349)
        at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1320)
        ... 47 more
    Caused by: java.lang.ClassNotFoundException: java.lang.AutoCloseable
            at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
            at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
            ... 58 more
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-21
      相关资源
      最近更新 更多