Weiterleitung aus Applet

milea

Mitglied
Hallo!

Ich habe folgendes Problem:
Ich lese die lokale IP eines Rechners aus, wandle diese in einen String und les daraus die 8. Stelle ab.
Wenn diese =1 dann soll auf eine Website weitergeleitet werden.

Soweit so gut. Bin da schon ganz stolz ,dass das funktioniert.
Das Ganze findet in der main -methode statt und lässt sich prima in der Konsole ausführen.

Allerdings weiß ich nicht, wie ich die automatische Weiterleitung hinbekomme, wenn ich das Applet im Browser ausführe.
Also wenn ich die html-Seite mit dem eingebundenen Java-Applett öffne, soll meine lokale IP ausgelesen werden und mich zu eine bestimmten URL automatisch weiterleiten. Ohne vorherige Ausgabe oder Betätigen eines Buttons.

Code:
import java.net.InetAddress;
import java.applet.Applet; 
import java.awt.Graphics;
import java.net.URL;

public class LokaleIp extends Applet {

    public LokaleIp() {

    }

    public void paint(Graphics g)
    {
         
    }
 
    public static void main(String[] args ) {
         try {
	         // Holt den Hostnamen
	        String localHost = InetAddress.getLocalHost().getHostName();
                 String myadresse = InetAddress.getByName(localHost).getHostAddress();

                 System.out.println(myadresse);

                //auslesen der IP an 8.Stelle
                 if (myadresse.charAt(8) == '1')
                 {
                   String url = "http://www.google.de/";
		    new ProcessBuilder( "rundll32", "url.dll,FileProtocolHandler", url ).start();
                 }
                 else if (myadresse.charAt(8) == '0')
                     System.out.println("die achte Stelle ist 0");

	      
        }
        catch(java.net.UnknownHostException ue) {
            ue.printStackTrace();
        }
        catch(java.io.IOException ie) {
            ie.printStackTrace();
        }



    }

}


Was muss ich tun? Vielen Dank schon mal für eure Hilfe!
 
Ein Applet hat keine Main (außer wenn es auch als Anwendung gestartet werden können soll, was imho nicht oft Sinn macht.)
Außerdem wirst du dafür dein Applet warscheinlich signieren müssen (Google "Applet signieren jarsigner"), wenn du weiterleiten willst würde ich das auf HTML/PHP-Ebene erledigen und nur wenn nicht weitergeleitet wird das Applet anzeigen. Sonst wird es ja auch unnötig vom Server geladen.
 
Zuletzt bearbeitet:
Vielen Dank schonmal! Das mit der main wußte ich nicht.

Das ganze ist ne Anwendung fürs Intranet und läuft auf einem Server ohne php-Unterstützung.Außerdem kann ich mit php nicht die lokale IP auslesen sondern nur die vom Router zugewiesene. Aber ich brauch ja die lokale IP.

Deshalb glaub ich, dass das auslesen mit Java die einzige Möglichkeit ist. Ich muss nur halt irgendwie beim Aufruf des Applets die Weiterleitung hinbekommen.

Wenn ich nun meine main-Methode entferne und alles in die paint packe gehts auch nicht.

Code:
 public void paint(Graphics g)
    {
            try {
	         // Holt den Hostnamen
	        String localHost = InetAddress.getLocalHost().getHostName();
                 String myadresse = InetAddress.getByName(localHost).getHostAddress();

                 System.out.println(myadresse);

                 //charAt liest Strani an bestimmter Stelle aus
                 //'1'(char) und nicht "1"(string) da char nicht mit Strimg zu vergleichen ist
                 // an 8.Stelle da CharAt von links mit 0 anfängt zu zählen
                 if (myadresse.charAt(8) == '1')
                 {
                   String url = "http://www.google.de/";
		       new ProcessBuilder( "rundll32", "url.dll,FileProtocolHandler", url ).start();
}
                 else if (myadresse.charAt(8) == '0')
                     System.out.println("die neunte Stelle ist 0");


        }
        catch(java.net.UnknownHostException ue) {
            ue.printStackTrace();
        }
        catch(java.io.IOException ie) {
            ie.printStackTrace();
        }
    }
 
Tut man auch nicht, die paint ist zum zeichnen da.
Applet definiert die beiden Methoden public void init() und public void start(), die du überschreiben musst.
Klar, wenn der Router als DHCP läuft bekommst du die IPs vom ihm, aber das ist ja die lokale IP. Man hat pro Netzwerk ja nur eine. (Eventuell außgenommen IPv4 und IPv6 gleichzeitig, aber damit habe ich mich bisher noch nicht beschäftigt.)
 
Hi,
zum einen solltest du dich wirklich erst mal ein wenig in Applets einlesen, bevor du weitermachst.
Zu deiner ursprünglichen Frage, ein redirect bewerkstelligt man z.B. folgendermaßen:
Code:
yourApplet.getAppletContext().showDocument(new URL("http://www.example.de"), "_blank");

Grüße!
 
Hallo nochmal !

Ich hab mich gestern zu früh gefreut- leider.

Zwar wird jetzt eine IP ermittelt aber leider die vom localhost und nicht meine lokale. Wenn ich es wieder über die Konsole ausführe ist alles super.

Aber wenn ich die html-Datei aufrufe, in die das Applet eingebunden ist, dann ermittelt er mir immer 127.0.0.1 - also den localhost und nicht die lokale IP (zB. 192.168.0.786).

