Avatar billede Martin Hansen Nybegynder
23. oktober 2003 - 09:37 Der er 30 kommentarer og
1 løsning

Applet + Filtilgang

Jeg ved godt man med en applet ikke kan tilgå en tekstfil der ligger på serveren, kan man på nogen måde gøre dette???

Jeg sidder og laver et forum i en applet, og vil gerne kunne lave en backup af de postede beskeder.
Avatar billede arne_v Ekspert
23. oktober 2003 - 09:50 #1
Ja.

Du kan signe appletten og give den privs.
Avatar billede arne_v Ekspert
23. oktober 2003 - 09:51 #2
Nej - det er ikke den rigtige måde at gøre det på.

Lad appletten connecte tilbage til den server som den er hentet fra
og gemme der.

Det kræver ingen privs.
Avatar billede Martin Hansen Nybegynder
23. oktober 2003 - 09:51 #3
Okay, og hvordan gør man det? er det en større sag, eller lige til?
Avatar billede Martin Hansen Nybegynder
23. oktober 2003 - 09:56 #4
har du et kodeeksempel, det ville være en stor hjælp...
Avatar billede arne_v Ekspert
23. oktober 2003 - 09:56 #5
Absolut muligt.

Men de fleste synes at det er besværligt.

Og da det skal gøres på alle PC'ere som skal køre applette er det
ofte upraktisk.

Du kan læse mere her:
http://java.sun.com/security/signExample12/
Avatar billede Martin Hansen Nybegynder
23. oktober 2003 - 09:58 #6
det må jeg jo prøve, tak for hjælpen...
Avatar billede Martin Hansen Nybegynder
23. oktober 2003 - 10:35 #7
På linket er beskrevet hvordan jeg skriver til harddiske, hvordan kan jeg skrive til en fil på serveren og hente fra denne fil?
Avatar billede arne_v Ekspert
23. oktober 2003 - 11:02 #8
Så har jeg vist misforstået dit spørgsmål.

Der er ikke nogen applet specifikke sikkerheds-mæssige problemer med
at ligeg fil på servereen.

Men der er nogle voldsomme restriktioner i netværks protokoller
og almindelig sikkerhed.

Jeg kan se flere muligheder:

1)  applet laver FTP download og upload til FTP server (med samme IP som
    applet er downloadet fra)

2)  applet henter fra og gemmer i database via JDBC (med samme IP som
    applet er downloadet fra)


3)  applet kommunikerer med server-side scripts (ASP, PHP, JSP/Servlet)
    som lverer og opdaterer data (og stadigvæk samme IP)

Jeg vil klart anbefale #3.
Avatar billede arne_v Ekspert
23. oktober 2003 - 11:03 #9
"samme IP" reglen omgåes med signing og privs ligesom lokal fil
adgang.
Avatar billede Martin Hansen Nybegynder
23. oktober 2003 - 11:10 #10
ok. tak, det virker som om det ikke bare er helt lige til, ved du hvor der findes et eksempel på dette, eller der står skrevet hvordan man gør. Jeg har ikke arbejdet med dette før.
Avatar billede arne_v Ekspert
23. oktober 2003 - 11:40 #11
Det er ret simpelt.

Du laver en HTML form der submitter data til et server-side script som
som gemmer i fil eller database.

Så mider du HTMl formen væk og lader din applet sende den HTTP POST
i stedet for.

(HttpURLConnection klassen - jeg har eksmepel på brug af den klasse)
Avatar billede Martin Hansen Nybegynder
23. oktober 2003 - 11:52 #12
det eksempel ville jeg godt se
Avatar billede Martin Hansen Nybegynder
23. oktober 2003 - 13:28 #13
nu har jeg prøvet følgende: men det funger ikke..

import java.awt.*;
import javax.swing.*;
import java.io.*;
import java.net.*;
public class testapplet extends javax.swing.JApplet
{
    private JTextArea text;

