社区
非技术区
帖子详情
有谁用过jsp调用本地接口的,请到这里来
Karnak
2002-03-05 10:48:33
我用jsp调用jni时,出现这种错误提示:
java.lang.UnsatisfiedLinkError:
请问是怎么产生的?
...全文
142
23
打赏
收藏
有谁用过jsp调用本地接口的,请到这里来
我用jsp调用jni时,出现这种错误提示: java.lang.UnsatisfiedLinkError: 请问是怎么产生的?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
23 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Karnak
2002-04-30
打赏
举报
回复
我发现原因了,原来就是因为javah -jni这个冬冬不会自己添加package,需要手动添加,这样就可以了!
leonzhao
2002-03-10
打赏
举报
回复
你找不到这个类?是什么意思呢?没有这个类的源文件?
如果是这样的话,你就不能打包了,只能不打包的发布,然后使用到你的JSP众直接import classname的方式调用这个类。
Karnak
2002-03-10
打赏
举报
回复
可是我都找不到这个类啊
leonzhao
2002-03-08
打赏
举报
回复
没有,只要加了package,你一定要重新生成.h文件。
night_knight
2002-03-08
打赏
举报
回复
如果加了package,就一定要用javah com.ibm.mm.sdk.addons.KmDSG吗?有没有更简单点的方法,我原来只要javah -jni就行了,应该会有简单的写法吧!
肖尧19
2002-03-07
打赏
举报
回复
有意思~
leonzhao
2002-03-07
打赏
举报
回复
另外上面的一些大侠的说法有一些问题的:
1、Java,JSP,APPLET都是一样的,没理由这个能调用哪个就不行(APPLET会特殊一些)
2、DLL只要放在任何path路径下就可以了,不一定在system32下。
3、你说的不对,JSP也可以调用不在任何package里面的类:
import="java.io.*,
java.util.*,
KmDSG"
这样的话即使KmDSG不在任何包中也可以使用了。
leonzhao
2002-03-07
打赏
举报
回复
就是说,如果你的Java打了包,就需要重新生成一次.h文件了。
例如我上面的例子:
打包前.h里面是JNIEXPORT jstring JNICALL Java_KmDSG_cGetFileSummary
然后打包到com.ibm.mm.sdk.addons
打包后重新执行
javah com.ibm.mm.sdk.addons.KmDSG(KmDSG.class和KmDSG.java在./com/ibm/mm/sdk/addons/目录下)
然后你就拿到了新的.h文件,按照新的.h文件重新改一下你的.c程序。重新发布这个DLL就可以了(重起JVM)。
leonzhao
2002-03-06
打赏
举报
回复
哎呀,再说一遍,UnsatisfiedLinkError一定是DLL中方法的名字不对了!要不就重新编译这个DLL,要不就直接不打包,然后使用import class_name的方法直接调用这个类。
结帐!
scarab
2002-03-06
打赏
举报
回复
你把DLL放到该JAVA文件一个目录下看看呢?
leonzhao
2002-03-06
打赏
举报
回复
JNI加了Package就需要重新生成.h并更改dll的C源程序中所有的方法名,要求和.h中的完全对应上,然后再重新编译dll并重新发布,重起Web服务器。
例如:没有打包前是KmDSG.h,方法是JNIEXPORT jstring JNICALL Java_KmDSG_cGetFileSummary
打包后是com_ibm_mm_sdk_addons_KmDSG.h,方法是JNIEXPORT jstring JNICALL Java_com_ibm_mm_sdk_addons_KmDSG_cGetFileSummary
Karnak
2002-03-06
打赏
举报
回复
leonzhao(灯泡) 你这用的是什么啊,我只是很简单的
javah -jni testDll.java 而已,你的是什么这么复杂,
com_ibm_mm_sdk_addons_KmDSG这段是要手动修改吗?
Karnak
2002-03-06
打赏
举报
回复
我做了一个testDll,直接放在目录下,没有用package,调用成功了,可是给他改个名字就有出现那个错误了,动态连接库肯定找到了,我在里面加了一个catch(UnsafitiedLinkError e),我把dll移走,就抛出了异常,所以肯定找到了dll,但是不知道为什么改个名字就不行,用了好多名字,只有testDll可以,奇怪了
Karnak
2002-03-05
打赏
举报
回复
我的路径是这样的 tomcat\classes\softCert\
CLASSPATH已经指向了tomcat\classes
我的java文件加了package softCert;这样在java下执行就不能通过,
可是不加package softCert;在jsp下又不能通过,这可怎么办?
night_knight
2002-03-05
打赏
举报
回复
我在java下调用过,jsp没有试过,没碰到过这种问题,关注......
gzwrj
2002-03-05
打赏
举报
回复
定义本地方法
与其他方法相似,你必须声明要用的所有本地方法,并且必须将它们定义在一个类中。
你可将你的本地HelloWorld方法定义为如下形式:
public native void nativeHelloWorld();
这与你所写的其他public void方法比较有两个变化:
* 关键字native被用作方法修饰符。
* 方法的主体部分(实际实现部分)在这里没有定义,而是代之以一个分号(;)。
你必须把本地方法的声明放到类的定义中。含有这个本地方法的类还包含一个静态代码块,它负责装载带有该方法实现的动态库。这里是为简单的nativeHelloWorld()方法而写的类定义的一个例子:
class NativeHello {
1.public native void nativeHelloWorld();
2.static {
3.System.loadLibrary("hello1");
4.}
5.}
Java运行环境在类被装载时执行定义的static代码块。在上例中,当类NativeHello被装载时,库hello1被装入。
调用本地方法
一旦你已将本地方法放入到一个类中,就可以为该类创建对象以存取这个本地方法,这与处理普通的类方法相似。这里,我们举例说明程序是如何创建一个新的NativeHello对象并调用你的nativeHelloWorld方法的:
1.class UseNative {
2.public static void main (String args[]) {
3.NativeHello nh = new NativeHello();
4.nh.nativeHelloWorld();
5.}
6.}
用javac来编译.java文件。.class文件在创建头文件时会被使用。
javah工具
你可用javah工具来创建基于NativeHello.class文件的C头文件。对javah的调用方式如下:
% javah -jni NativeHello
所产生的文件,NativeHello.h,为你提供了编写C程序所需的消息。这里给出了对于本例javah所产生的文件:
/* DO NOT EDIT THIS FILE - it is machine generated */
1.#include <jni.h>
2./* Header for class NativeHello */
3.
4.#ifndef _Included_NativeHello
5.#define _Included_NativeHello
6.#ifdef __cplusplus
7.extern "C" {
8.#endif
9./*
10.* Class: NativeHello
11.* Method: nativeHelloWorld
12.* Signature: ()V
13.*/
14.JNIEXPORT void JNICALL Java_NativeHello_nativeHelloWorld
15.(JNIEnv *, jobject);
16.
17.#ifdef __cplusplus
18.}
19.#endif
20.#endif
21.
其中的黑体字符部分给出了将要实现的本地方法的签名。
为本地方法编写C函数代码
到此为止,C程序是唯一缺少的代码部分。你所编写的C代码必须包含上面的头文件,以及在$JAVA_HOME/include目录中由JDK所提供的jni.h。($JAVA_HOME指JDK的"根"目录。)当然,也要包含你的函数所必需的其他头文件。
对每一个在头文件中声明的函数,你都要提供函数体。对本例来说,称为MyNativeHello.c的C文件如下:
#include <jni.h>
1.#include "NativeHello.h"
2.#include <stdio.h>
3.
4.void Java_NativeHello_nativeHelloWorld
5.(JNIEnv *env, jobject obj) {
6.printf ("Hello from C");
7.}
8.
·将它合并
现在你已准备好了所有片断,必须告诉系统如何将它们集合起来。首先,编译你的C程序。也许你必须指定include文件的位置。
下例使用了Solaris操作系统中的C编译器:
% cc -I$JAVA_HOME/include -I$JAVA_HOME/include/solaris -G MyNativeHello.c -o libhello1.so
为了编译代码,你必须存取的两个包含目录是$JAVA_HOME/include和$JAVA_HOME/include/solaris。你可以在命令行上指定它们,或者采用修改INCLUDE环境变量的方式。
C:\> cl MyNativeHello.c -Fehello1.dll -MD -LD javai.lib
一旦创建完库文件,你就可运行你的本地方法测试文件了:
% java UseNative
Hello Native World!
或
C:\> java UseNative
Hello Native World!
如果你被给出java.lang.UnsatisfiedLinkError信息,则需要更新系统的LD_LIBRARY_PATH变量来包含当前目录(使得JVM可找到libhello1.so)。
Karnak
2002-03-05
打赏
举报
回复
找不到本地接口的定义,我是在tomcat下使用的,调用c的动态链接库,不知道是需要放在什么地方才能让tomcat找到?
night_knight
2002-03-05
打赏
举报
回复
关注......
Karnak
2002-03-05
打赏
举报
回复
DLL已经放在system32下了,没理由找不到
主要是package的问题
jsp必须创建一个目录然后加一个package
可是jni如果加了package就会出错,至少我这里是这样,
这可就矛盾了,你们说该怎么办?
jean777
2002-03-05
打赏
举报
回复
帮你up---学习---成功了给个得sample
jean777@etang.com
加载更多回复(3)
SSM框架例子
SSM框架例子源码下载,完整打包分享给大家哈,需要的可以下载学习!
jsp
调用
java
接口
_请教大神怎么用
JSP
写
接口
?
该楼层疑似违规已被系统折叠隐藏此楼查看此楼现在入手一个项目,大概是
JSP
传来一个JSON串,然后H5页面再用ajax
调用
jsp
,这边我想先用
jsp
写一些死的数据,但是不知道怎么写,网上搜了很多都不行。大概是这样的:student.
jsp
:---------------------------------------------------------------JSONObject obj = ...
jsp
调用
java
接口
_
jsp
远程
调用
java
接口
//url是你的请求名称//paramsMap是参数名称=参数值publicstaticStringhttpRequest(Stringurl,MapparamsMp)throwsUnsupportedEncodingException{StringresData=null;//先将参数放入List,再对参数进行URL编码Listparams=newLink...
JSP
调用
接口
并渲染数据到页面
首先要在
JSP
文件中引入Jquery,使用ajax进行
接口
请求操作 <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> ajax 请求示例 <script> $(document).ready(function(){ $.ajax({ url: window.location.protocol + "//" +.
jsp
怎么实现请求获取非本地服务器的
接口
和服务器类型
上述代码是在
JSP
文件中嵌入Java代码实现的。这种做法虽然可以实现功能,但通常不被推荐,因为它可能导致安全漏洞和可维护性问题。更好的做法是将Java代码移动到Servlet或其他Java类中,并在
JSP
文件中引用它们。要从
JSP
页面中向非本地服务器发出HTTP请求,可以使用Java中的URLConnection类或第三方库(如Apache HttpClient)。然后,创建一个URL对象,并使用它来创建一个。如果响应状态码为200,则表示请求成功,并可以通过。接下来,设置请求方法为GET,并
调用
。
非技术区
23,407
社区成员
70,513
社区内容
发帖
与我相关
我的任务
非技术区
Java 非技术区
复制链接
扫一扫
分享
社区描述
Java 非技术区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章