Java在localhost上的HTTP响应无效

时间:2012-04-29 23:35:33

标签: java http networking

我正在为学校项目编写一个包,用户可以在其中指定服务器URL并获取它返回的xml。我在客户方面遇到了错误。

Mock API类

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

public class ParkingLotInstance {
/*
 * Parking Lot API instance
 *      Constructor
 *          URL - String
 *          Port - int
 */

public static URL serverURL;

public ParkingLotInstance( URL connurl){
    serverURL = connurl;
}

public String getParkingLotInfo(){
    //Get a response from API server

    URL APIurl = this.serverURL;
    System.out.println(APIurl);
    try {
        BufferedReader in = new BufferedReader(
                new InputStreamReader(APIurl.openStream()));

        String APIresponse;
        while ((APIresponse = in.readLine()) != null)
            return APIresponse;
        in.close();

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return null;

}

public ArrayList parseParkingLotInfo( String XML ){
    //Parse XML into array list

    return null;
}
}

主要课程

package parkinglot_api;

import java.net.MalformedURLException;
import java.net.URL;


public class Example {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
    URL serverURL;
    try {
        serverURL = new URL("http://localhost:8080");

        ParkingLotInstance API = new ParkingLotInstance(serverURL);

        String parkingLotXML = API.getParkingLotInfo();

        System.out.println(parkingLotXML);
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

 }

我得到的错误

http://localhost:8080
null
java.io.IOException: Invalid Http response
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at java.net.URL.openStream(Unknown Source)
at parkinglot_api.ParkingLotInstance.getParkingLotInfo(ParkingLotInstance.java:28)
at parkinglot_api.Example.main(Example.java:20)

服务器代码

https://bitbucket.org/it460/parking-lot-api/src/f7095b71eb11/server

我不太了解Java特别是网络的东西,所以上面是在localhost:8080上运行服务器的代码的链接,并吐出xml。不知道在哪里设置标题,说实话,它很高兴它超过了xml。我需要调整这个的原因是因为教授希望我将客户端打包,以便另一个组可以指定应用服务器URL并获取数据。这就是我在这里发布的代码中所尝试的内容。

2 个答案:

答案 0 :(得分:3)

在Response类中包含以下内容:

response += "HTTP/1.1 200 OK\n";
response += "Content-Type: application/xml\n\n";

if ( format.equals("xml")){
      // Retrieve XML Document
       String xml = LotFromDB.getParkingLotXML();
       response += xml;
}

注意:您应该避免编写自己的Web服务器。而是使用现有的Web服务器,这将有很大帮助。上述更改将解决您当前的问题,但如果继续这一行,您将遇到更多问题。我建议您考虑使用任何servlet engine服务器实现。此外,在客户端上使用成熟的HTTP客户端库,例如Apache Http Client而不是java.net.URL类。

答案 1 :(得分:1)

看起来像是标题处理的问题。请使用tcp monitor(例如:http://ws.apache.org/commons/tcpmon表单apache)来查找问题。 例如,它可能是由不正确的字符编码或消息多部分编码(猜测)的特定方式引起的。