2015-05-04 98 views
2

对不起,我已经通过在主类中使用方法创建类来尝试这种方法,但它在jsp页面中显示此错误;查看JSP页面中的Java类

java.lang.UnsatisfiedLinkError: org.hyperic.sigar.Sigar.getCpuInfoList()[Lorg/hyperic/sigar/CpuInfo;

我不知道,如果从代码或SIGAR API库再次抱歉,但我需要帮助得到这个JSP右

package mydata; 
 

 
import org.hyperic.sigar.CpuInfo; 
 
import org.hyperic.sigar.Sigar; 
 
import org.hyperic.sigar.SigarException; 
 

 
public class MyCpu { 
 
private String cpuInfoList; 
 

 
public String getCpuInfoList() { 
 
\t return this.cpuInfoList; 
 
} 
 

 
public MyCpu() { 
 
\t Sigar sigar = new Sigar(); 
 
\t String output = " "; 
 
\t CpuInfo[] cpuInfoList = null; 
 
\t try { 
 

 
\t \t cpuInfoList = sigar.getCpuInfoList(); 
 
\t } catch (SigarException e) { 
 
\t \t e.printStackTrace(); 
 
\t \t return; 
 
\t } 
 
\t for (CpuInfo info : cpuInfoList) { 
 
\t \t output += "Vendor: " + info.getVendor() + ""; 
 
\t } 
 
\t System.out.println(output); 
 
} 
 

 
public static void main(String[] args) { 
 
\t MyCpu main = new MyCpu(); 
 
} 
 
} 
 

 
-------------------------------------------------------------------------------------- 
 
    <!---JSP---> 
 
    
 
    <%@page import ="org.hyperic.sigar.Sigar"%> 
 
<%@page contentType="text/html" pageEncoding="UTF-8"%> 
 

 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
 
    "http://www.w3.org/TR/html4/loose.dtd"> 
 

 
<html> 
 
    <head> 
 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
 
     <title>JSP Page</title> 
 
    </head> 
 
    <body> 
 
     <h1>Hello World!</h1> 
 
     <%@page import="mydata.*"%> 
 
     <% 
 
    MyCpu cpu = new MyCpu(); 
 
    Sigar sigar = new Sigar(); 
 
    out.println(sigar.getCpuInfoList()); 
 
%> 
 
    </body> 
 
</html>

+0

这看起来像'getCpuInfoList()'方法中的错误。你能发布完整的堆栈跟踪吗?我怀疑类路径上缺少一个库,因此这个异常应该在'MyCpu cpu = new MyCpu()'这一行中抛出:' – Thomas

+0

这就是所有的代码,我已经下载了Sigar库并添加到JRE文件夹中,现在我可以运行它作为Java应用程序确定,但我不能从JSP运行。谢谢Thomas – Sadigain

+0

输出应该是= Vendor +“CPU供应商名称” – Sadigain

回答

0

您可以调用Java代码在使用scriplet的JSP中,但在jsp中使用scriplet而不是使用JSTL是不好的做法。让我们继续前进创建一个类如下面提到

public class Demo { 
    public String output = ""; 

    public Demo() { 
     CpuInfo[] cpuInfoList = null; 
     try { 
      cpuInfoList = new Sigar().getCpuInfoList(); 
     } catch (SigarException e) { 
      e.printStackTrace(); 
     } 
     for (CpuInfo info : cpuInfoList) { 
      output += info.getVendor() + "\n"; 
     } 
     System.out.println(output); 
    } 

    public static void main(String[] args) { 
     new Demo(); 
    } 
} 

更改你的JSP代码如下

<%@page import="com.Demo"%> 

<!DOCTYPE HTML"> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>JSP Page</title> 
    </head> 
    <body> 
     <% 
      out.println(new Demo().output); 
     %> 
    </body> 
</html> 

并添加此Web应用程序中的MANIFEST.MF类路径的-Djava.library.path="./lib"所以最后MENIFEST.MF样子:

Manifest-Version: 1.0 
Class-Path: -Djava.library.path="./lib" 

而且当然在位于WEB_INF的lib文件夹中添加sigar.jar

编辑:

你应该看到某种提示以下错误:在您的服务器日志:

Info: 5 [http-listener-1(5)] DEBUG Sigar - no sigar-amd64-winnt.dll in java.library.path 
org.hyperic.sigar.SigarException: no sigar-amd64-winnt.dll in java.library.path 

所以,你必须在lib文件夹中提供sigar-amd64-winnt.dll为好。

Lib

而现在你会看到输出如下

output

+0

谢谢你Naman的帮助我会尽力并回复你 – Sadigain

+0

查看答案中的更新。 – Naman

+0

它工作的同伴,但也忽略了主类,这个数据,你可以看到没有从类中调用,它从类库中导入,如果我是正确的。 – Sadigain