Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Shell Script mit Java aufrufen

Empfohlene Antworten

Veröffentlicht

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

Sowas solltest du mit der Methode exec(String) der Klasse java.lang.Runtime machen können.

Hast du ein beispiel, welches du mir mailen kannst? Ich programmier noch nicht sehr lange!

danke

cu

clavo

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");

...

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");

}

}

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

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...

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)

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!

: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

Ok es funktioniert jetzt alles, super!

VIELEN DANK

ciao

clavo

schön. Dann haben wir ja beide was dazugelernt. So muss das sein...

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.