给出错误:
信息:开始服务Catalina 2016年2月15日下午2:23:09 org.apache.catalina.core.StandardEngine startInternal INFO:正在启动 Servlet引擎:Apache Tomcat / 8.0.23 2016年2月15日下午2:23:09 org.apache.catalina.util.SessionIdGeneratorBase createSecureRandom 信息:为会话ID生成创建SecureRandom实例 使用[SHA1PRNG]花了[116]毫秒。 2016年2月15日下午2:23:09 org.apache.catalina.core.ContainerBase startInternal SEVERE:一个孩子 启动时容器失败java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException:无法启动组件 [StandardEngine [卡塔利娜] .StandardHost [本地主机] .StandardContext [/故事板]] 在java.util.concurrent.FutureTask.report(FutureTask.java:122)at java.util.concurrent.FutureTask.get(FutureTask.java:192)at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:917) 在 org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:871) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 在 org.apache.catalina.core.ContainerBase $ StartChild.call(ContainerBase.java:1409) 在 org.apache.catalina.core.ContainerBase $ StartChild.call(ContainerBase.java:1399) 在java.util.concurrent.FutureTask.run(FutureTask.java:266)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:617) 在java.lang.Thread.run(Thread.java:745)引起: org.apache.catalina.LifecycleException:无法启动组件 [StandardEngine [卡塔利娜] .StandardHost [本地主机] .StandardContext [/故事板]] 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154) ... 6更多引起:java.lang.NoClassDefFoundError: com / j256 / ormlite / support / ConnectionSource at java.lang.Class.getDeclaredFields0(Native Method)at java.lang.Class.privateGetDeclaredFields(Class.java:2575)at at java.lang.Class.getDeclaredFields(Class.java:1908)at org.apache.catalina.util.Introspection.getDeclaredFields(Introspection.java:106) 在 org.apache.catalina.startup.WebAnnotationSet.loadFieldsAnnotation(WebAnnotationSet.java:256) 在 org.apache.catalina.startup.WebAnnotationSet.loadApplicationListenerAnnotations(WebAnnotationSet.java:86) 在 org.apache.catalina.startup.WebAnnotationSet.loadApplicationAnnotations(WebAnnotationSet.java:63) 在 org.apache.catalina.startup.ContextConfig.applicationAnnotationsConfig(ContextConfig.java:334) 在 org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:774) 在 org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:305) 在 org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117) 在 org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90) 在 org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5066) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) ... 6更多引起:java.lang.ClassNotFoundException: com.j256.ormlite.support.ConnectionSource at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1305) 在 org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1157) ......还有20个
Web.xml中
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
<servlet>
<servlet-name>UploadImage</servlet-name>
<servlet-class>com.home.storyboard.UploadServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>UploadCanvas</servlet-name>
<servlet-class>com.home.storyboard.UploadCanvas</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UploadImage</servlet-name>
<url-pattern>/uploadimage</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>UploadCanvas</servlet-name>
<url-pattern>/uploadcanvas</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>StoryServlet</servlet-name>
<servlet-class>com.home.storyboard.StoryServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>StoryServlet</servlet-name>
<url-pattern>/StoryServlet</url-pattern>
</servlet-mapping>
<listener>
<description>ServletContextListener</description>
<listener-class>com.home.storyboard.StartupListener</listener-class>
</listener>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
StartupListener
package com.home.storyboard;
import com.j256.ormlite.support.ConnectionSource;
import com.j256.ormlite.jdbc.JdbcConnectionSource;
import java.sql.SQLException;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import com.home.storyboard.DAOdb;
public class StartupListener implements ServletContextListener{
private final static String DATABASE_URL = "jdbc:sqlite:testdb.db";
ConnectionSource connectionSource = null;
@Override
public void contextInitialized(ServletContextEvent sce) {
try {
// create our data-source for the database
connectionSource = new JdbcConnectionSource(DATABASE_URL);
DAOdb db = new DAOdb(connectionSource);
sce.getServletContext().setAttribute("db", db);
}catch(SQLException e){
System.out.println(e.getMessage());
}
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
// destroy the data source which should close underlying connections
DAOdb db = (DAOdb)sce.getServletContext().getAttribute("db");
db.close();
}
}
DAOdb类
package com.home.storyboard;
import java.sql.SQLException;
import java.util.List;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.dao.DaoManager;
import com.j256.ormlite.dao.GenericRawResults;
import com.j256.ormlite.table.TableUtils;
import com.j256.ormlite.support.ConnectionSource;
public class DAOdb {
// we are using the in-memory H2 database
private final ConnectionSource connectionSource;
private Dao<User, Integer> userDAO;
private Dao<Profile,Integer> profileDAO;
private Dao<Story, Integer> storyDAO;
private String lastError;
public DAOdb(ConnectionSource connectionSource){
this.connectionSource=connectionSource;
try{
userDAO = DaoManager.createDao(connectionSource, User.class);
TableUtils.createTable(connectionSource, User.class);
profileDAO = DaoManager.createDao(connectionSource, Profile.class);
TableUtils.createTable(connectionSource, Profile.class);
storyDAO = DaoManager.createDao(connectionSource, Story.class);
TableUtils.createTable(connectionSource, Story.class);
}catch(SQLException e){
lastError = e.getMessage().toString();
}
}
/**
* DAO Functions to fetch data
*/
public void addStory(Story S) {
try{
storyDAO.create(S);
lastError = null;
} catch (Exception e) {
lastError = e.getMessage().toString();
}
}
public List<Story> getStoriesbyUsername(String username) {
String uname =username;
List<Story> storyList = null;
User user = getUserbyUsername(uname);
Integer uid =user.getId();
try{
GenericRawResults<String[]> stories = storyDAO.queryRaw(
"select count(*) from stories where userid = uid");
// there should be 1 result
List<String[]> results = stories.getResults();
// the results array should have 1 value
Integer usercount = results.size();
// this should print the number of orders that have this account-id
if(usercount<=0){
lastError="'No story exists by username'+' '+ username";
}else{
storyList = storyDAO.queryBuilder()
.where()
.eq(Story.USERID_FIELD_NAME, uid)
.query();
}
}catch(SQLException e){
lastError = e.getMessage().toString();
}
return storyList;
}
}
答案 0 :(得分:0)
你的问题太长而且涉及很多。其中重要的部分是由异常引起的:
java.lang.ClassNotFoundException:com.j256.ormlite.support.ConnectionSource at ...
由于某种原因,您的应用程序没有ConnectionSource
类。也许你不包括ORMLite JDBC和核心jar?请务必按照getting started documentation进行讨论:
通过JDBC连接连接到SQL数据库的用户需要下载ormlite-jdbc-4.48.jar和ormlite-core-4.48.jar文件。要与Android应用程序一起使用,您应该下载ormlite-android-4.48.jar和ormlite-core-4.48.jar文件。对于JDBC或Android,您还需要具有ORMLite后端实现的ormlite-core发行版。
如果您正在使用战争,请找到jar位置并确保两个ORMLite罐都在那里。如果您已经在应用程序中拥有核心,那么我不确定出现了什么问题。
希望这有帮助。
答案 1 :(得分:0)
在Java JRE的lib / ext文件夹中上载Ormlite核心和Ormlite jdbc jar后,解决了未找到类的异常。这不是最佳解决方案。但是现在它对我有用。