一旦我使用监听器类

时间:2016-02-15 21:05:16

标签: sqlite tomcat ormlite servletcontextlistener

给出错误:

  

信息:开始服务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;
    }
 }

2 个答案:

答案 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后,解决了未找到类的异常。这不是最佳解决方案。但是现在它对我有用。