Выполнение Java из CGI (Java не может найти или загрузить основной класс) - PullRequest
0 голосов
/ 15 февраля 2012

У меня странная проблема с запуском cgi из Apache.У меня есть следующий CGI:

 #!"C:\xampp\perl\bin\perl.exe"
use File::Basename;
use Cwd 'chdir';

$DIR=dirname($0);
chdir $DIR;

print "Content-type: text/plain; charset=iso-8859-1\n\n";
#print $DIR;
$Result = `java -classpath . CONCATARR`;
print $result;

Этот CGI работает нормально из командной строки, но не из браузера.Из браузера java выдает следующую ошибку: Ошибка: не удалось найти или загрузить основной класс CONCATARR

Файл CONCATARR.class, конечно же, находится в папке cgi.Когда я распечатывал каталог, он тоже указывает на папку cgi.

В этом проблема, чтобы проверить это другим способом, я также сделал файл php:

<html> <head> <title>Test</title> </head>

<body> <?
chdir('C:/xampp/cgi-bin');
$output = shell_exec("java -classpath . CONCATARR");
echo $output;
?> </body> </html>

, который имеетта же проблема, работает нормально из командной строки, но не из браузера (та же ошибка).

Папка cgi-bin настроена в соответствии с рекомендациями руководства (фактически, выполняется cgi, сбой java ...), все файлы и папки внутри cgi-bin имеют права доступапосле прочтения и выполнения, службе Apache разрешено взаимодействие с рабочим столом.

Я пытался заставить его работать два дня и проверил десятки форумов, поэтому, вероятно, я пробовал больше вещей, которые сейчас не помню...

Любая помощь приветствуется.

Конфигурация: Windows Server 2008 R2, xammp.(Если для выяснения решения требуются дополнительные сведения, пожалуйста, спросите)

Изменить в ответ на первый ответ:

Спасибо за ответ, об этих трех вещахЯ думаю, у меня есть обложка их:

1: имя правильное и файл там, все с заглавными буквами.

2: .class имеет метод main, фактически он использовался ранее в системе iOS.Соответствующий .java этому классу начинается следующим образом:

import java.util.*;
import java.lang.*;
import java.net.URLDecoder;
class CONCATARR
{
public  static  void  main( String  args[] ) throws Exception
{
System.out.print("Content-type: text/xml\n");
System.out.print("Access-Control-Allow-Origin: *\n\n"); 

3: это файл httpd.conf (часть, касающаяся каталога cgi

ScriptAlias /cgi-bin/ "C:/xampp/cgi-bin/"

</IfModule>
<IfModule cgid_module>
</IfModule>

<Directory "C:/xampp/cgi-bin">
    AllowOverride None
    Options None FollowSymLinks
    Order allow,deny
    Allow from all
</Directory>

Файл ипапка имеет все права на чтение и выполнение для всех пользователей ...

Я что-то пропустил?

1 Ответ

0 голосов
/ 15 февраля 2012

Это должно работать ... Этот (старый) учебник показывает, что общий подход верен.

Ваши сценарии выполняются, JVM запущена, просто она можетНе могу найти или загрузить файл класса.

Некоторые причины, которые приходят мне в голову

  • папка cgi-bin должна содержать файл с именем CONCATARR.class (точное написание)
  • CONCATARR.class должен иметь действительный метод main
  • apache нужны права доступа для чтения для папки cgi-bin и файла класса

Вы можете попробоватьвыполнить java -version (просто чтобы убедиться, что запущен правильный java) и добавить опцию -verbose, чтобы получить больше выходных данных.

...