2012-07-15 95 views
0

我尝试了一个java程序,它需要一个unix服务器中另一个路径中的jar文件。 我想要这个jar被使用,当我需要程序,因为我使用servelet来调用这个程序。 当我编译程序,包括jar如java -cp。; *。jar myProgram,它的工作原理。 但是,当我从一个servlet调用下面的函数时,该jar没有被包含,因此得到错误。 请指教。 当我从我的eclipse项目中进行尝试时,其中包含了该jar,这与它相同。java使用外部罐子

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

你不能使用任何像eclipse这样的IDE? – Elbek 2012-07-15 05:40:03

+0

你有什么CLASSPATH设置? – stark 2012-07-15 05:41:07

+0

我使用eclipse作为开始,当我单独运行程序时,我完成了它。但是当我通过我的servlet调用时,出现错误“无法加载sybase驱动程序”。 。 – crazypaladin 2012-07-15 05:41:50

回答

3

我认为有一些与环境有关的概念存在误解,以及为什么会出现这样的错误。

当你像'java -cp'那样运行'通常'的java程序时,你自己明确地定义了哪些jar应该放在类路径中。 当您运行servlet时,情况并非如此。 Servlet不能直接由java运行(如果你愿意,它们没有方法'main')。

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

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

建议上面的工具,如maven或蚂蚁 - 只是处理建立你的应用程序的过程,可以'把'你的罐子放在正确的位置,但海事组织你应该仍然明白什么去哪里,什么是每个组件/工具的责任。

好吧,那么这些地方应该储存罐子。 不止一个这样的地方,你应该明白将这个罐子放在每个地方会有什么后果。 最简单的解决方案是将您的servlet包装在WAR文件中(或者甚至将其保留为预定义布局中的目录)。 WAR(Web Application Archive)是一个包含所有servlet和jar的文件/目录。 由于所有Web容器都应该理解WAR的布局,因此可以将JAR放入WAR文件中的WEB-INF/lib文件夹中。我相信你应该去做这个选择。

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

我希望这使事情更清晰:)祝你好运!

1

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