    public testapplet()
    {
        initComponents();
        ras();
    }
    private void initComponents()
    {
        text = new JTextArea("hej");

        getContentPane().add(text);
    }
    public void ras()
    {
        try
        {
            URL url = new URL("http://users.cybercity.dk/~dsl73651");
            HttpURLConnection con = (HttpURLConnection)url.openConnection();
            con.connect();

            if(con.getResponseCode() == HttpURLConnection.HTTP_OK)
            {
                System.out.println("juhh");
            }
            con.disconnect();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}
Avatar billede Martin Hansen Nybegynder
23. oktober 2003 - 13:48 #14
jeg opretter et nyt spørgsmål..  Så det kan få en bedre overskrift.
Avatar billede arne_v Ekspert
23. oktober 2003 - 14:17 #15
POST eksempel:

import java.io.*;
import java.net.*;

public class PostTest {
    private int x;
    public static StringBuffer postToURL(String postURL, String postParams) {
        StringBuffer response = new StringBuffer(300);
        if (postURL == null)
            return null;
        try {
            byte[] params = postParams.getBytes();
            URL url = new URL(postURL);
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            con.setDoOutput(true);
            con.setDoInput(true);
            con.setRequestMethod("POST");
            con.setRequestProperty("Content-length", params.length + "");
            OutputStream out = con.getOutputStream();
            out.write(params);
            out.flush();
            BufferedReader in =
                new BufferedReader(new InputStreamReader(con.getInputStream()));
            while (true) {
                String line = in.readLine();
                if (line == null)
                    break;
                response.append(line);
            }
            in.close();
            out.close();
            con.disconnect();
        } catch (Exception e) {
            response.append("Error connecting to server: " + e.getMessage());
        }
        return response;
    }
    public static void main(String[] args) {
        System.out.println(postToURL("http://www.xxx.dk/yyyy.php", "f1=val1&f2=val2"));
    }
}
Avatar billede arne_v Ekspert
23. oktober 2003 - 14:18 #16
Hvad fejl få du på din kode ?
Avatar billede Martin Hansen Nybegynder
23. oktober 2003 - 14:22 #17
en java.security.AccessControlException: access denied
Avatar billede arne_v Ekspert
23. oktober 2003 - 14:28 #18
Det lyder som om appletten ikke er hentet fra "http://users.cybercity.dk/~dsl73651 !?
Avatar billede Martin Hansen Nybegynder
23. oktober 2003 - 14:51 #19
nu har jeg prøvet at ændre appletten til følgende:

import java.awt.*;
import javax.swing.*;
import java.io.*;
import java.net.*;
public class testapplet extends javax.swing.JApplet
{
    private JTextArea text;

    public void init()
    {
        text = new JTextArea("hej");
        getContentPane().add(text);
        ras();
  }
    public void ras()
    {
        try
        {
            URL url = new URL("http://users.cybercity.dk/~dsl73651/teksttest/data.txt");
            HttpURLConnection con = (HttpURLConnection)url.openConnection();
            con.connect();

            if(con.getResponseCode() == HttpURLConnection.HTTP_OK)
            {
                text.setText("juhh");

                try{
                        InputStream input = url.openStream();
                        BufferedReader ind = new BufferedReader(new InputStreamReader(input));
                        String s = ind.readLine();
                        while (s != null)
                        {
                            text.setText(s);
                            s = ind.readLine();
                        }
                    }
                    catch (Exception e) {
                        e.printStackTrace();
                    }
            }
            con.disconnect();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}

Jeg ville gerne have at den her hentede den linje jeg har skrevet i filen data.txt og udskrev i mit JTextArea.
Avatar billede Martin Hansen Nybegynder
23. oktober 2003 - 15:16 #20
jeg tror det virker nu...
Avatar billede arne_v Ekspert
23. oktober 2003 - 16:06 #21
Herligt.
Avatar billede Martin Hansen Nybegynder
23. oktober 2003 - 16:34 #22
nu er der bare et mindre problem er det her galt:

    try
                    {
                        URL url = new URL("http://users.cybercity.dk/~dsl73651/Logen/Forum/data.txt");
                        HttpURLConnection con = (HttpURLConnection)url.openConnection();
                        con.connect();

                        if(con.getResponseCode() == HttpURLConnection.HTTP_OK)
                        {
                            try
                            {
                                OutputStream out = con.getOutputStream();
                                OutputStreamWriter ow = new OutputStreamWriter(out);
                                BufferedWriter bw = new BufferedWriter(ow);

                                bw.write(tmp);
                            }
                            catch (Exception x)
                            {
                                x.printStackTrace();
                            }
                        }
                        con.disconnect();
                    }
                    catch (Exception x)
                    {
                        x.printStackTrace();
                    }
Avatar billede Martin Hansen Nybegynder
23. oktober 2003 - 16:35 #23
jeg kan godt hente fra filen, men ikke skrive til den...
Avatar billede arne_v Ekspert
23. oktober 2003 - 18:12 #24
Man kan ikke skriv til en text fil over HTTP !

Du bør lave POST til et server-side script som opdaterer filen.
Avatar billede Martin Hansen Nybegynder
23. oktober 2003 - 19:22 #25
Hvordan kan sådan et serverside script se ud, nu har jeg kigget på det eksempel du har vist mig med java-koden.
Avatar billede arne_v Ekspert
23. oktober 2003 - 19:24 #26
Bruger ASP eller PHP elelr JSP/Servlets på server side ?
Avatar billede Martin Hansen Nybegynder
23. oktober 2003 - 19:35 #27
et udsnit af din kode:

public static StringBuffer postToURL(String postURL, String postParams)

Er postParams det der skal skrives til filen?
Avatar billede arne_v Ekspert
23. oktober 2003 - 19:51 #28
postParams er det som sendes til server-side scriptet.

Form:
  "f1=val1&f2=val2"

Så kan ASP/PHP/JSP fiske værdien af f1 og f2 ud og skrive dem til fil eller
database eller noget helt tredie.
Avatar billede Martin Hansen Nybegynder
23. oktober 2003 - 20:58 #29
Doh...  Jeg tror jeg er rimelig dårlig til det her, nu har jeg været oppe at slås med at finde et script der ændre i en txt.-fil. men det gider ikke helt..  Jeg skal nok kaste mange flere point i dette spørgsmål, hvis det er det der skal til. Jeg troede det var mere simpelt at skrive til en fil..  :-)
Avatar billede arne_v Ekspert
23. oktober 2003 - 21:03 #30
Find ud af hvad server-side scripting du har mulighed for.

Formentlig PHP eller ASP.

Så spørger du i det (PHP eller ASP) kategori om hvordan man
laver et script der kan appende indholdet af et form felt til en fil.

Det burde være et nemt spørgsmål.

Jeg har JSP kode til det.

Men medmindre du selv kører din server har du næppe JSP support.
Avatar billede Martin Hansen Nybegynder
23. oktober 2003 - 21:05 #31
det er hos cybercity jeg har, jeg prøver lige at finde det.
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