Only Execute Code on Certain Requests Java

Posted by BillPull on Stack Overflow See other posts from Stack Overflow or by BillPull
Published on 2012-04-04T05:25:47Z Indexed on 2012/04/04 5:29 UTC
Read the original article Hit count: 261

Filed under:
|
|

I am building a little API for class and the teacher supplied us with a link to a tutorial that provided a simple webserver that implements Runnable.

I have already written some code that will parse arguments the arguments ( or at least get me the request string ) and some code that will return some simple xml.

however I think certain requests like the one for the favicon are sent I think it is messing up my code. I wrapped that in an if else but it does not seem to be working.

package server;

import java.io.IOException;


import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.*;
import java.io.*; 
import java.net.*;
import parkinglots.*;

public class WorkerRunnable implements Runnable{

protected Socket clientSocket = null;
protected String serverText   = null;

public WorkerRunnable(Socket clientSocket, String serverText) {
    this.clientSocket = clientSocket;
    this.serverText   = serverText;
}

public Boolean authenticateAPI(String key){
    //Authenticate Key against Stored Keys

    //TODO: Create Stored Keys and Compare
    return true;
}

public void run() {
    try {
        InputStream input = clientSocket.getInputStream();
        OutputStream output = clientSocket.getOutputStream();
        long time = System.currentTimeMillis();


        //TODO: Parse args and output different formats and Authentication
        //Parse URL Arguments
        BufferedReader in = new BufferedReader( 
                new InputStreamReader(clientSocket.getInputStream(), "8859_1"));

        String request = in.readLine();

        //Server gets Favicon Request so skip that and goto args
        System.out.println(request);
        if ( request != "GET /favicon.ico HTTP/1.1" && request != "GET / HTTP/1.1" && request != null ){

            String format = "", apikey ="";

            System.out.println("I am Here");

            String request_location = request.split(" ")[1];
            String request_args = request_location.replace("/","");
            request_args = request_args.replace("?","");
            String[] queries = request_args.split("&");

            System.out.println(queries[0]);

            for ( int i = 0; i < queries.length; i++ ){
                if( queries[i] == "format" ){
                    format = queries[i].split("=")[1];
                }
                else if( queries[i] == "apikey" ){
                    apikey = queries[i].split("=")[1];
                }
            }

            if( apikey == "" ){
                apikey = "None";
            }

            if( format == "" ){
                format = "xml";
            }

            Boolean auth = authenticateAPI(apikey);

            if ( auth ){
                if ( format == "xml"){
                    // Retrieve XML Document
                    String xml = LotFromDB.getParkingLotXML();
                    output.write((xml).getBytes());
                }else{
                    //Retrieve JSON
                    String json = LotFromDB.getParkingLotJSON();
                    output.write((json).getBytes());
                }
            }else{
                output.write(("Access Denied - User is Not Authenticated").getBytes());
            }
        }else{
            output.write(("Access Denied Must Pass API Key").getBytes());
        }

        output.close();
        input.close();
        System.out.println("Request processed: " + time);
    } catch (IOException e) {
        //report exceptions
        e.printStackTrace();
    }
}
}

Console output I get

I am Here
format=json
Request processed: 1333516648331
GET /favicon.ico HTTP/1.1
I am Here
favicon.ico
Request processed: 1333516648332

It always returns the XML as well.

This is my first exposure to writing a web server and dealing with networking in Java, which frustrates me a lot in general, So any suggestions here are very appreciated.

© Stack Overflow or respective owner

Related posts about java

Related posts about api