2

JNAを使用してLinuxサーバーにプログラムでアップロードされたファイルのファイルパーミッションを変更しようとしていました。私の参照はこれこれです。そして私のコードを以下に示します。そして、Operation not permitted例外が発生しています。この問題を解決する方法はありますか?アップロードされたファイルの権限をプログラムで変更する他の方法はありますか?または、指定されたファイル権限でファイルをアップロードする方法はありますか?私はJava1.5を使用しています。jna.jarを入れましたが/public_html/WEB-INF/lib、初心者向けの優れたJNAチュートリアルを提案できる人はいますか?

JSPコード(テスト用)

<%@page import="cc.FileModifierLinux"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>  
<!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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%

try
{


    FileModifierLinux flx=new FileModifierLinux();
    String pathX = getServletContext().getRealPath("/testpage.jsp");
    flx.Update(pathX);
    out.println("No Exception");
}
catch(Exception exp)
{
    out.println("exp :"+exp);
}
%>
</body>
</html>

使用したクラス

package cc;
import com.sun.jna.Library;
import com.sun.jna.Native;

public class FileModifierLinux {
     CLibrary libc = (CLibrary) Native.loadLibrary("c", CLibrary.class);
    public void Update(String pth) {
        libc.chmod(pth, 0755);
    }
}

interface CLibrary extends Library {
    public int chmod(String path, int mode);
}

例外

完全な例外の詳細については、これを参照してください

 org.apache.jasper.JasperException: Exception in JSP: /index_check.jsp:23

20: {
21:     
22:     
23:     FileModifierLinux flx=new FileModifierLinux();
24:     String pathX = getServletContext().getRealPath("/testpage.jsp");
25:     flx.Update(pathX);
26:     out.println("No Exception");


Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:491)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:395)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:308)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:259)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)

root cause

javax.servlet.ServletException: Could not initialize class com.sun.jna.Native
4

2 に答える 2

2

同様の問題がありました。私の場合、JNA3.0.9から3.2.7にアップグレードすると問題が修正されました。以前はなかったplatform.jarも追加しました。

于 2013-06-03T02:57:55.537 に答える
1

JNAがロードできるように、libjnidispatch.soをjava.library.pathで使用できるようにサーバーにインストールする必要があります。スローされる例外は、JNAがそのライブラリを見つけられず、独自のjarファイルから解凍しようとしたためです。

元の例外に基づいて、サーブレットは、指定された保護された場所を除いて、ネイティブライブラリをロードできません。JNIライブラリをインストールしてロードできるようにする方法については、サーブレットコンテナのドキュメントを確認してください。

于 2012-08-03T15:58:41.987 に答える