使用外部jar的java

时间:2012-07-15 05:35:54

标签: java servlets

我尝试了一个java程序,它在unix服务器的另一个路径中需要一个jar文件。 我希望在我需要程序时使用这个jar,因为我使用servlet来调用这个程序。 当我编译程序包括像java -cp。; *。jar myProgram这样的jar时,它可以工作。 但是当我从servlet调用下面的函数时,jar没有被包含,所以得到错误。 请指教。 当我在我的eclipse项目中尝试包含jar时,它也一样。

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();
    }
}

2 个答案:

答案 0 :(得分:3)

我认为对某些与环境相关的概念存在误解,以及为什么会出现这种错误的原因。

当您运行'常规'java程序时,正如您在'java -cp'中所述,您自己明确定义了哪些jar应该在类路径中。 当您运行servlet时,情况并非如此。 Servlet不能直接由java运行(如果需要,它们没有方法'main')。

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

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

建议上面的工具,如maven或ant - 只需处理构建应用程序的过程,并可以将你的jar放到正确的位置,但IMO你仍然应该了解每个组件/工具的位置和责任。

好的,那些罐子应该存放在哪些地方。 这个地方不止一个,您应该了解将罐子放在每个地方的后果。 最简单的解决方案是将您的servlet包装在WAR文件中(甚至将其保留为预定义布局中的目录)。 WAR(Web应用程序存档)是一个文件/目录,其中包含所有servlet和jar。 由于所有Web容器都应该理解WAR的布局,因此您可以将JAR放在WAR文件中的WEB-INF / lib文件夹中。我相信你应该选择这个选择。

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

我希望这会让事情变得更清楚:)祝你好运!

答案 1 :(得分:1)

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