`
king_tt
  • 浏览: 2229332 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Jsp中调用DLL(使用JNI)

 
阅读更多

jsp调用jni方法

注:本文介绍Jsp中调用Dll动态链接库文件的方法,摘编自CSDN 炼狱的专栏
我的环境:
--------
1. java编译器:eclipse 3.0.2
2. web服务器: tomcat 4.1.24
3. C编译器: VC6.0
4. 操作系统: win2k
5. java源文件目录: d:/study/src
6. java编译后的class文件目录: d:/study/bin
7. tomcat目录: d:/tomcat41


1.编写java文件:
//Util.java
package com.jni;

public class Util
{
public native static int add( int x, int y );

static
{
System.loadLibrary( "Util" );
}
}

编译这个文件,生成Util.class文件.

2.生成对应的头文件:
打开一个dos窗口,进入存放class文件的目录:
d:/>cd d:/study/bin
d:/study/bin/>javah com.jni.Util

这样,会在d:/study/bin目录下生成com_jni_Util.h文件.

3. 编写c文件:
在VC6.0中:File->New->Projects->Win32 Dynamic-link Library,Project name 为Util, 创建一个empty DLL project.
把2所生成的com_jni_Util.h文件和C:/j2sdk1.4.2/include目录下的jni.h, C:/j2sdk1.4.2/include/win32目录下的jni_md.h复制到Util工程目录下.
(C:/j2sdk1.4.2为我的jsdk的安装路径).

在Util工程中创建一个c源文件,名为Util.c.
//Util.c
#include "com_jni_Util.h"

JNIEXPORT jint JNICALL Java_com_jni_Util_add
(JNIEnv *env, jclass jc, jint x, jint y)
{
return x+y;
}

4. 生成Util.dll:
编译3中的Util.c文件后,会生成Util.dll文件.

5. 生成jar包:
把Util.class文件打成jar包,名为myutil.jar.

6. 编写jsp文件:
//test.jsp
<%@ page import="com.jni.Util" %>

<html>
<head></head>

<body>
<h3>5+7=<%=Util.add( 5, 7 )%></h3>
</body>
</html>

7. 把myutil.jar包复制到d:/tomcat41/common/lib目录下;
把Util.dll文件复制到d:/tomcat41/bin目录下(也可以是环境变量path的所设定的任何一个目录下);
把test.jsp复制到d:/tomcat41/webapp/test目录下.

8. 启动tomcat.

9. 在ie中输入: http://localhost:8080/test/test.jsp.
如果你能看到: 5+7=12 就成功了.
================================================
以下为网友回复:
#javalover发表于2006-12-01 17:57:00IP: 222.66.100.*
这篇文章太好,我现在有了一个已经生成好的dll文件。在本地调用都没有问题,但是我想在jsp页面中来获得dll文件执行的结果。我现在应该怎么做哪?
我按照你讲的来做,把.class打包,放在tomacat的lib下,dll放在bin下。但是出现了一下的问题
2006-12-1 17:53:26 org.apache.jasper.compiler.Compiler generateClass
严重: Error compiling file: /C:/Tomcat 5.0/work/Catalina/localhost/test//org/apache/jsp/sysinfo_jsp.java [javac] Compiling 1 source file

C:/Tomcat 5.0/work/Catalina/localhost/test/org/apache/jsp/sysinfo_jsp.java:57: cannot resolve symbol
symbol : class PerfInfoReader
location: class org.apache.jsp.sysinfo_jsp
PerfInfoReader test = new PerfInfoReader();
^
C:/Tomcat 5.0/work/Catalina/localhost/test/org/apache/jsp/sysinfo_jsp.java:57: cannot resolve symbol
symbol : class PerfInfoReader
location: class org.apache.jsp.sysinfo_jsp
PerfInfoReader test = new PerfInfoReader();
^
C:/Tomcat 5.0/work/Catalina/localhost/test/org/apache/jsp/sysinfo_jsp.java:58: cannot resolve symbol
symbol : variable PerfInfoReader
location: class org.apache.jsp.sysinfo_jsp
double o = test.getPerfInfo(PerfInfoReader.CPUUSAGE);
^
3 errors
能告诉我如何做吗?我现在有了dll文件,也可以在本地来调用。如何在jsp中调用哪。
#javalover发表于2006-12-02 21:22:00IP: 222.66.100.*
我测试了一下:
在tomacat下可以正常的调用JNI,在JBOSS下就不可以了,
有没有人知道在JBOSS下如何解决这个问题啊,
21:20:33,531 ERROR [Engine] StandardWrapperValve[jsp]: Servlet.service() for servlet jsp threw exception
java.lang.UnsatisfiedLinkError: getPerfInfo
at com.star.sam.sysmonitor.sysperfmonitor.PerfInfoReader.getPerfInfo(Native Method)
at com.star.sam.sysmonitor.sysperfmonitor.SysPerformaceSampling.getCPU(SysPerformaceSampling.java:22) at com.star.sam.system.SystemUtil.getCurrentCPU(SystemUtil.java:61)
at org.apache.jsp.sammas.sysinfo_jsp._jspService(sysinfo_jsp.java:234)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:75)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.jboss.web.tomcat.security.CustomPrincipalValve.invoke(CustomPrincipalValve.java:66)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:162)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:534)
分享到:
评论

相关推荐

    使用JNI,vs2010 生成dll, JSP中调用dll

    在Java编程中,有时我们需要利用本地库(Native Libraries)的功能,这时JNI(Java ...通过以上步骤,我们就成功地在JSP中使用了由Visual Studio 2010生成的JNI DLL。这在需要结合Java和本地库功能的场景中非常有用。

    jsp+调用控件dll

    在Java中,调用DLL主要依赖于Java的JNI(Java Native Interface)或者第三方库如JNA(Java Native Access)。 1. **JNI调用DLL**: JNI是Java平台的标准部分,允许Java代码和其他语言写的代码进行交互。使用JNI,...

    jni_java_dll_jsp.zip_Java调用dll_applet_java Applet_java dll jsp_j

    总结,"jni_java_dll_jsp.zip"包含的资源提供了关于如何在Java中使用JNI调用DLL,特别是在Applet环境下如何安全地访问本地资源的解决方案。这对于需要结合Java Web应用和本地系统功能的开发者来说,是一份非常有价值...

    JNI技术小结

    http://blog.csdn.net/zddmail/article/details/8661095同名博客源码文档 资源包括Java 通过JNI调用DLL,返回ArrayList. Jsp 通过JNI调用DLL. JNI资源传递

    JSP利用JNI获取硬盘序列号等信息

    本文将详细讲解如何通过JNI在JSP中获取硬盘序列号。 首先,理解JNI的概念是至关重要的。JNI是Java平台提供的一种机制,允许Java代码和其他语言写的代码进行交互。通过JNI,Java应用程序可以调用C/C++编写的库,反之...

    jbarcode+Jnative读取本地第三方的dll文件+得力+斑马打印机使用javaAPI打印 demo

    这个项目“jbarcode+Jnative读取本地第三方的dll文件+得力+斑马打印机使用javaAPI打印 demo”提供了一个解决方案,它结合了几个关键的技术点,使得在Java环境中实现对特定打印机,如得力和斑马打印机的打印功能成为...

    jni资料整理

    - 字符串的传递:Java的字符串在JNI中表现为`jstring`,可以使用`GetStringUTFChars`获取UTF-8编码的字符数组,或`NewStringUTF`创建新的UTF-8字符串。 3. **异常处理**: - 在Java和C/C++之间的交互中,Java的...

    tcnative-1.dll

    tcnative-1.dll是Apache Tomcat服务器中一个重要的动态链接库文件,主要用于提供对Java Native Interface (JNI)的支持。JNI是Java平台的标准部分,允许Java代码和其他语言写的代码进行交互,尤其是在性能敏感的应用...

    Tomcat tcnative-1.dll 完全解决方案

    在IT行业中,Tomcat是一款广泛使用的开源Java应用服务器,它主要负责运行基于Servlet和JSP的应用程序。在某些情况下,为了提升性能或者启用特定功能,如HTTP/2、TLS优化等,Tomcat需要与本地操作系统进行更深入的...

    tcnative-1-x64.dll

    该库实现了OpenSSL库的JNI(Java Native Interface)接口,使得Java代码能够直接调用OpenSSL库进行加密和安全通信。JNI是一种标准编程接口,允许Java代码和其他语言编写的代码进行交互,例如C++或C。在Tomcat中,这...

    tcnative-1.dll插件

    综上所述,tcnative-1.dll是Tomcat为了提升性能和功能而引入的关键组件,通过JNI调用底层操作系统功能,尤其在SSL处理和系统集成方面有着显著优势。在实际使用中,需要根据具体需求和系统环境合理配置和使用。

    jsp.rar_Java嵌入式_嵌入式jsp

    5. **C与Java交互**: JNI(Java Native Interface)的使用,允许Java代码调用C/C++库,这对于在嵌入式系统中集成C语言编写的底层模块至关重要。 6. **内存管理与优化**: 在资源有限的嵌入式环境中,如何有效地管理...

    加密狗软件加密例子bcb,VC,c#,jsp,delphi

    在BCB中使用加密狗,首先需要引入相应的驱动库,比如SafeNet或Aladdin等公司的API。然后,开发者可以调用这些库提供的函数来检测加密狗的存在、读取/写入密钥、执行加密操作等。关键在于编写合适的代码逻辑,确保...

    将word文档嵌入到jsp页面的详细步骤

    // 将HTML文件内容加载到JSP页面中,例如使用iframe } else { // 处理转换失败的情况 } ``` 5. **页面展示** 生成HTML文件后,可以通过`iframe`或其他HTML元素在JSP页面中嵌入HTML内容。确保文件路径正确,...

    tcnative-1.dll文件

    tcnative-1.dll就是通过JNI接口来调用C或C++编写的本机代码,从而在Tomcat中启用特定的功能,比如加速SSL/TLS处理。 3. **SSL/TLS支持**: tcnative-1.dll提供了对SSL(Secure Socket Layer)和TLS(Transport ...

    tcnative-1.dll多个版本(12-27)

    tcnative-1.dll是Tomcat服务器中的一个关键组件,它是一个本地库,主要负责提供Apache Tomcat与Java Native Interface (JNI)之间的接口。这个库在Java应用服务器中扮演着重要角色,尤其是对于处理SSL/TLS连接时,它...

    j2ee实现开关windows服务

    你需要创建一个MBean,该MBean封装了调用Windows API(如`Advapi32.dll`中的`CreateService`和`ControlService`函数)的逻辑。然后,通过JMX注册这个MBean,并暴露启停服务的方法。 2. **使用JNI(Java Native ...

    CVR-100U二次开发,vb例子+源码

    首先,我们需要理解VB中调用DLL的基本步骤: 1. 引入库:在VB工程中,添加对CVR-100U SDK的引用,这通常涉及到在代码中声明外部函数,以便VB知道如何与DLL交互。 2. 函数定义:根据DLL提供的接口文档,定义每个函数...

    word源码java-jniwebshell:jniwebshel​​l

    java技术栈中的jni的原理是使用java调用c、c++函数,具体实现的思路是jsp编译为class文件,该class通过jni技术调用另外一处dll来执行命令函数绕过黑名单执行命令获取回显,即可实现rasp和安全防护软件的绕过。...

Global site tag (gtag.js) - Google Analytics