Avatar billede minniethemuhh Nybegynder
05. april 2004 - 15:02 Der er 16 kommentarer og
1 løsning

Start et CGI script fra Applet

Hej
Jeg har lavet en applet som indeholder et GUI. Jeg kunne godt tænke mig at der ved tryk på en knap(i appletens GUI)kunne startes et CGI script(.exe fil)
Filen generer kun noget html. Og skal derfor bare 'startes'... (Det virker godt nok hvis filen kaldes fra en html side)

Jeg har prøvet følgende kode i Java:
      JButton k1 = new JButton("Error");
      k1.addActionListener(new ActionListener() {                                  public void actionPerformed(ActionEvent e) {
          callCGI();
    }
    });
public void callCGI() {
  try {
    String URL1  = new String(getCodeBase() + "cgi-          bin/appletScript.exe");
    URL cgiURL = new URL(URL1);
    URLConnection url = cgiURL.openConnection();
    url.connect();
    url.setUseCaches(false);
  }
  catch (MalformedURLException ex1) {
  }
  catch (IOException ex2) {
  }
}
Men det virker ikke!
Nogen forslag??? Så ville jeg blive glad...
Avatar billede arne_v Ekspert
05. april 2004 - 15:20 #1
Hvordan virker det ikke ?
Avatar billede arne_v Ekspert
05. april 2004 - 15:23 #2
Jeg lavede et:
  applet---PHP
eksempel her:
  http://www.eksperten.dk/spm/437468

Som du måske kan få noget ud af at kigge på.
Avatar billede minniethemuhh Nybegynder
06. april 2004 - 10:09 #3
Det virker ikke, sådan forstået at den side som cgi'en skal genererer, den bliver ikke vist. Jeg vil gene have at cgi scriptet hentes/startes, og siden det generere vises i browseren. Jeg har testes cgi'en ved at lave en HTML form der kalder det og det virker godt nok. Men jeg vil gerne have min GUI programmering til at være i Java...
Avatar billede arne_v Ekspert
06. april 2004 - 10:14 #4
Hvad vises der ?

[din kode læser jo slet ikke svarer, men det eksempel jeg linkede til
viser svaret]
Avatar billede minniethemuhh Nybegynder
06. april 2004 - 10:21 #5
Jeg har afprøvet den kode du linkede til (stort set copy-paste), og der sker da lidt, jeg får en IOException... Ved ikke 100% hvad den betyder, stien er god nok...
Udover det vises appletten, som den gjorde før jeg forsøgt at starte CGI'en.
Avatar billede arne_v Ekspert
06. april 2004 - 10:23 #6
Må jeg se lidt applet kode ?
Avatar billede minniethemuhh Nybegynder
06. april 2004 - 10:30 #7
Jeps:
import java.awt.*;
import java.awt.event.*;
import java.awt.TextArea;
import javax.swing.*;
import java.io.*;
import java.net.*;

public class Controller extends JApplet {
//Erklæring af variable.
public Controller() { }


public void init() {
//GUI opbygning
JButton k1 = new JButton("Error");
k1.addActionListener(new ActionListener() {               
    public void actionPerformed(ActionEvent e) {
        Display.setText("Error");
        callCGI();
    }
});
}//slut init()
// Member functions
    public void callCGI() {
        try {
            String URL1  = new String(getCodeBase() + "cgi-bin/appletScript.exe");
            Display.append("\n"+URL1);
            URL cgiURL = new URL(URL1);
            HttpURLConnection url = (HttpURLConnection)cgiURL.openConnection();
            url.setRequestMethod("POST");
            String info = "felt1=value1&felt2=value2";
            url.getOutputStream().write(info.getBytes());
            url.connect();
            if(url.getResponseCode() == HttpURLConnection.HTTP_OK) {
                InputStream is = url.getInputStream();
                byte[] b = new byte[1000];
                int n;
                while((n = is.read(b)) >= 0) {
                String line = new String(b,0,n);
                  // process line
                }
                is.close();
            }
            url.disconnect();
        //    url.setUseCaches(false);
        }
        catch (MalformedURLException ex1) {
            Display.setText("URL not found...");
        }
        catch (IOException ex2) {
            Display.setText("File not found...");
        }

    }
Det er som den ser nu, ikke stort anderledes end igår, jeg er totalt på herrens mark!
Avatar billede minniethemuhh Nybegynder
06. april 2004 - 10:31 #8
Bortset fra at jeg har prøvet det kode som du linkede til... Men jeg påstår ikke at jeg forstår det!
Avatar billede arne_v Ekspert
06. april 2004 - 10:35 #9
Er dit CGI script lavet til at bruge:

"felt1=value1&felt2=value2";

?
Avatar billede arne_v Ekspert
06. april 2004 - 10:35 #10
Ser URL korrekt ud ?
Avatar billede arne_v Ekspert
06. april 2004 - 10:36 #11
Prøv evt.:

}
        catch (MalformedURLException ex1) {
            Display.setText(ex1.getMessage());
        }
        catch (IOException ex2) {
            Display.setText(ex2.getMessage());
        }
Avatar billede minniethemuhh Nybegynder
06. april 2004 - 10:49 #12
Nej mit CGI script er ikke lavet til at bruge "felt1=value1&felt2=value2";
URL ser god nok ud: http://localhost/cgi-bin/appletScript.exe!!!
Jeg fik følgende fejl fra exception.getMessage(): cannot write to a URLConnection if doOutput=false - call setDoOutput(true)
Så jeg prøvede: url.setDoOutput(true); Det resulterede i at den skrev "http://localhost/cgi-bin/appletScript.exe" i Display.
Avatar billede arne_v Ekspert
06. april 2004 - 11:41 #13
Du skal kalde url.setDoOutput(true) !
Avatar billede arne_v Ekspert
06. april 2004 - 11:42 #14
Når du har fået fat i data med:

String line = new String(b,0,n);

så skal du vel displaye den.
Avatar billede arne_v Ekspert
06. april 2004 - 11:43 #15
Display.setText(Display.getText() + line);

eller hvordan nu din logik skal være.
Avatar billede minniethemuhh Nybegynder
06. april 2004 - 12:00 #16
Læg et svar, så du kan få point for dit store arbejde.
Jeg har fået det til at virke ved at bruge:
URL page = new URL(getCodeBase(), "cgi-bin/appletScript.exe");
getAppletContext().showDocument(page , "_self");
Men tak for indsatsen, om ikke andet er jeg blevet klogere...
Avatar billede arne_v Ekspert
06. april 2004 - 12:04 #17
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester