clavo Geschrieben 9. Januar 2002 Geschrieben 9. Januar 2002 Hi Leute, wie kann ich denn ein Shell Script aus einem Java Servlet heraus aufrufen? :confused: --> HTML Seite mit Button --> Button wird gedruckt --> Servlet wird ausgeführt --> Shell Script wird aufgerufen Vielen Dank für eure Hilfe, ciao clavo Zitieren
Mirko Geschrieben 9. Januar 2002 Geschrieben 9. Januar 2002 Sowas solltest du mit der Methode exec(String) der Klasse java.lang.Runtime machen können. Zitieren
clavo Geschrieben 9. Januar 2002 Autor Geschrieben 9. Januar 2002 Hast du ein beispiel, welches du mir mailen kannst? Ich programmier noch nicht sehr lange! danke cu clavo Zitieren
Mirko Geschrieben 9. Januar 2002 Geschrieben 9. Januar 2002 Ich habe das selber noch nicht ausprobiert und habe daher auch kein Beispiel: Ich gehe mal davon aus, dass du in deinem Servlet mit der doGet() methode arbeitest, ansonsten eben mit der doPost(), oder was auch immer. Jedenfalls fügst du im Servlet mal folgende Zeile ein, und ersetzt eben an der entsprechenden stelle... (ich denke das mußt du mit voller Pfadangabe machen, damit die VM dann auch das Script findet). ... java.lang.Runtime.getRuntime().exec("und hier den Aufruf, so wie du ihn in der COmmandLine eintippen würdest"); ... Zitieren
clavo Geschrieben 9. Januar 2002 Autor Geschrieben 9. Januar 2002 package de.wmc.bstbl; import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class Shell extends HttpServlet { public void doPost (HttpServletRequest request, HttpServletResponse res) throws ServletException, IOException { doGet(request, res); } public void doGet (HttpServletRequest request, HttpServletResponse res) throws ServletException, IOException { // Shell Aufruf java.lang.Runtime.getRuntime().exec("Aufruf wie in der CmmandLine"); } } Zitieren
clavo Geschrieben 9. Januar 2002 Autor Geschrieben 9. Januar 2002 Nochmal zur Erläuterung, sorry! Ich habe ein ShellScript, welches ich von einer HTML Seite aus aufrufen muss. Über einen Button auf der HTML Seite soll das Servlet gestartet werden, welches den Aufruf zum Öffnen der *.SH Datei enthält. DANKE clavo Zitieren
Mirko Geschrieben 9. Januar 2002 Geschrieben 9. Januar 2002 ALso wie du das mit dem Button machst lasse ich jetzt mal Außenvor. Davon habe ich nicht so die Ahnung. Aber mal zu den Grundlagen. Die doGet methode wird aufgerufen, wenn du das Servlet einfach so im Browser aufrufst, oder einen redirect auf die entsprechende stelle machst (halt so, wie du den url im Tomcat angegeben hast). Die doPost() methode, wird aufgerufen, wenn du ein html-Formular hast und als action das Servlet angibst mit der method post. Normalerweise macht man es dann so, dass das Servlet, sollte es zum Beispiel die doPost methode nicht unterstützen, dass man dann an den Browser eine req.sendError(...) zurückgibt, der entsprechendes bewirkt. Es kann aber durchaus sein, dass dein Aufruf so auch funktioniert. Du leitest ja einfach nur alles an die doGet() um. Jetzt mußt du eben nur noch den Text in "" durch den shell-Aufruf ersetzten und dann funktioniert es hoffentlich. Im Pfad mußt du mal ein wenig mit // und \\ rumprobieren. Ich glaube einen Backslash mußt du dann doppelt setzen, um den zu maskieren, oder so... Zitieren
clavo Geschrieben 9. Januar 2002 Autor Geschrieben 9. Januar 2002 Den Aufruf wie in der CommandLine muss ich noch einfügen, doch folgender Wust kommt wenn ich meinen Button (Aufruf des Servlets) drücke: Error: 500 Location: /servlet/de.wmc.bstbl.Shell Internal Servlet Error: java.io.IOException: CreateProcess: Aufruf wie in der CmmandLine error=2 at java.lang.Win32Process.create(Native Method) at java.lang.Win32Process.(Win32Process.java:66) at java.lang.Runtime.execInternal(Native Method) at java.lang.Runtime.exec(Runtime.java:551) at java.lang.Runtime.exec(Runtime.java:418) at java.lang.Runtime.exec(Runtime.java:361) at java.lang.Runtime.exec(Runtime.java:325) at de.wmc.bstbl.Shell.doGet(shell.java:19) at de.wmc.bstbl.Shell.doPost(shell.java:12) at javax.servlet.http.HttpServlet.service(HttpServlet.java:760) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.tomcat.core.ServletWrapper.handleRequest(ServletWrapper.java:503) at org.apache.tomcat.core.ServletWrapper.handleRequest(ServletWrapper.java:597) at org.apache.tomcat.servlets.InvokerServlet.service(InvokerServlet.java:257) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.tomcat.core.ServletWrapper.handleRequest(ServletWrapper.java:503) at org.apache.tomcat.core.ContextManager.service(ContextManager.java:559) at org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(HttpConnectionHandler.java:160) at org.apache.tomcat.service.TcpConnectionThread.run(SimpleTcpEndpoint.java:338) at java.lang.Thread.run(Thread.java:484) Zitieren
Mirko Geschrieben 9. Januar 2002 Geschrieben 9. Januar 2002 Original geschrieben von clavo Error: 500 Location: /servlet/de.wmc.bstbl.Shell Internal Servlet Error: java.io.IOException: CreateProcess: Aufruf wie in der CmmandLine error=2 at java.lang.Win32Process.create(Native Method) at java.lang.Win32Process.(Win32Process.java:66) at java.lang.Runtime.execInternal(Native Method) at java.lang.Runtime.exec(Runtime.java:551) at java.lang.Runtime.exec(Runtime.java:418) at java.lang.Runtime.exec(Runtime.java:361) at java.lang.Runtime.exec(Runtime.java:325) at de.wmc.bstbl.Shell.doGet(shell.java:19) at de.wmc.bstbl.Shell.doPost(shell.java:12) at javax.servlet.http.HttpServlet.service(Ht Jo, und das besagt für mich nix anderes, als dass dein Betriebssystem nix mit "Aufruf wie in der CmmandLine" anfangen kann. Setz mal was richtiges ein! Zitieren
clavo Geschrieben 9. Januar 2002 Autor Geschrieben 9. Januar 2002 :WD Ok, danke schonmal! Ich bin jetzt bis um 13:15 beim Essen und werde dann mal ein ShellScript damit verbinden und den richtigen Aufruf einfügen. Wenn es an meinem Rechner nicht funzt geh ich auf ne Unix Maschine. bis gleich! DANKE (ich hoff`du bist dann auch noch da) ciao, Mahlzeit clavo Zitieren
clavo Geschrieben 10. Januar 2002 Autor Geschrieben 10. Januar 2002 Ok es funktioniert jetzt alles, super! VIELEN DANK ciao clavo Zitieren
Mirko Geschrieben 10. Januar 2002 Geschrieben 10. Januar 2002 schön. Dann haben wir ja beide was dazugelernt. So muss das sein... Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.