Avatar billede clit_commander Nybegynder
26. januar 2005 - 10:53 Der er 12 kommentarer og
1 løsning

Oprette lille webserver som en tråd inde i et program

Hej.

Jeg har lavet et program, som jeg styrer fra en webside. Jeg har lavet nogle servlets som jeg bruger nu, men få at få dem til at virke bliver jeg nødt til at installere tomcat, er det muligt at lave en en tråd men en lille webserver inde i programmet og ligge alt koden fra servletterne ind i programmet.

Mvh

Mads Nielsen
Avatar billede arne_v Ekspert
26. januar 2005 - 11:14 #1
Selvfølgelig er det muligt.

Men koden skal nok omskrives meget. Fordi en servlet er beregnet til at køre
i en servlet container (og men sdet er nemt at lave en web server, så er det
ikke nemt at lave en servlet container).
Avatar billede clit_commander Nybegynder
26. januar 2005 - 11:32 #2
Hej Arne.

Det gør ikke noget at jeg skal omskrive koden, der er ikke så meget html kode, det er mest metoder, og dem kan jeg vel bare bruge igen.

Har du nogen eksempler på en java webserver.
Avatar billede arne_v Ekspert
26. januar 2005 - 11:56 #3
Den her postede jeg i et spørhgsmål i september:

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

public class WebServer {
  private final static int PORT = 80;
  private final static String PATH = "C:\\";
  public static void main(String[] arg) {
      ServerSocket ss = null;
      try {
        ss = new ServerSocket(PORT);
      } catch (IOException e) {
        System.out.println("Can not bind to port " + PORT);
        System.exit(0);
      }
      while(true) {
        try {
            Socket s = ss.accept();
            InputStream is = s.getInputStream();
            OutputStream os = s.getOutputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            PrintWriter pw = new PrintWriter(os);
            String req = br.readLine();
            StringTokenizer st = new StringTokenizer(req, " ");
            String method = st.nextToken();
            String path = st.nextToken();
            String protocol = st.nextToken();
            if(path.equals("/")) {
              path = "index.htm";
            }
            System.out.println(method + " " + path);
            boolean binary;
            String type;
            if(path.indexOf(".htm") > 0) {
              binary = false;
              type = "text/html";
            } else if(path.indexOf(".txt") > 0) {
              binary = false;
              type = "text/plain";
            } else if(path.indexOf(".gif") > 0) {
              binary = true;
              type = "image/gif";
            } else if(path.indexOf(".jpg") > 0) {
              binary = true;
              type = "image/jpeg";
            } else {
              binary = true;
              type = "application/octet-stream";
            }
            pw.println("HTTP/0.9 200 OK");
            pw.println("Content-Type: " + type);
            pw.println();
            pw.flush();
            os.flush();
            if(binary) {
              sendBinary(path, os);
            } else {
              sendText(path, pw);
            }
            os.flush();
            s.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
      }
  }
  private static void sendText(String filename, PrintWriter pw) throws IOException {
      BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(PATH + filename)));
      String line;
      while((line = br.readLine()) != null) {
        pw.println(line);
      }
      pw.flush();
  }
  private static void sendBinary(String filename, OutputStream os) throws IOException {
      InputStream is = new FileInputStream(PATH + filename);
      byte[] b = new byte[100000];
      int n;
      while((n = is.read(b)) >= 0){
        os.write(b, 0, n);
      }
  }
}
Avatar billede clit_commander Nybegynder
26. januar 2005 - 12:15 #4
Genialt.

Et sidste spørgsmål, hvordan gør jeg, hvis jeg skal afvikle nogle metoder på den maskine der kører
programmet, skal man lave et POST og GET i html, eller hvad.

Mvh

Mads Nielsen
Avatar billede arne_v Ekspert
26. januar 2005 - 12:18 #5
Både POST og GET kan formentligt bruges.
Avatar billede arne_v Ekspert
26. januar 2005 - 12:19 #6
Og et svar
Avatar billede arne_v Ekspert
26. januar 2005 - 12:19 #7
Jeg er ikke helt sikker på at jeg forstår hvorfor du vil snakke HTTP mellem 2 tråde i
samme program. Men det er der jo sikert nogle gode grunde til.
Avatar billede clit_commander Nybegynder
26. januar 2005 - 12:28 #8
Ikke rigtigt, hvordan kontrollerer jeg at en bruger foreksempel trykker på en submit knap.
Avatar billede arne_v Ekspert
26. januar 2005 - 20:39 #9
Submit ? Snakker vi browser---server ?
Avatar billede clit_commander Nybegynder
26. januar 2005 - 23:16 #10
Hej Arne.

Jeg har lavet et program som afspiller noget mp3 og viser billeder, dette program skal styres via en webbrowser, indtil nu har jeg brugt tomcat som servlet container, men dette er lidt sværere at sætte op for andre. Så jeg tænkte på om jeg ikke kunne lave en webserver inde i programmet så man kun skal installere mit program, og ikke tomcat.

Mvh

Mads Nielsen
Avatar billede jword Nybegynder
01. februar 2005 - 22:30 #11
Du kan evt. bruge jetty, den er let at integrere i et program, både som webserver og servletcontainer.
http://jetty.mortbay.org/jetty/index.html
Avatar billede clit_commander Nybegynder
03. februar 2005 - 19:07 #12
Hej jword.

Det ser godt ud det jetty, har du et hurtigt eksempel på hvordan man integrerer jetty i et program, og hvordan jeg kan starte jetty op stand alone med de servlets, som jeg allerede har lavet.

Mvh

Mads Nielsen
Avatar billede arne_v Ekspert
25. februar 2005 - 21:41 #13
Tid at få afsluttet dette spørgsmål ?
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