Das Ganze ist ja ne Anwendung fürs Intranet. Es wird also vor die eigentliche Startseite die html-Datei mit dem Applet geschaltet. Und im Applet soll eigentlch die lokale/statische IP des Rechner des Nutzers ermittelt werden.

Die wird dann an der 8. Stelle ausgelsen - und wenn die 8.Stelle = '1' dann wird zu spiegel.de automatisch weitergeleitet. Wenn die 8. Stelle = '0' dann gehts zur shortnews-URL.

Aber nun kommt ja immer 127.0.0.1 als ermittelte IP raus. So landet jeder bei spiegel.de


Wäre nett, wenn mir wer verrät wies geht und was ich konkret falsch mache.

Code:
//  Auslesen der internen/lokalen IP

import java.net.InetAddress;
import java.applet.Applet; ///muss eingebunden werden, weil ein Applet für Browser erstellt werden soll
import java.awt.Graphics;
import java.net.URL;

//extends für Vererbung an Applet- Klasse
//Main enthält alle methoden und Eigenschaften die Applet hat
public class LokaleIp extends Applet {

    public LokaleIp() {

    }

    public void paint(Graphics g)
    {
    try {
	         // Holt den Hostnamen
	        String localHost = InetAddress.getLocalHost().getHostName();
                 String myadresse = InetAddress.getByName(localHost).getHostAddress();

                 System.out.println(myadresse);

           
                 if (myadresse.charAt(8) == '1')
                 {
                   URL u=new URL("http://www.spiegel.de");
	this.getAppletContext().showDocument(u);
}
                 else if (myadresse.charAt(8) == '0') {
                      URL u=new URL("http://www.shortnews.de");
	this.getAppletContext().showDocument(u);
           }

        }
        catch(java.net.UnknownHostException ue) {
            ue.printStackTrace();
        }
        catch(java.io.IOException ie) {
            ie.printStackTrace();
        }





    }
 
    public static void main(String[] args ) {
         try {
	         // Holt den Hostnamen
	        String localHost = InetAddress.getLocalHost().getHostName();
                 String myadresse = InetAddress.getByName(localHost).getHostAddress();

                 System.out.println(myadresse);

          
                 if (myadresse.charAt(8) == '1')
                 {
                   String url = "http://www.spiegel.de/";
		       new ProcessBuilder( "rundll32", "url.dll,FileProtocolHandler", url ).start();
}
                 else if (myadresse.charAt(8) == '0')
                 {
                     String url = "http://www.shortnews.de/";
		       new ProcessBuilder( "rundll32", "url.dll,FileProtocolHandler", url ).start();
                        }

        }
        catch(java.net.UnknownHostException ue) {
            ue.printStackTrace();
        }
        catch(java.io.IOException ie) {
            ie.printStackTrace();
        }



    }

}
 
Hallo und Guten Morgen!

Ich weiß voran es liegt, dass mir nur die 127.0.0.1 ausgegeben wird. Das ist zwar eine IP auf meienn rechner im Intranet aber es gibt ja noch eine zweite IP - und das ist die lokale IP. deshalb werden jetzt die IP in einer schleife ausgelesen.

Code:
import java.net.*;
import java.util.*;
import java.io.*;
import java.nio.*;
import java.applet.Applet;l
import java.awt.Graphics;

public class LokaleIp extends Applet {


public void  getInterfaces (){
      try {
         Enumeration e = NetworkInterface.getNetworkInterfaces();

         while(e.hasMoreElements()) {
            NetworkInterface ni = (NetworkInterface) e.nextElement();
            System.out.println("Net interface: "+ni.getName());

            Enumeration e2 = ni.getInetAddresses();

            while (e2.hasMoreElements()){
               InetAddress ip = (InetAddress) e2.nextElement();
               System.out.println("IP address: "+ ip.toString());
            }
         }
      }
      catch (Exception e) {
         e.printStackTrace();
      }
   }

   public static void main(String[] args) {
    LokaleIp ip = new LokaleIp();
    ip.getInterfaces();
   }

}

Fein - in der Konsole werden jetzt sowohl die localhost IP 127.0.0.1 als auch meine lokale Ip angegeben.
Den Code hab ich im Internet gefunden. Ich versteh ihn soweit grob :). Aber ich weiß nicht, wie ich ihn in ein Applet packen soll. Ich weiß ich muss ne paint-Methode definieren.Aber was soll da genau rein? Die get Interface methode und die main?
 
Beim Aufruf der HTMl-datei mit dem Applet gibt er mir jetzt auf der Konsole aus:


Net interface: lo
IP address: /127.0.0.1
Net interface: eth0
Net interface: lo
IP address: /127.0.0.1
Net interface: eth0


und das immer wieder - also er durchläuft die while-Schleife ja ständig.

Er findet das ethernet, aber dazu keine IP. Sondern es erscheint wieder nur die 127.0.0.1

Warum bloß? bei Ausführen über die Kommandozeile klappts.
 
So, ich habs mit Hilfe Anderer rausgefunden: Es ging nicht, weil mein Applet gar keine Recht hat, auf meinen Client zuzugreifen und irgendwas von ihm wissen zu wollen - wie seine lokale IP zum Beispiel. ;)
Aber nun hab ich es signiert und beim Aufruf der html-Datei übern Server wird nun meine lokale IP angezeigt. *freu*
 
Zurück