Servlet 调度程序抛出异常,Spring 4.1.5 on Tomcat 7 (JBoss EWS 2.0) (Openshift)
Servlet dispatcher threw exception , Spring 4.1.5 on Tomcat 7 (JBoss EWS 2.0) (Openshift)
我正在开发一个小型 spring web-mvc 应用程序以供练习。我已经在 Tomcat 7 (at Openshift.com) 上部署了它。我也使用 MySql 5.5 数据库并在 IntelliJ 中工作。当应该加载 DAO class 时,问题就开始了。 Servlet.init() for servlet dispatcher 抛出以下异常:
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>
非常感谢您提供一些可以帮助我解决此问题的提示
可能您正在使用 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命令查看您的class编译的是哪个版本。然后与Java JVM版本进行比较。
来自 Open Shift 网站:
OpenShift uses JBoss EWS 1.0 and 2.0 for Tomcat 6 and 7 respectively.
EWS is a hardened and Red Hat supported version of Apache Tomcat. Both
versions use Java OpenJDK 1.7.
因此,使用 Java 6 或 7 编译您的项目应该可以解决您的问题
由于您是使用 Gradle 构建的,请尝试将 JAVA_HOME 设置为 1.6 并构建和部署。
我正在开发一个小型 spring web-mvc 应用程序以供练习。我已经在 Tomcat 7 (at Openshift.com) 上部署了它。我也使用 MySql 5.5 数据库并在 IntelliJ 中工作。当应该加载 DAO class 时,问题就开始了。 Servlet.init() for servlet dispatcher 抛出以下异常:
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>
非常感谢您提供一些可以帮助我解决此问题的提示
可能您正在使用 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命令查看您的class编译的是哪个版本。然后与Java JVM版本进行比较。
来自 Open Shift 网站:
OpenShift uses JBoss EWS 1.0 and 2.0 for Tomcat 6 and 7 respectively. EWS is a hardened and Red Hat supported version of Apache Tomcat. Both versions use Java OpenJDK 1.7.
因此,使用 Java 6 或 7 编译您的项目应该可以解决您的问题
由于您是使用 Gradle 构建的,请尝试将 JAVA_HOME 设置为 1.6 并构建和部署。