使用struts2中的Action类连接到couchDb

使用struts2中的Action类连接到couchDb,struts2,couchdb,Struts2,Couchdb,我正在尝试使用struts2和Coach Db作为数据库来创建一个简单的登录页面。我已经编写了一个代码来检查用户输入的值与数据库中的值。我通过创建一个简单的java类并检索成功的文档,尝试首先连接到数据库。但当我在Action类中放入相同的代码时,它给出了一个异常。 调试显示,它在我调用“Session”对象的行中出现异常。 下面给出了我的代码片段和堆栈跟踪 package net.sarah.struts2; import java.util.List; import com.fours

我正在尝试使用struts2和Coach Db作为数据库来创建一个简单的登录页面。我已经编写了一个代码来检查用户输入的值与数据库中的值。我通过创建一个简单的java类并检索成功的文档,尝试首先连接到数据库。但当我在Action类中放入相同的代码时,它给出了一个异常。 调试显示,它在我调用“Session”对象的行中出现异常。 下面给出了我的代码片段和堆栈跟踪

package net.sarah.struts2;


import java.util.List;

import com.fourspaces.couchdb.Database;
import com.fourspaces.couchdb.Document;
import com.fourspaces.couchdb.Session;
import com.fourspaces.couchdb.ViewResults;


public class LoginAction {

private String username;
private String password;
public final String LOGIN_ID ="loginid";
public final String LOGIN_PWD ="passwd";

public String execute() {

    try{

    Session dbSession = new Session("localhost", 5984);
    String dbname = "hello-world";
    List <String> listofdb = dbSession.getDatabaseNames();
    System.out.println(listofdb);
    Database db = dbSession.getDatabase(dbname);

    ViewResults results = db.getAllDocuments();
//  System.out.println(results.toString());

    List<Document> studentDocuments = results.getResults();

    for(Document couchDocument: studentDocuments){

        String id = couchDocument.getJSONObject().getString("id");
        Document studentRow = db.getDocument(id);
        System.out.println(studentRow.get("_id"));
        if(studentRow.containsKey(LOGIN_ID)){
            if(LOGIN_ID.equals(username) && LOGIN_PWD.equals(password))

                return "success";

            else
                return "error";


        }
    }
    }
    catch(Exception e)
    {

        e.getCause();
    }
    return "result";
}
package net.sarah.struts2;
导入java.util.List;
导入com.fourspaces.couchdb.Database;
导入com.fourspaces.couchdb.Document;
导入com.fourspaces.couchdb.Session;
导入com.fourspaces.couchdb.ViewResults;
公共类登录{
私有字符串用户名;
私有字符串密码;
公共最终字符串LOGIN\u ID=“loginid”;
公共最终字符串LOGIN_PWD=“passwd”;
公共字符串execute(){
试一试{
Session dbSession=新会话(“localhost”,5984);
字符串dbname=“hello world”;
List listofdb=dbSession.getDatabaseNames();
System.out.println(listofdb);
Database db=dbSession.getDatabase(dbname);
ViewResults=db.getAllDocuments();
//System.out.println(results.toString());
List studentDocuments=results.getResults();
用于(文档couchDocument:studentDocuments){
字符串id=couchDocument.getJSONObject().getString(“id”);
Document studentRow=db.getDocument(id);
System.out.println(studentRow.get(“_id”);
if(studentRow.containsKey(登录ID)){
if(登录ID等于(用户名)和登录密码等于(密码))
返回“成功”;
其他的
返回“错误”;
}
}
}
捕获(例外e)
{
e、 getCause();
}
返回“结果”;
}
堆栈跟踪-

信息:检测到AnnotationActionValidatorManager,正在初始化它。。。 2014年11月25日上午10:55:03 org.apache.catalina.core.StandardWrapper 严重:路径为[/Demo]的上下文中Servlet[default]的Servlet.service()引发了具有根本原因的异常[java.lang.reflect.InvocationTargetException] java.lang.ClassNotFoundException:com.fourspaces.couchdb.Session 位于org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714) 位于org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559) 位于net.sarah.struts2.LoginAction.execute(LoginAction.java:23) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 位于sun.reflect.NativeMethodAccessorImpl.invoke(未知源) 在sun.reflect.DelegatingMethodAccessorImpl.invoke处(未知源) 位于java.lang.reflect.Method.invoke(未知源) 在com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:404) 位于com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:267) 位于com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:229) 在com.opensymphony.xwork2.intercept.DefaultWorkflowIntercept.doIntercept(DefaultWorkflowIntercept.java:221) 在com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) 在com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling上(DefaultActionInvocation.java:224) 在com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling上(DefaultActionInvocation.java:223) 位于com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) 位于com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) 位于com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:150) 位于org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:48) 在com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) 在com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling上(DefaultActionInvocation.java:224) 在com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling上(DefaultActionInvocation.java:223) 位于com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) 位于com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) 在com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:123) 在com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling上(DefaultActionInvocation.java:224) 在com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling上(DefaultActionInvocation.java:223) 位于com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) 位于com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) 在com.opensymphony.xwork2.interceptor.parameters-sinterceptor.doIntercept(parameters-sinterceptor.java:184) 在com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) 在com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling上(DefaultActionInvocation.java:224) 在com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling上(DefaultActionInvocation.java:223) 位于com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) 位于com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) 在com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept上(StaticParametersInterceptor.java:105) 在com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling上(DefaultActionInvocation.java:224)
在com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)

确保您在
web inf/lib
中有所有必需的库

Th