使用外部jar的java

使用外部jar的java,java,servlets,Java,Servlets,我尝试了一个java程序,它需要unix服务器中另一个路径中的jar文件。 当我需要这个程序时,我想使用这个jar,就像我使用servelet调用这个程序一样。 当我编译程序时,包括类似jar的java-cp;*。jar我的程序,它工作。 但是当我从servlet调用下面的函数时,jar没有被包含,因此出现了错误。 请告知。 当我从包含jar的eclipse项目中尝试时也是如此 void doBless(int i,String Envs) { String url = "jdbc:sy

我尝试了一个java程序,它需要unix服务器中另一个路径中的jar文件。 当我需要这个程序时,我想使用这个jar,就像我使用servelet调用这个程序一样。 当我编译程序时,包括类似jar的java-cp;*。jar我的程序,它工作。 但是当我从servlet调用下面的函数时,jar没有被包含,因此出现了错误。 请告知。 当我从包含jar的eclipse项目中尝试时也是如此

void doBless(int i,String Envs) {
    String url = "jdbc:sybase:Tds:ramu-sys:5000/".concat(Envs);
    connection b=new connection();
    System.out.println(url);
    String queryString;
    String temp;
    try {
      Class.forName("com.sybase.jdbcx.SybDriver");
    }
    catch( Exception e ) {
      System.out.println("Failed to load sybase driver.");
      return;
    }

    try {

      ResultSet myResultSet =null;

          Connection con = DriverManager.getConnection(url, "sa", "");
      Statement select = con.createStatement();

      temp="insert into Persons (P_Id,FirstName,LastName,Address,City) values (" +i+",'" + blessArray.get(i)+ "','"+ blessArray.get(i)+ "','"+ blessArray.get(i)+ "','"+ blessArray.get(i)+ "')";
      System.out.println(temp);

       select.executeQuery(temp); 

       select.close();
       con.close();


    }
    catch( Exception e ) {
      e.printStackTrace();
    }
}

我认为对一些与环境相关的概念存在误解,这就是为什么会出现这样的错误

当您运行“普通”java程序时,正如您在“java-cp”中所说的,您可以自己明确地定义类路径中应该包含哪些JAR。 当您运行servlet时,情况并非如此。servlet不能直接由java运行(如果需要,它们没有“main”方法)

相反,它们被设计为在另一个基于java的应用程序(称为容器)中运行。在部署方面,您将servlet编译成一个类文件,将其放入特殊目录并运行容器

容器应用程序读取目录中的文件,识别servlet并创建其实例。换句话说,它为您管理servlet。 现在,为了在运行时识别类,容器使用它们的自定义类加载器,因此您必须部署服务器依赖的jar,以确保这些类加载器能够正确地从这些jar加载类

建议使用上述工具,如maven或ant——只需处理构建应用程序的过程,就可以将jar“放”在正确的位置,但在我看来,您仍然应该了解每个组件/工具的作用和职责

好的,那么,罐子应该放在什么地方呢。 有不止一个这样的地方,你应该明白把罐子放在每个地方的后果是什么。 最简单的解决方案是将servlet包装在WAR文件中(甚至将其保留为预定义布局中的目录)。 WAR(Web应用程序归档)是一个包含所有servlet和jar的文件/目录。 由于所有web容器都应该理解WAR的布局,所以可以将JAR放在WAR文件中的web-INF/lib文件夹中。我认为你应该选择这个选项

另一种选择是将jar放在容器本身所需的jar所在的目录中。这是不太可取的,但有时需要


我希望这能让事情更清楚:)祝你好运

我认为对一些与环境相关的概念存在误解,这就是为什么会出现这样的错误

当您运行“普通”java程序时,正如您在“java-cp”中所说的,您可以自己明确地定义类路径中应该包含哪些JAR。 当您运行servlet时,情况并非如此。servlet不能直接由java运行(如果需要,它们没有“main”方法)

相反,它们被设计为在另一个基于java的应用程序(称为容器)中运行。在部署方面,您将servlet编译成一个类文件,将其放入特殊目录并运行容器

容器应用程序读取目录中的文件,识别servlet并创建其实例。换句话说,它为您管理servlet。 现在,为了在运行时识别类,容器使用它们的自定义类加载器,因此您必须部署服务器依赖的jar,以确保这些类加载器能够正确地从这些jar加载类

建议使用上述工具,如maven或ant——只需处理构建应用程序的过程,就可以将jar“放”在正确的位置,但在我看来,您仍然应该了解每个组件/工具的作用和职责

好的,那么,罐子应该放在什么地方呢。 有不止一个这样的地方,你应该明白把罐子放在每个地方的后果是什么。 最简单的解决方案是将servlet包装在WAR文件中(甚至将其保留为预定义布局中的目录)。 WAR(Web应用程序归档)是一个包含所有servlet和jar的文件/目录。 由于所有web容器都应该理解WAR的布局,所以可以将JAR放在WAR文件中的web-INF/lib文件夹中。我认为你应该选择这个选项

另一种选择是将jar放在容器本身所需的jar所在的目录中。这是不太可取的,但有时需要


我希望这能让事情更清楚:)祝你好运

使用构建工具并确保jar包含在WEB-INF/lib中。或者将它放在servlet容器的类路径上(通常是servlet容器的lib文件夹)。

使用构建工具,确保jar包含在WEB-INF/lib中。或者将其放在servlet容器的类路径(通常是servlet容器的lib文件夹)上。

u不能使用任何像eclipse这样的IDE?您的类路径设置为什么?我使用eclipse作为开始,当我单独运行程序时,我就完成了。但是当我通过servlet调用时,我得到错误“加载sybase驱动程序失败”。您是否尝试过使用jar依赖项来构建项目?您也可以尝试
ApacheAnt
?您不能使用任何像eclipse这样的IDE?您将CLASSPATH设置为什么?我使用eclipse作为开始,当我单独运行程序时,我就完成了。但是当我通过servlet调用时,我得到了错误“加载sybase驱动程序失败”。您是否尝试使用来构建项目中不需要包含在项目中的jar依赖项?您也可以尝试
Apache Ant