java.net.HttpURLConnection——2014年10月27日20:13:39

来源:互联网 发布:mes系统用java开发吗 编辑:程序博客网 时间:2024/06/10 02:31
    常用的Http请求有get和post,get请求可以获取静态页面,也可以把参数放在URL字串后面,传递给servlet,post的请求参数不是放在URL字串里面,而是放在http请求的正文内。
    在Java中可以使用HttpURLConnection发起这两种请求,了解此类,对于了解soap,和编写servlet的自动测试代码都有很大的帮助。

一、get请求

项目结构如下:

1、服务器端

服务器端用的是struts1写的一个web project,也可以使用其它的技术写web project。

2、客户端


3、服务器端代码

package study;import java.io.PrintWriter;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;import org.apache.struts.actions.DispatchAction;/** * HttpURLConnection中服务器端的测试类 */public class service extends DispatchAction {//struts1中请求的默认方法,若要用动态请求,需注释此方法,才能访问其他方法public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception {//设置输出编码格式response.setCharacterEncoding("utf-8");//获得PrintWriter对象PrintWriter out=response.getWriter();//输出out.write("测试成功!");//在控制台打印System.out.println("hello httpURLConnection!");return null;} }
<span style="color:#ff0000;">4、客户端代码</span>
package study;import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLEncoder; public class client { public static void main(String[] arg){ //进行异常捕获; try {             /**              * 创建url,此处还可以动态创建,如:              * String GET_URL="http://localhost:8088/str/login.do";              * String getURL = GET_URL + "?username="+URLEncoder.encode("fat man", "utf-8");              * URLEncoder.encode对特殊和不可见字符进行编码              */URL url=new URL("http://localhost:8088/urlConnection_service/service.do");//获取URLConnection对象,这里URL是一个http,因此实际返回的是HttpURLConnection对象,HttpURLConnection是URLConnection的子类;HttpURLConnection connection=(HttpURLConnection) url.openConnection();//进行连接,这里只是建立了一个与服务器的tcp连接,并没有实际发送http请求;connection.connect();//获取输入流,并读取。注意:此处读取的是服务器对于此次http请求的返回信息,像这次请求的方法中的System.out.println("hello httpURLConnection!")是不会读取的;BufferedReader bufreader=new BufferedReader(new InputStreamReader(connection.getInputStream()));String result="";if((result=bufreader.readLine())!=null){System.out.println(result);}//关闭流;bufreader.close();//关闭连接;connection.disconnect();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}/** * 总结:URLConnection的get请求共有以下几步 * 1、创建url对象 * 2、用url对象获取URLConnection对象 * 3、用URLConnection对象获取输入流 * 4、关闭流 * 5、关闭连接 */ }}
二、post请求

项目结构和服务器端代码与get一样;

4、客户端代码

<span style="font-size:14px;">package study;import java.io.BufferedReader;import java.io.DataOutputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.net.URLEncoder; public class client { public static void main(String[] arg){  //捕获异常 try {//创建urlURL url = new URL("http://localhost:8088/urlConnection_service/service.do");        //获取URLConnection对象        HttpURLConnection connection = (HttpURLConnection) url.openConnection();        //设置是否向connection输出,因为这个是post请求,参数要放在http正文内,因此需要设为true        connection.setDoOutput(true);        // 设置是否从httpUrlConnection读入,默认情况下是true;         connection.setDoInput(true);        // Post 请求不能使用缓存        connection.setUseCaches(false);        // 设定请求的方法为"POST",默认是GET          connection.setRequestMethod("POST");        /**         * 配置本次连接的Content-type,配置为application/x-www-form-urlencoded的        *意思是正文是urlencoded编码过的form参数,下面我们可以看到我们对正文内容使用URLEncoder.encode         *进行编码         */        connection.setRequestProperty("Content-Type",                "application/x-www-form-urlencoded");        // 连接服务器,从postUrl.openConnection()至此的配置必须要在connect之前完成,                connection.connect();        //获取输出流        DataOutputStream out = new DataOutputStream(connection.getOutputStream());        //创建请求参数字符串,post与get不同,post的请求参数是放在http正文中的        String content = "firstname=" + URLEncoder.encode("一个大肥人", "utf-8");        //将字符串中的16位的unicode字符以8位的字符形式写道流里面        out.writeBytes(content);         out.flush();        out.close();        //获取输入流        BufferedReader reader = new BufferedReader(new InputStreamReader(                connection.getInputStream()));        String line;        while ((line = reader.readLine()) != null) {            System.out.println(line);        }        //关闭流        reader.close();        //关闭连接        connection.disconnect();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}/** * 总结:URLConnection的post请求共有以下几步 * 1、创建url对象,此处的url不带参数 * 2、用url对象获取URLConnection对象 * 3、设置URLConnection对象 * 4、创建参数字符串 * 5、用URLConnection对象获取输出流 * 6、将参数字符串写入输出流 * 7、用URLConnection对象获取输入流 * 8、关闭流 * 9、关闭连接 */ }}</span>


0 0
原创粉丝点击