首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

HttpClient 的有关问题 在java 下编译出错

2011-12-22 
HttpClient 的问题 在java 下编译出错。我是新手,所以一边看代码,一边编译,加深理解,结果,一编译就报错,但

HttpClient 的问题 在java 下编译出错。
我是新手,所以一边看代码,一边编译,加深理解,结果,一编译就报错,
但又不是语法错误,求高手给解释一下。
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.HttpVersion;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.message.BasicHttpResponse;
public class Client {
static URI uri;
/**
* @param args
* @throws IOException 
* @throws ClientProtocolException 
* @throws URISyntaxException 
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1,
HttpStatus.SC_OK, "OK");
System.out.println(response.getProtocolVersion());
System.out.println(response.getStatusLine().getStatusCode());
System.out.println(response.getStatusLine().getReasonPhrase());
System.out.println(response.getStatusLine().toString());


}

}











Exception in thread "main" java.lang.RuntimeException: Stub!
at org.apache.http.message.AbstractHttpMessage.<init>(AbstractHttpMessage.java:6)
at org.apache.http.message.BasicHttpResponse.<init>(BasicHttpResponse.java:8)
at Client.main(Client.java:20)


[解决办法]
异常没捕捉,要么捕捉,要么在main方法上抛出
建议写class时用eclipse,这样自动会给你提示的
[解决办法]
里面一定有会产生异常的方法,抛异常throws +异常类型或者try catch,我还有一个疑问,你怎么没连接URL。给你个简单参考的

Java code
package http.demo;import java.io.IOException;//http://passport.csdn.net/account/login?from=http%3A%2F%2Fhi.csdn.net%3F%26t%3D1317216244import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;import org.apache.commons.httpclient.HttpClient;import org.apache.commons.httpclient.HttpException;import org.apache.commons.httpclient.HttpMethod;import org.apache.commons.httpclient.HttpStatus;import org.apache.commons.httpclient.methods.GetMethod;import org.apache.commons.httpclient.params.HttpMethodParams;public class Httpclient {public static void main(String[] args) throws IOException{    HttpClient httpclient=new HttpClient();    HttpMethod method=new GetMethod("http://baidu.com");    method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler());    try {        int statusCode=httpclient.executeMethod(method);        if(statusCode!=HttpStatus.SC_OK);        {            System.err.println("Method failed: "+method.getStatusLine());        }        byte[] responseBody=method.getResponseBody();        System.out.println(new String(responseBody));    } catch (HttpException e) {        // TODO Auto-generated catch block         System.out.println("Please check your provided http address!");        e.printStackTrace();    } catch (IOException e) {        // TODO Auto-generated catch block        e.printStackTrace();    }        method.releaseConnection();}}
[解决办法]
public class HttpConnect {
public static String readContentFromGet(String getUrlString, String param,
String udcode, String password, String path) throws IOException {
// 拼凑get请求的URL字串,使用URLEncoder.encode对特殊和不可见字符进行编码
// String getURL =getUrlString+URLEncoder.encode(param,udcode);
if (getUrlString.startsWith("https:")) {
// System.setProperty("javax.net.ssl.trustStore",path);
// / System.setProperty("javax.net.ssl.trustStorePassword",chante);
System.setProperty("javax.net.ssl.keyStore", "server.ks");


System.setProperty("javax.net.ssl.keyStorePassword", "Passw0rds");
}
String getURL = getUrlString + param;
URL getUrl = new URL(getURL);
// 根据拼凑的URL,打开连接,URL.openConnection函数会根据URL的类型,
// 返回不同的URLConnection子类的对象,这里URL是一个http,因此实际返回的是HttpURLConnection
HttpURLConnection connection = (HttpURLConnection) getUrl
.openConnection();
// 进行连接,但是实际上get request要在下一句的connection.getInputStream()函数中才会真正发到
// 服务器
connection.connect();
// 取得输入流,并使用Reader读取 ?????????????Reader???
String msg = "";
msg = HttpConnect.convertStreamToString(connection.getInputStream());
System.out.println(msg);
connection.disconnect();
return msg;
}

public static String readContentFromPost(String postUrlString,
String param, String udcode, String password, String path)
throws IOException {
// Post请求的url,与get不同的是不需要带参数
URL postUrl = new URL(postUrlString);
if (postUrlString.startsWith("https:")) {
System.setProperty("javax.net.ssl.trustStore",
"D:\\certi\\server.ks");
System.setProperty("javax.net.ssl.trustStorePassword", "accident");
System
.setProperty("javax.net.ssl.keyStore",
"D:\\certi\\server.ks");
System.setProperty("javax.net.ssl.keyStorePassword", "accident");
}

// 打开连接
HttpURLConnection connection = (HttpURLConnection) postUrl
.openConnection();
// Output to the connection. Default is
// false, set to true because post
// method must write something to the
// connection
// 设置是否向connection输出,因为这个是post请求,参数要放在
// http正文内,因此需要设为true
connection.setDoOutput(true);
// Read from the connection. Default is true.
connection.setDoInput(true);
// Set the post method. Default is GET
connection.setRequestMethod("POST");
// Post cannot use caches
// Post 请求不能使用缓存
connection.setUseCaches(false);
// This method takes effects to
// every instances of this class.
// URLConnection.setFollowRedirects是static函数,作用于所有的URLConnection对象。
// connection.setFollowRedirects(true);

// This methods only
// takes effacts to this
// instance.
// URLConnection.setInstanceFollowRedirects是成员函数,仅作用于当前函数
connection.setInstanceFollowRedirects(true);
// Set the content type to urlencoded,
// because we will write
// some URL-encoded content to the
// connection. Settings above must be set before connect!
// 配置本次连接的Content-type,配置为application/x-www-form-urlencoded的
// 意思是正文是urlencoded编码过的form参数,下面我们可以看到我们对正文内容使用URLEncoder.encode
// 进行编码
connection.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
// 连接,从postUrl.openConnection()至此的配置必须要在connect之前完成,
// 要注意的是connection.getOutputStream会隐含的进行connect。
connection.connect();
DataOutputStream out = new DataOutputStream(connection
.getOutputStream());
// The URL-encoded contend
// 正文,正文内容其实跟get的URL中'?'后的参数字符串一致

String content = URLEncoder.encode(param, udcode);
// DataOutputStream.writeBytes将字符串中的16位的unicode字符以8位的字符形式写道流里面
out.writeBytes(content);

out.flush();
out.close(); // flush and close
String msg = "";
msg = HttpConnect.convertStreamToString(connection.getInputStream());
System.out.println(msg);
connection.disconnect();
return msg;
}

public static String convertStreamToString(InputStream is) {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();

String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");


}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}

return sb.toString();
}

热点排行