Kasutajaliidesed lab 2 java server example

Allikas: Lambda
import java.io.*;
import java.net.*;
import java.util.StringTokenizer;
import javax.xml.transform.*;
import javax.xml.transform.stream.*;


/** 
 * This class implements a multithreaded simple HTTP 
 * server that supports the GET request method.
 * It listens on port 8080, waits client requests, and 
 * serves documents.
 */

public class HttpServer {
   // The port number which the server 
   // will be listening on
   public static final int HTTP_PORT = 8080;

   public ServerSocket getServer() throws Exception {
      return new ServerSocket(HTTP_PORT);
   }

   // multi-threading -- create a new connection 
   // for each request
   public void run() {
      ServerSocket listen;
      try {
         listen = getServer();
         while(true) {
            Socket client = listen.accept();
            ProcessConnection cc = new ProcessConnection(client);
         }
      } catch(Exception e) {
         System.out.println("Exception: "+e.getMessage());
      }
   }

   // main program
   public static void main(String argv[]) throws Exception {
      HttpServer httpserver = new HttpServer();
      httpserver.run();
   }
}


class ProcessConnection extends Thread {
   Socket client;
   BufferedReader is;
   DataOutputStream os;
   
   public ProcessConnection(Socket s) { // constructor
      client = s;
      try {
         is = new BufferedReader(new InputStreamReader
           (client.getInputStream()));
         os = new DataOutputStream(client.getOutputStream());
      } catch (IOException e) {
         System.out.println("Exception: "+e.getMessage());
      }
      this.start(); // Thread starts here...this start()       will call run()
   }
 
   public void run() {
      try {
         // get a request and parse it.
         String request = is.readLine();
         System.out.println( "Request uus: "+request );
         StringTokenizer st = new StringTokenizer( request );
            if ( (st.countTokens() >= 2) && 
              st.nextToken().equals("GET") ) {                     
               if ( (request = 
                 st.nextToken()).startsWith("/") )
                  request = request.substring( 1 );
               if ( request.equals("") )
                  request = request + "index.html";
               System.out.println( "listing: "+request );                             
               // check request
               
               String[] tmp;
               
               tmp=split(request,"?");
               
               if (tmp.length>1) {
                   
                  //System.out.println("tmp: "+tmp); 
                  tmp=split(tmp[1],"&");
                  System.out.println("tmp1: "+tmp[0]);  
                  addparty(os,tmp); 
               }    
               
               
               //
               if (request.equals("listing")) {                   
                 listing(os);  
               } else if (request.equals("allparties")) {
                 allparties(os);                   
               } else if (request.equals("addparty")) {                                      
                 addparty(os,tmp);       
               } else {  
                 File f = new File(request);
                 shipDocument(os, f);
               }   
            } else {
               os.writeBytes( "400 Bad Request" );
            } 
            client.close();
      } catch (Exception e) {
         System.out.println("Exception: " + 
           e.getMessage());
      } 
   }

