Java 尝试从Android连接时从Glassfish 4.1 servlet获取HTTP 505
我在NetBeans 8附带的Glassfish 4.1上运行带有servlet的Java服务器。我有一个Android应用程序API 19在物理设备Prestigio Grace上运行 servlet通过以JSON格式发送一些数据来响应GET和POST请求。如果我在服务器运行时从浏览器FF 40.0.2发出请求,它工作正常。如果我使用相同的URL从我的Android应用程序执行相同的请求,我会得到状态代码505 Android应用程序中执行GET请求的代码:Java 尝试从Android连接时从Glassfish 4.1 servlet获取HTTP 505,java,android,http,servlets,glassfish,Java,Android,Http,Servlets,Glassfish,我在NetBeans 8附带的Glassfish 4.1上运行带有servlet的Java服务器。我有一个Android应用程序API 19在物理设备Prestigio Grace上运行 servlet通过以JSON格式发送一些数据来响应GET和POST请求。如果我在服务器运行时从浏览器FF 40.0.2发出请求,它工作正常。如果我使用相同的URL从我的Android应用程序执行相同的请求,我会得到状态代码505 Android应用程序中执行GET请求的代码: public String mak
public String makeHttpGetRequest(String urlStr) throws IOException {
URL url = new URL(urlStr);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
if (responseCode == 200) {
InputStreamReader isr = new InputStreamReader(con.getInputStream());
String response = readUntilEndOfStream(isr);
isr.close();
return response;
} else {
throw new IOException("bad status code : " + responseCode + " , from: " + urlStr);
}
}
以及我在servlet中使用的代码:
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
handleRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
handleRequest(request, response);
}
private void handleRequest(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
try {
UniversalAddress adr = params2UniversalAddress(request.getParameterMap());
AvgPricesRenovationState avgPrices = db.getAvgPricesAndRenovationState(adr);
if (avgPrices == null) { //prices for that address are not stored. Now we have to calculate them from scratch
avgPrices = getNewAvgPrices(adr);
}
response.getWriter().write(avgPrices.toHttpParams());
} catch (NullPointerException ex) {
printMissingParametersResponse(request, response);
}
}
为什么我会得到状态代码505,以及如何解决这个问题?urlStr参数表的值是多少?找到了。问题是Android是通过wifi连接的,wifi是一个不同于通过服务器电缆连接的局域网子网。所以这些请求从来没有向服务器提出过。这也是我的想法。您可能使用了localhost,而不是运行服务器的机器的本地IP。