【问题标题】:Servlet dispatcher threw exception , Spring 4.1.5 on Tomcat 7 (JBoss EWS 2.0) (Openshift)Servlet 调度程序抛出异常,Tomcat 7 上的 Spring 4.1.5 (JBoss EWS 2.0) (Openshift)
【发布时间】:2015-02-25 01:02:28
【问题描述】:

我正在开发一个小型 spring web-mvc 应用程序以供练习。我已经将它部署在 Tomcat 7(在 Openshift.com)上。我也使用 MySql 5.5 数据库并在 IntelliJ 中工作。当应该加载 DAO 类时,问题就开始了。 Servlet 调度程序的 Servlet.init() 抛出以下异常:

javax.servlet.ServletException: Servlet.init() for servlet dispatcher threw exception
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:683)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
    org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.lang.Thread.run(Thread.java:745)

root cause

org.springframework.beans.factory.CannotLoadBeanClassException: Error loading class [pf.repository.JdbcPhotoDao] for bean with name 'jdbcPhotoDao' defined in ServletContext resource [/WEB-INF/dispatcher-servlet.xml]: problem with class file or dependent class; nested exception is java.lang.UnsupportedClassVersionError: pf/repository/JdbcPhotoDao : Unsupported major.minor version 52.0 (unable to load class pf.repository.JdbcPhotoDao)
    org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1331)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineTargetType(AbstractAutowireCapableBeanFactory.java:622)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:591)
    org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1397)
    org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:968)
    org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:735)
    org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757)
    org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
    org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:663)
    org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:629)
    org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:677)
    org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:548)
    org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:489)
    org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
    javax.servlet.GenericServlet.init(GenericServlet.java:158)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:683)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
    org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.lang.Thread.run(Thread.java:745)

在我看来,这是我的 DAO 实现“JdbcPhotoDao”中的一个东西,但我不知道它是什么。我尝试在 IntelliJ Settings -> Build, Execution, Deployement -> Compiler -> Java compiler for 1.6 中更改项目字节码版本,因为我使用的是 JDK 1.8,但这并不能解决我的问题。这是JdbcPhotoDao.java的代码

package pf.repository;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;
import pf.domain.Photo;

public class JdbcPhotoDao implements PhotoDao {

    JdbcTemplate jdbct;

    public void setJdbct(JdbcTemplate jdbct) {
        this.jdbct = jdbct;
    }

    @Override
    public List<Photo> getPhotosList() {
        List<Photo> photoslist = jdbct.query("select ID,LINK,GALLERYID from PHOTOS",
                new RowMapper<Photo>() {
            @Override
            public Photo mapRow(ResultSet rs, int rowNum) throws SQLException {
                Photo result = new Photo();
                result.setId(rs.getInt("ID"));
                result.setLink(rs.getString("LINK"));
                result.setGalleryId(rs.getInt("GALLERYID"));
                return result;
            }
        });

        return photoslist;
    }


}

web.xml 和应用程序上下文

web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.4"
         xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
         http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >

    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>*.htm</url-pattern>
    </servlet-mapping>

    <welcome-file-list>
        <welcome-file>
            index.jsp
        </welcome-file>
    </welcome-file-list>


</web-app>

调度程序-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
        <property name="prefix" value="/WEB-INF/jsp/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${jdbc.driverClassName}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>

    <bean id="propertyConfigurer"
          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:jdbc1.properties</value>
            </list>
        </property>
    </bean>

    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <bean id="jdbcPhotoDao" class="pf.repository.JdbcPhotoDao">
        <property name="jdbct" ref="jdbcTemplate"/>
    </bean>

    <bean id="photoService" class="pf.service.SimplePhotoService">
        <property name="photodao" ref="jdbcPhotoDao"/>
    </bean>

    <bean name="/gallery.htm" class="pf.web.GalleryController">
        <property name="photoservice" ref="photoService"/>
    </bean>

我将非常感谢一些可以帮助我解决此问题的提示

【问题讨论】:

  • 我没有使用过 openshift.com。但是你是如何构建你的应用程序的?尝试设置您的
  • 使用 Gradle。接下来我将与 Git 的战争部署到服务器。在我请求 /gallery.htm 之前,主页加载正确并且所有 sem 都是正确的。该应用程序在本地 Tomcat 8 上正常工作
  • 使用 gradle 构建时是否使用 JDK 1.6?将 eclipse 编译器设置为 1.6 是不够的。尝试将您的 JAVA_HOME 设置为 jdk1.6 路径,构建并试一试。
  • 对。非常感谢您的帮助

标签: java spring tomcat servlets openshift


【解决方案1】:

您可能正在使用 Java 8 进行编译,并且正在 Java 7 JVM 或任何旧版本上运行应用程序:

JDK 1.0 -> 主要版本 45 和次要版本 3
JDK 1.1 -> 主要版本 45 和次要版本 3
JDK 1.2 -> 主要版本 46 和次要版本 0
JDK 1.3 -> 主要版本 47 和次要版本 0
JDK 1.4 -> 主要版本 48 和次要版本 0
JDK 1.5 -> 主要版本 49 和次要版本 0
JDK 1.6 -> 主要版本 50 和次要版本 0
JDK 1.7 -> 主要版本 51 和次要版本 0
JDK 1.8 -> 主要版本 52 和次要版本 0

您可以使用javap 命令查看您的类编译的版本。然后与 Java JVM 版本对比。

来自 Open Shift 网站:

OpenShift 分别为 Tomcat 6 和 7 使用 JBoss EWS 1.0 和 2.0。 EWS 是 Apache Tomcat 的强化和 Red Hat 支持版本。两个都 版本使用 Java OpenJDK 1.7。

因此,使用 Java 6 或 7 编译您的项目应该可以解决您的问题

【讨论】:

  • 感谢您的回复。我知道,我在使用 1.8 编译时将项目字节码版本更改为 1.6,但没有效果。可能我做错了什么。我再查一下
  • 是的,您编译的类仍在使用 java 8:Unsupported major.minor version 52.0
  • 我试过 javap 并显示 java 8 ,所以我知道我应该做什么。非常感谢您的帮助
【解决方案2】:

由于您使用 Gradle 构建,请尝试将您的 JAVA_HOME 设置为 1.6 并构建和部署。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    • 2018-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-26
    相关资源
    最近更新 更多