`
benfreer
  • 浏览: 105131 次
  • 性别: Icon_minigender_2
  • 来自: 沈阳
文章分类
社区版块
存档分类
最新评论

HttpURLConnection 通过对象流实现客户端和服务器端的数据交互

 
阅读更多
需求:客户端向服务器端发送请求,服务器端接收到请求后进行流程处理,生成list对象,返回到客户端。

1.传递的包装类(必须序列化)
  package com;
  import java.io.Serializable;
    /*
     * 使用对象流序列化和反序列化对象
     * 1.创建一个对象,这个对象将被序列化,并写入文件中,前提是:当前类实现了Serializable接口
     * 2.实例化ObjectOutputStream的对象
     * 3.调用ObjectOutputStream类的writeObject()方法,将对象写入流中
     * 4.实例化ObjectInputStream类的对象
     * 5.调用ObjectInputStream类的readObject()方法,获取对象的时候要进行强制类型转化
     *
     * transient关键字
     * 可以保护对象中的敏感信息不被写入到对象流中
     */
    public class Student implements Serializable{
        private String name;
        private int age;
        public Student(String name,int age){
            this.name=name;
            this.age=age;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
    }



2.数据流写的方法
package com;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;

import javax.servlet.ServletException;

public class TaskSendMsg {
    
    public TaskSendMsg() {}
    
    public void sendM(String url)throws ServletException, IOException{
        List<Student> a = new ArrayList<Student>();
        a.add(new Student("1",2));
        a.add(new Student("2",2));
        a.add(new Student("3",2));
        
        URL objUrl = new URL(url);
        HttpURLConnection httpConn = null;
        OutputStream output = null;
        
        httpConn = (HttpURLConnection) objUrl.openConnection();
        HttpURLConnection.setFollowRedirects(true);
        httpConn.setDoOutput(true);
        httpConn.setRequestMethod("POST");//请求方法的动作
        httpConn.setRequestProperty("Content-Type", "text/xml");
        httpConn.connect();
        output = httpConn.getOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(output);
       // 写入请求参数
        oos.writeObject(a);
         oos.flush();
        oos.close();
        System.out.println("send ok");
        int code = httpConn.getResponseCode();
        System.out.println("code " + code);
        System.out.println(httpConn.getResponseMessage());
}




3.Servlet中调用数据流写入方法,向特定的url返回封装后的list
package com;


import javax.servlet.ServletContext;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;


public class TaskServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    private static String encoding = "UTF-8";
    private Log log = LogFactory.getLog(TaskServlet.class);
    protected void service(HttpServletRequest req, HttpServletResponse resp) {
       
       //获取请求的IP地址,用来处理响应的值,与接收端协商定义
        String respUrl = "http://" + req.getServerName() //服务器地址  
        + ":" + req.getServerPort()           //端口号  
        + "/task"  ;    //请求页面或其他地址  
    
        //通过字节流写返回值,传回给请求的URL
        TaskSendMsg ts = new TaskSendMsg();
        try {
            ts.sendM(respUrl);
        } catch (Exception e) {
            e.printStackTrace();
        } 
     }
}


4.接收端获取数据流
package com;

import java.io.ObjectInputStream;
import java.util.List;

import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.Student;



public class TestServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
        protected void service(HttpServletRequest req, HttpServletResponse resp) {
        try {
            System.out.println("begin read");
            
            List<Student> students =null;
           
            ServletInputStream inStream = req.getInputStream(); // 取HTTP请求流
            ObjectInputStream ois = new ObjectInputStream(inStream);
            
          //依次从对象流中取出list
            while(inStream.available()>0){
                students=(List<Student>)ois.readObject();
                for(Student s:students){
                   System.out.println("获取的Student的名字有:"+s.getName());
                }
            }
           inStream.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
      }
	
}



在浏览器输入http://服务器IP:端口/服务器servlet对应的方法
会在TestServlet中获取传递的Student信息。


servlet配置:
servlet直接实现service方法即可,在web.xml中配置路径
 
  <servlet>
    <servlet-name>test_servlet</servlet-name>
	  <servlet-class>com.TestServlet</servlet-class>   
	  <load-on-startup>1</load-on-startup>
    </servlet>
  
  <servlet-mapping>
	<servlet-name>test_servlet</servlet-name>
	<url-pattern>/ajax/test</url-pattern>
  </servlet-mapping> 


在浏览器上 输入http://localhost:8080/ajax/test
执行servlet中的service程序。
分享到:
评论

相关推荐

    Android客户端和服务器端数据交互Demo01.zip

    这个"Android客户端和服务器端数据交互Demo01.zip"应该包含一个示例项目,展示了如何在Android平台上进行这种交互。下面,我们将深入探讨这个主题,并基于"参考博客.txt"和"Android客户端和服务器端数据交互Demo01...

    Android客户端和服务器端数据交互Demo04.zip

    这个名为"Android客户端和服务器端数据交互Demo04.zip"的压缩包文件很可能是为了演示如何在Android应用中实现这种交互。以下是对这个主题的详细解释: 一、Android客户端 Android客户端通常指的是运行在Android设备...

    Android客户端与服务器端的json数据交互(内含大量知识点)

    在Android应用开发中,客户端与服务器端的数据交互是不可或缺的一部分,JSON作为一种轻量级的数据交换格式,被广泛用于Android和服务器之间的通信。本教程将详细阐述Android客户端如何使用JSON进行数据交互,包括...

    android使用json客户端和服务器端数据交互

    本教程将详细讲解如何在Android客户端和Servlet服务器端利用JSON进行数据交互。 首先,理解JSON(JavaScript Object Notation)的基本结构。JSON是一种文本格式,易于人阅读和编写,同时也易于机器解析和生成。它...

    基于json数据交互Android客户端与服务器端

    总结,实现“基于json数据交互Android客户端与服务器端”涉及到Android网络编程、文件操作、JSON解析、异步处理等多个技术领域。理解并掌握这些知识点,将有助于开发者构建功能丰富的Android应用,实现高效的数据...

    WirelessOrder客户端和服务器端+mysql 简单android无线订餐系统

    WirelessOrder系统是一个轻量级的解决方案,主要由Android客户端应用和服务器端接口组成,实现了用户通过手机端进行菜品浏览、选择、下单和支付等功能。该系统适合初学者进行学习和实践,有助于理解Android应用程序...

    基于SSH的Android客户端与服务器端的数据交互.pdf

    在Android客户端与服务器端的数据交互中,JSON通常被用作数据传输的载体,因为它能够有效地封装复杂的数据结构,并且易于在不同语言之间进行解析和生成。 3.2 SSH框架SSH框架在JAVA EE服务器端的应用SSH框架是...

    android客户端和服务器端交互

    总的来说,Android客户端与服务器端交互的过程涉及网络请求、数据格式处理、安全性措施以及用户体验优化等多个技术点。开发者需要熟练掌握这些知识,并在实际项目中灵活运用,以构建稳定、安全的移动应用。

    android客户端与服务器数据交互的Demo

    本教程将深入探讨Android客户端如何与服务器进行有效的数据交互,以及如何实现数据的上传和接收。 首先,我们要理解数据交互的基本流程。在Android客户端与服务器的数据交互中,通常涉及到以下几个步骤: 1. **...

    android 客户端 和 服务器端

    本话题主要关注Android客户端与服务器端通过GET和POST方法进行数据传输的基本原理和实现。 一、GET与POST方法 1. GET方法:GET是最常见的HTTP请求方法,主要用于从服务器获取资源。它将参数附加到URL后面,通过...

    Android通过get,post方式客户端与服务器端交互实例

    总结,Android客户端与服务器端交互涉及HTTP协议中的GET和POST方法,可以通过原生的HttpURLConnection或者第三方库如OkHttp实现。GET用于获取资源,POST则用于提交数据。在实际应用中,还需要考虑安全性和性能优化。...

    android客户端与后台服务器交互

    本示例探讨了如何实现Android客户端与基于Struts、Hibernate和Spring的后台服务器之间的数据交互,使用JSON作为数据传输格式。对于初学者来说,这是一个很好的起点,因为它涵盖了多个关键的技术栈。 首先,让我们...

    android客户端与服务端交互简单登录实现

    在Android应用开发中,客户端与服务端的交互...综上所述,实现Android客户端与服务端的简单登录交互涉及客户端UI设计、网络请求处理、服务端数据验证等多个环节。理解并掌握这些知识点对于Android开发者来说至关重要。

    Android客户端与服务器端通信Demo

    本Demo着重展示了这一核心概念,通过实例来帮助开发者理解和掌握Android客户端与服务器端交互的流程。 首先,我们要了解Android客户端与服务器通信的基本原理。通常,这种通信是基于HTTP或HTTPS协议的,使用RESTful...

    使用HttpUrlConnection实现上传文件 服务器端代码

    总结,通过`HttpURLConnection`实现文件上传需要理解HTTP请求的构建,以及服务器端如何解析和处理这些请求。Apache Commons库简化了这一过程,但同时也需要注意安全性和性能优化。在实际项目中,可能还需要处理错误...

    Android服务器端与客户端的数据交互

    在Android应用开发中,服务器端与客户端的数据交互是至关重要的环节,这涉及到用户信息的验证、数据的获取和存储等多个方面。在这个过程中,通常会采用HTTP或HTTPS协议进行通信,利用JSON或XML等数据格式传输数据。...

Global site tag (gtag.js) - Google Analytics