  /**
   * Read the requested file and ship it 
   * to the browser if found.
   */
   public static void shipDocument(DataOutputStream out, File f) throws Exception {
       try {
          DataInputStream in = new 
            DataInputStream(new FileInputStream(f));
          int len = (int) f.length();
          byte[] buf = new byte[len];
          in.readFully(buf);
          in.close();
          out.writeBytes("HTTP/1.0 200 OK\r\n");
          out.writeBytes("Content-Length: " + 
            f.length() +"\r\n");
          out.writeBytes("Content-Type: text/html\r\n\r\n");
          out.write(buf);
          out.flush();
       } catch (Exception e) {
          out.writeBytes("<html><head><title>error</title></head><body>\r\n\r\n");
          out.writeBytes("HTTP/1.0 400 " + e.getMessage() + "\r\n");
          out.writeBytes("Content-Type: text/html\r\n\r\n");
          out.writeBytes("</body></html>");
          out.flush();
       } finally {
          out.close();
       }
   }
   
public static void listing(DataOutputStream out) {   
    String ls_str;
    String res="";
    try {
      out.writeBytes("HTTP/1.0 200 OK\r\n");          
        
      Process myprocess = Runtime.getRuntime().exec("trydir.bat");     
      DataInputStream ls_in = new DataInputStream(
                                          myprocess.getInputStream());
      try {
        while ((ls_str = ls_in.readLine()) != null) {
            res+=("<a href=\"redigeeri.cgi?");
            res+=(ls_str);
            res+=("\">");
            res+=("R</a> ");
            res+=("<a href=\"");
	    res+=(ls_str);
            res+=("\">");
            res+=(ls_str);
            res+=("</a>");
            res+=("<br>");
	}
      } catch (IOException e) {
	System.out.println("miski viga!"); 
        e.printStackTrace();         
      }
    } catch (Exception err) {
     err.printStackTrace();
    }
    try {
      out.writeBytes("Content-Length: " + res.length() +"\r\n");
      out.writeBytes("content-type: text/html\r\n");
      out.writeBytes("\r\n");
      out.writeBytes(res);
      out.close();  
    } catch (Exception e) { 
    }  
  }

  

public static void allparties(DataOutputStream out) throws Exception {     

    URL yahoo = 
     new URL("http://dijkstra.cs.ttu.ee:7777/xstone/xfuns/party_all");
        
       
	BufferedReader in = new BufferedReader(
				new InputStreamReader(
				yahoo.openStream()));

	String inputLine;
    
  // create File and Stream objects
  //File dataFile  = new File("fruit.xml");  // data
  File styleFile = new File("parties.xsl");  // stylesheet
  //InputStream dataStream = new FileInputStream(dataFile);
  InputStream styleStream = new FileInputStream(styleFile);
  
  // create XSLT Source and Result objects
  Source data = new StreamSource(in);
  Source style = new StreamSource(styleStream);
  Result output = new StreamResult(out);
  
  // create Transformer and perform the tranfomation
  Transformer xslt =
    TransformerFactory.newInstance().newTransformer(style);
    
  xslt.transform(data, output); 
 
  /*
    
	while ((inputLine = in.readLine()) != null) {
	   out.writeBytes(inputLine);
    } 
  */  
  in.close();
       
}



public static void addparty(DataOutputStream out, String[] splitargs) 
     throws Exception {     

    String xstone;
    String args;
    
   
          System.out.println("addp starts");
         
    xstone="http://dijkstra.cs.ttu.ee:7777/xstone/xfuns/party_insert?";
    args="1&2&"+splitargs[0]+"&"+splitargs[1]+
          "&16-05-1965&17-05-1965&7&8&9&10&11&12";
    xstone=xstone+args;
         
          System.out.println(xstone);
    
    URL yahoo = new URL(xstone);
               
	BufferedReader in = new BufferedReader(
				new InputStreamReader(
				yahoo.openStream()));

	String inputLine;
    
  // create File and Stream objects
  //File dataFile  = new File("fruit.xml");  // data
  File styleFile = new File("insert_party_result.xsl");  // stylesheet
  //InputStream dataStream = new FileInputStream(dataFile);
  InputStream styleStream = new FileInputStream(styleFile);
  
  // create XSLT Source and Result objects
  Source data = new StreamSource(in);
  Source style = new StreamSource(styleStream);
  Result output = new StreamResult(out);
  
  // create Transformer and perform the tranfomation
  Transformer xslt =
    TransformerFactory.newInstance().newTransformer(style);
    
  xslt.transform(data, output); 
 
  /*
    
	while ((inputLine = in.readLine()) != null) {
	   out.writeBytes(inputLine);
    } 
  */  
  in.close();
       
}



 public static String[] split(String input, String separator) {
    int len;
    int count;
    int pos;
    //String separator=",";
    int ws;
    int we;
    String[] words;
   
   /* count the number of separators: 
       then we know the required size of the array */
    
    len=input.length();
    count=0;
    pos=-1;
    for(;;) { // loop over all occurrences of separator in input
      pos=input.indexOf(separator,pos+1);  // search from last pos found!
      if (pos<0) break; // none found after pos
      count++;  
    }  
      
    // let us print some useful debug information
    //System.out.println("\nFound "+count+" separators "+separator);    
    
    // make a suitable array    
    words=new String[count+1];  
    
    // loop again over the input, this time collecting strings    
    ws=0;  // word start
    we=ws+1; // word end
    count=0;
    pos=-1;
    for(;;) { // again, loop over all occurrences of separator in input
      pos=input.indexOf(separator,pos+1);  // search from last pos found!
      if (pos<0) {
        // no separator found after pos: take to end of string
        we=input.length();
      } else {                
        // separator found
        we=pos;
      }  
      words[count]=input.substring(ws,we).trim(); // take substring, remove spaces          
      ws=pos+separator.length(); // this is where the next word will start
      count++;  
      if (pos<0) break;
    }  
  
    return words; 
 }    

 

}