2012-11-18 23 views
6

Próbuję utworzyć witrynę internetową, która pobiera dane wprowadzane przez użytkownika i konwertuje do pliku tekstowego. Plik tekstowy jest następnie używany jako dane wejściowe dla pliku .jar. (np. java -jar encoder.jar -i text.txt), jar następnie wysyła plik .bin, który użytkownik może pobrać.Uruchamianie pliku .jar na stronie JSP

Ten słoik został zaprojektowany do uruchamiania z wiersza poleceń i naprawdę nie wiem, jak najlepiej go wdrożyć na stronie .jsp. Stworzyłem kilka testów java, ale nic nie zadziałało tak daleko.

Czy ktoś ma jakieś sugestie dotyczące możliwych metod?

+1

Najlepszym rozwiązaniem może być załadowanie słoika do witryny i uruchomienie go w toku - prawdopodobnie będziesz musiał zastąpić główną klasę. Czy masz źródło dla .jar? Jeśli nie, możesz spróbować dekompilować główną klasę, aby zobaczyć, jak jest to skomplikowane. Być może będziesz musiał uważać, aby kod poprawnie uwalniał wszystkie zasoby, chociaż nie zakłada po prostu, że wszystko zostanie automatycznie zwolnione po zakończeniu, ponieważ jeśli zadzwonisz do siebie z maszyny JVM, wówczas JVM, w której działa, nie zostanie przerwana. Alternatywnie możesz prawdopodobnie znaleźć inną implementację - jakie jest kodowanie? – Rup

+0

Dziękuję, że to interesujący pomysł, nie pomyślałem o tym. Zasadniczo plik .jar, którego używam, nie jest moim własnym, więc nie jestem pewien co do jego kodowania. Służy do konwersji pliku tekstowego na szesnastkowy, aby mógł zostać zinterpretowany przez sprzęt. Postaram się później dekompilować plik .jar i sprawdzić, czy byłaby to praktyczna metoda. W międzyczasie, jeśli ktokolwiek ma jakieś pomysły, są mile widziane ... – Bam421

Odpowiedz

3

Alternatywą do prowadzenia go jako proces zewnętrznej jest, aby wywołać jego główne klasy, w obecnym JVM:

  1. ekstrakt/otwarty META-INF/MANIFEST.MF słoika
  2. zidentyfikować Main-Class:. Powiedzieć, że nazywa EncoderMainClass
  3. Przywołaj swoje main metody: EncoderMainClass.main("-i", "text.txt")

To coś, aby być szybciej, ponieważ nowy proces OS nie muszą być tworzone, ale nie mogą być względy bezpieczeństwa.

+0

To działało idealnie, udało się przekazać argumenty za pośrednictwem głównej klasy i wygenerować pliki .bin. Ze względów bezpieczeństwa, co dokładnie masz na myśli, czy użytkownik może spróbować jakiejś formy przepełnienia? Dzięki za pomoc. – Bam421

+0

Przeczytaj na [SecurityManager] (http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/SecurityManager.html).Klasa będzie miała różne zasady zabezpieczeń stosowane, gdy działa ona w wierszu poleceń v/s działającym w kontekście twojego serwera aplikacji. Ponieważ działa, zgaduję, że powinieneś być w porządku. –

0

Czy próbowali somrthing tak,

Utwórz plik java

użyć ProcessBuilder i rozpocząć nowy JVM.

Oto coś na początek:

ProcessBuilder pb = new ProcessBuilder("/path/to/java", "-jar", "your.jar", "thetextfile.txt"); 
pb.directory(new File("preferred/working/directory")); 
Process p = pb.start(); 

ps: czy obsługiwać zniszczyć proces innego będzie to pochłonie cała pamięć

0

można umieścić ten słoik do aplikacji internetowej na ścieżce klasy i użyj jej klasy i metod. Lepiej, jeśli masz javadoc, jeśli nie masz źródeł. Ale nawet jeśli nie w classpath, możesz wypróbować example lub this example.

Powiązane problemy