Avatar billede vedikkebedre Nybegynder
25. maj 2004 - 10:19 Der er 6 kommentarer og
1 løsning

Java-Proxy-Server

Hej alle eksperter

Jeg sidder og skal forsøge at lave en "tunnel"-løsning mellem 2 servere. Dette skal forståes på den måde at jeg har en server der kører min Application Server(IBM Websphere) med EJB og JSP.

Nu vil jeg gerne vise nogle PDF-filer som bliver hentet på forspørgsel/søgning af brugeren, men hvor filerne er på en anden server. Men når open/save vinduet åbnes skal brugeren ikke kunne se andet end at det er fra min server, at filen komme. Brugeren må ikke kunne se at mit system tilgår andre servere for disse filer.

Derfor var min tanke noget med at java-kode en form for proxy-server som kunne skjule oprendelse for brugeren, og kun forwarde informationer som indikerer at der er den sever som requestet rammer, som også sender response(åbner op for open/save vinduet).

Så jeg tænkte om ikke nogle af jer hardcore java-gutter har prøvet noget ligende før, og derved kunne give mig lidt input til at komme i gang...?

mvh
vedikkebedre
Avatar billede arne_v Ekspert
25. maj 2004 - 10:48 #1
Du kan sagtens lave en servlet som sender en HTTP request til en anden server
og returnerer resultatet som sit eget output.
Avatar billede arne_v Ekspert
25. maj 2004 - 10:50 #2
Simpelt eksempel:

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.net.*;

public class CopyServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
          URL url = new URL("http://www.eksperten.dk/");
          HttpURLConnection con = (HttpURLConnection)url.openConnection();
          con.connect();
          if(con.getResponseCode() == HttpURLConnection.HTTP_OK) {
              InputStream is = con.getInputStream();
              byte[] b = new byte[1000];
              int n;
              while((n = is.read(b)) >= 0) {
                String s = new String(b,0,n);
                response.getOutputStream().println(s);
              }
              is.close();
          }
          con.disconnect();
        } catch (MalformedURLException e) {
          e.printStackTrace();
        } catch (FileNotFoundException e) {
          e.printStackTrace();
        } catch (IOException e) {
          e.printStackTrace();
        }
    }
}
Avatar billede arne_v Ekspert
25. maj 2004 - 10:50 #3
Ovenstående er text mens PDF er binært, men det skulle være nemt at rette.
URL der skal hentes skal jo nok helle rikke være hardcoded, men det er også
nemt at rette.
Avatar billede vedikkebedre Nybegynder
26. maj 2004 - 10:59 #4
Hej Arne

Du har ret i at URL ikke skal hardcodes idet den er baseret på baggrund af de parametre som brugeren indtaster i søgefelterne. Så den vil være dynamisk.

Men du tabte mig lidt omkring det binære contra text.

Troede alle java-metoder pr. default læste i bytes. Derved er der vil ingen forskel i hvilke format "leverandøren" sender i; idet binært kan converteres til bytes.

Eller er jeg helt gal på den ???


mvh
vedikkebedre
Avatar billede arne_v Ekspert
26. maj 2004 - 11:27 #5
Korrekt.

Men min CopySevlet indeholder følgende:
              String s = new String(b,0,n);
              response.getOutputStream().println(s);
og det skal ikke laves på den måde med en binær fil.
Avatar billede vedikkebedre Nybegynder
27. maj 2004 - 10:11 #6
Hej Arne

Har fået det til at virke - takker for hjælpen.

Smid et svar så du kan få dine velfortjente point.

mvh
vedikkebedre
Avatar billede arne_v Ekspert
27. maj 2004 - 10:13 #7
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