hessian序列化
背景:
之前一篇文章介绍了java的序列化,http://blog.csdn.net/bohu83/article/details/51124079
在java的序列化里面也是介绍rpc框架时候,在远程调用中,需要把参数和返回值通过网络传输,这个使用就要用到序列化将对象转变成字节流,从一端到另一端之后再反序列化回来变成对象。作用了说了,今天在看文章的时候发现别人贴出效率对比,hessian比java的序列化高出很多。特意补充下相关知识点。
百科:Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能。 相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据。
hessian序列化
hessian序列化比Java序列化高效很多,而且生成的字节流也要短很多。
测试的demo:客户端通过Hessian***协议序列化对象,通过Http Post方式提交到服务器端。
- package hessian;
- import java.io.ByteArrayOutputStream;
- import java.io.InputStream;
- import java.util.Date;
- import org.apache.http.HttpEntity;
- import org.apache.http.client.methods.CloseableHttpResponse;
- import org.apache.http.client.methods.HttpPost;
- import org.apache.http.entity.ByteArrayEntity;
- import org.apache.http.entity.ContentType;
- import org.apache.http.impl.client.CloseableHttpClient;
- import org.apache.http.impl.client.HttpClients;
- import com.caucho.hessian.io.Hessian2Input;
- import com.caucho.hessian.io.Hessian2Output;
- public class Test {
- public static String urlName = “http://localhost:8080/springmvc-chapter6/hello”;
- public static void main(String[] args) throws Throwable {
- // 序列化
- ByteArrayOutputStream os = new ByteArrayOutputStream();
- Hessian2Output h2o = new Hessian2Output(os);
- h2o.startMessage();
- h2o.writeObject(getPerson());
- h2o.writeString(”I am client.”);
- h2o.completeMessage();
- h2o.close();
- byte[] buffer = os.toByteArray();
- os.close();
- ByteArrayEntity byteArrayEntity = new ByteArrayEntity(buffer,
- ContentType.create(”x-application/hessian”, “UTF-8”));
- CloseableHttpClient client = HttpClients.createDefault();
- HttpPost post = new HttpPost(urlName);
- post.setEntity(byteArrayEntity);
- CloseableHttpResponse response = client.execute(post);
- System.out.println(”response status:\n”
- + response.getStatusLine().getStatusCode());
- HttpEntity body = response.getEntity();
- System.out.println(”body:”+body);
- // InputStream is = body.getContent();
- // Hessian2Input h2i = new Hessian2Input(is);
- // h2i.startMessage();
- //
- // Person person = (Person) h2i.readObject();
- // System.out.println(“response:\n” + person.toString());
- // System.out.println(h2i.readString());
- //
- // h2i.completeMessage();
- // h2i.close();
- // is.close();
- }
- public static Person getPerson() {
- Person person = new Person();
- person.setAddress(new String[] { “Beijing”, “*”, “GuangZhou” });
- person.setBrithday(new Date());
- person.setGender(false);
- person.setHeight(168.5D);
- person.setId(300);
- person.setName(”Jack”);
- person.setPhone(188888888);
- person.setWeight(55.2F);
- return person;
- }
- }
package hessian;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.Date;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.entity.ContentType;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import com.caucho.hessian.io.Hessian2Input;
import com.caucho.hessian.io.Hessian2Output;
public class Test {
public static String urlName = "http://localhost:8080/springmvc-chapter6/hello";
public static void main(String[] args) throws Throwable {
// 序列化
ByteArrayOutputStream os = new ByteArrayOutputStream();
Hessian2Output h2o = new Hessian2Output(os);
h2o.startMessage();
h2o.writeObject(getPerson());
h2o.writeString("I am client.");
h2o.completeMessage();
h2o.close();
byte[] buffer = os.toByteArray();
os.close();
ByteArrayEntity byteArrayEntity = new ByteArrayEntity(buffer,
ContentType.create("x-application/hessian", "UTF-8"));
CloseableHttpClient client = HttpClients.createDefault();
HttpPost post = new HttpPost(urlName);
post.setEntity(byteArrayEntity);
CloseableHttpResponse response = client.execute(post);
System.out.println("response status:\n"
+ response.getStatusLine().getStatusCode());
HttpEntity body = response.getEntity();
System.out.println("body:"+body);
// InputStream is = body.getContent();
// Hessian2Input h2i = new Hessian2Input(is);
// h2i.startMessage();
//
// Person person = (Person) h2i.readObject();
// System.out.println("response:\n" + person.toString());
// System.out.println(h2i.readString());
//
// h2i.completeMessage();
// h2i.close();
// is.close();
}
public static Person getPerson() {
Person person = new Person();
person.setAddress(new String[] { "Beijing", "*", "GuangZhou" });
person.setBrithday(new Date());
person.setGender(false);
person.setHeight(168.5D);
person.setId(300);
person.setName("Jack");
person.setPhone(188888888);
person.setWeight(55.2F);
return person;
}
}
接受:
- package cn.javass.chapter6.web.controller;
- import hessian.Person;
- import java.io.IOException;
- import javax.servlet.ServletInputStream;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.servlet.ModelAndView;
- import com.caucho.hessian.io.Hessian2Input;
- //@RequestMapping
- @Controller
- public class HelloWorldController {
- @RequestMapping(value = “/hello”)
- public String helloWorld(HttpServletRequest request, HttpServletResponse response) throws IOException {
- // 处理请求
- ServletInputStream sis = request.getInputStream();
- Hessian2Input h2i = new Hessian2Input(sis);
- h2i.startMessage();
- Person person = (Person) h2i.readObject();
- System.out.println(”receive:\n” + person.toString());
- System.out.println(h2i.readString());
- h2i.completeMessage();
- h2i.close();
- sis.close();
- return person.toString();
- }
- }
package cn.javass.chapter6.web.controller;
import hessian.Person;
import java.io.IOException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.caucho.hessian.io.Hessian2Input;
//@RequestMapping
@Controller
public class HelloWorldController {
@RequestMapping(value = "/hello")
public String helloWorld(HttpServletRequest request, HttpServletResponse response) throws IOException {
// 处理请求
ServletInputStream sis = request.getInputStream();
Hessian2Input h2i = new Hessian2Input(sis);
h2i.startMessage();
Person person = (Person) h2i.readObject();
System.out.println("receive:\n" + person.toString());
System.out.println(h2i.readString());
h2i.completeMessage();
h2i.close();
sis.close();
return person.toString();
}
}
- package hessian;
- import java.io.Serializable;
- import java.util.Date;
- public class Person implements Serializable {
- private static final long serialVersionUID = -1923645274767028479L;
- private String[] address;
- private Date brithday;
- private boolean gender;
- private double height;
- private int id;
- private String name;
- private int phone;
- private float weight;
- public String[] getAddress() {
- return address;
- }
- public void setAddress(String[] address) {
- this.address = address;
- }
- public Date getBrithday() {
- return brithday;
- }
- public void setBrithday(Date brithday) {
- this.brithday = brithday;
- }
- public boolean isGender() {
- return gender;
- }
- public void setGender(boolean gender) {
- this.gender = gender;
- }
- public double getHeight() {
- return height;
- }
- public void setHeight(double height) {
- this.height = height;
- }
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getPhone() {
- return phone;
- }
- public void setPhone(int phone) {
- this.phone = phone;
- }
- public float getWeight() {
- return weight;
- }
- public void setWeight(float weight) {
- this.weight = weight;
- }
- }
package hessian;
import java.io.Serializable;
import java.util.Date;
public class Person implements Serializable {
private static final long serialVersionUID = -1923645274767028479L;
private String[] address;
private Date brithday;
private boolean gender;
private double height;
private int id;
private String name;
private int phone;
private float weight;
public String[] getAddress() {
return address;
}
public void setAddress(String[] address) {
this.address = address;
}
public Date getBrithday() {
return brithday;
}
public void setBrithday(Date brithday) {
this.brithday = brithday;
}
public boolean isGender() {
return gender;
}
public void setGender(boolean gender) {
this.gender = gender;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPhone() {
return phone;
}
public void setPhone(int phone) {
this.phone = phone;
}
public float getWeight() {
return weight;
}
public void setWeight(float weight) {
this.weight = weight;
}
}
运行结果如下:
- 2016-04-22 17:49:23 [http-8080-1] DEBUG org.springframework.web.servlet.DispatcherServlet - DispatcherServlet with name ‘chapter6’ processing POST request for [/springmvc-chapter6/hello]
- 2016-04-22 17:49:23 [http-8080-1] DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Looking up handler method for path /hello
- 2016-04-22 17:49:24 [http-8080-1] DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Returning handler method [public java.lang.String cn.javass.chapter6.web.controller.HelloWorldController.helloWorld(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) throws java.io.IOException]
- 2016-04-22 17:49:24 [http-8080-1] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean ‘helloWorldController’
- receive:
- Person [address=[Beijing, *, GuangZhou], brithday=Fri Apr 22 17:49:23 CST 2016, gender=false, height=168.5, id=300, name=Jack, phone=188888888, weight=55.2]
- I am client.
- 2016-04-22 17:49:26 [http-8080-1] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Invoking afterPropertiesSet() on bean with name ‘Person [address=[Beijing, *, GuangZhou], brithday=Fri Apr 22 17:49:23 CST 2016, gender=false, height=168.5, id=300, name=Jack, phone=188888888, weight=55.2]’
- 2016-04-22 17:49:26 [http-8080-1] DEBUG org.springframework.web.servlet.DispatcherServlet - Rendering view [org.springframework.web.servlet.view.JstlView: name ‘Person [address=[Beijing, *, GuangZhou], brithday=Fri Apr 22 17:49:23 CST 2016, gender=false, height=168.5, id=300, name=Jack, phone=188888888, weight=55.2]’; URL [/WEB-INF/jsp/Person [address=[Beijing, *, GuangZhou], brithday=Fri Apr 22 17:49:23 CST 2016, gender=false, height=168.5, id=300, name=Jack, phone=188888888, weight=55.2].jsp]] in DispatcherServlet with name ‘chapter6’
- 2016-04-22 17:49:26 [http-8080-1] DEBUG org.springframework.web.servlet.view.JstlView - Forwarding to resource [/WEB-INF/jsp/Person [address=[Beijing, *, GuangZhou], brithday=Fri Apr 22 17:49:23 CST 2016, gender=false, height=168.5, id=300, name=Jack, phone=188888888, weight=55.2].jsp] in InternalResourceView ‘Person [address=[Beijing, *, GuangZhou], brithday=Fri Apr 22 17:49:23 CST 2016, gender=false, height=168.5, id=300, name=Jack, phone=188888888, weight=55.2]’
- 2016-04-22 17:49:26 [http-8080-1] DEBUG org.springframework.web.servlet.DispatcherServlet - Successfully completed request
2016-04-22 17:49:23 [http-8080-1] DEBUG org.springframework.web.servlet.DispatcherServlet - DispatcherServlet with name 'chapter6' processing POST request for [/springmvc-chapter6/hello]
2016-04-22 17:49:23 [http-8080-1] DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Looking up handler method for path /hello
2016-04-22 17:49:24 [http-8080-1] DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Returning handler method [public java.lang.String cn.javass.chapter6.web.controller.HelloWorldController.helloWorld(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) throws java.io.IOException]
2016-04-22 17:49:24 [http-8080-1] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'helloWorldController'
receive:
Person [address=[Beijing, *, GuangZhou], brithday=Fri Apr 22 17:49:23 CST 2016, gender=false, height=168.5, id=300, name=Jack, phone=188888888, weight=55.2]
I am client.
2016-04-22 17:49:26 [http-8080-1] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Invoking afterPropertiesSet() on bean with name 'Person [address=[Beijing, *, GuangZhou], brithday=Fri Apr 22 17:49:23 CST 2016, gender=false, height=168.5, id=300, name=Jack, phone=188888888, weight=55.2]'
2016-04-22 17:49:26 [http-8080-1] DEBUG org.springframework.web.servlet.DispatcherServlet - Rendering view [org.springframework.web.servlet.view.JstlView: name 'Person [address=[Beijing, *, GuangZhou], brithday=Fri Apr 22 17:49:23 CST 2016, gender=false, height=168.5, id=300, name=Jack, phone=188888888, weight=55.2]'; URL [/WEB-INF/jsp/Person [address=[Beijing, *, GuangZhou], brithday=Fri Apr 22 17:49:23 CST 2016, gender=false, height=168.5, id=300, name=Jack, phone=188888888, weight=55.2].jsp]] in DispatcherServlet with name 'chapter6'
2016-04-22 17:49:26 [http-8080-1] DEBUG org.springframework.web.servlet.view.JstlView - Forwarding to resource [/WEB-INF/jsp/Person [address=[Beijing, *, GuangZhou], brithday=Fri Apr 22 17:49:23 CST 2016, gender=false, height=168.5, id=300, name=Jack, phone=188888888, weight=55.2].jsp] in InternalResourceView 'Person [address=[Beijing, *, GuangZhou], brithday=Fri Apr 22 17:49:23 CST 2016, gender=false, height=168.5, id=300, name=Jack, phone=188888888, weight=55.2]'
2016-04-22 17:49:26 [http-8080-1] DEBUG org.springframework.web.servlet.DispatcherServlet - Successfully completed request
1、序列化对象要实现java.io.Serializable接口。
2、单文本传输没必要使用hessian,pojo适合用hessian,但是要注意序列化的规范,可能特殊类型支持的不够完善。
本文是是初步使用,背后的原理待整理。
参考:
http://aiilive.blog.51cto.com/1925756/1601574
背景:
之前一篇文章介绍了java的序列化,http://blog.csdn.net/bohu83/article/details/51124079
在java的序列化里面也是介绍rpc框架时候,在远程调用中,需要把参数和返回值通过网络传输,这个使用就要用到序列化将对象转变成字节流,从一端到另一端之后再反序列化回来变成对象。作用了说了,今天在看文章的时候发现别人贴出效率对比,hessian比java的序列化高出很多。特意补充下相关知识点。
百科:Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能。 相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据。
hessian序列化
hessian序列化比Java序列化高效很多,而且生成的字节流也要短很多。
测试的demo:客户端通过Hessian***协议序列化对象,通过Http Post方式提交到服务器端。
- package hessian;
- import java.io.ByteArrayOutputStream;
- import java.io.InputStream;
- import java.util.Date;
- import org.apache.http.HttpEntity;
- import org.apache.http.client.methods.CloseableHttpResponse;
- import org.apache.http.client.methods.HttpPost;
- import org.apache.http.entity.ByteArrayEntity;
- import org.apache.http.entity.ContentType;
- import org.apache.http.impl.client.CloseableHttpClient;
- import org.apache.http.impl.client.HttpClients;
- import com.caucho.hessian.io.Hessian2Input;
- import com.caucho.hessian.io.Hessian2Output;
- public class Test {
- public static String urlName = “http://localhost:8080/springmvc-chapter6/hello”;
- public static void main(String[] args) throws Throwable {
- // 序列化
- ByteArrayOutputStream os = new ByteArrayOutputStream();
- Hessian2Output h2o = new Hessian2Output(os);
- h2o.startMessage();
- h2o.writeObject(getPerson());
- h2o.writeString(”I am client.”);
- h2o.completeMessage();
- h2o.close();
- byte[] buffer = os.toByteArray();
- os.close();
- ByteArrayEntity byteArrayEntity = new ByteArrayEntity(buffer,
- ContentType.create(”x-application/hessian”, “UTF-8”));
- CloseableHttpClient client = HttpClients.createDefault();
- HttpPost post = new HttpPost(urlName);
- post.setEntity(byteArrayEntity);
- CloseableHttpResponse response = client.execute(post);
- System.out.println(”response status:\n”
- + response.getStatusLine().getStatusCode());
- HttpEntity body = response.getEntity();
- System.out.println(”body:”+body);
- // InputStream is = body.getContent();
- // Hessian2Input h2i = new Hessian2Input(is);
- // h2i.startMessage();
- //
- // Person person = (Person) h2i.readObject();
- // System.out.println(“response:\n” + person.toString());
- // System.out.println(h2i.readString());
- //
- // h2i.completeMessage();
- // h2i.close();
- // is.close();
- }
- public static Person getPerson() {
- Person person = new Person();
- person.setAddress(new String[] { “Beijing”, “*”, “GuangZhou” });
- person.setBrithday(new Date());
- person.setGender(false);
- person.setHeight(168.5D);
- person.setId(300);
- person.setName(”Jack”);
- person.setPhone(188888888);
- person.setWeight(55.2F);
- return person;
- }
- }
package hessian;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.Date;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.entity.ContentType;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import com.caucho.hessian.io.Hessian2Input;
import com.caucho.hessian.io.Hessian2Output;
public class Test {
public static String urlName = "http://localhost:8080/springmvc-chapter6/hello";
public static void main(String[] args) throws Throwable {
// 序列化
ByteArrayOutputStream os = new ByteArrayOutputStream();
Hessian2Output h2o = new Hessian2Output(os);
h2o.startMessage();
h2o.writeObject(getPerson());
h2o.writeString("I am client.");
h2o.completeMessage();
h2o.close();
byte[] buffer = os.toByteArray();
os.close();
ByteArrayEntity byteArrayEntity = new ByteArrayEntity(buffer,
ContentType.create("x-application/hessian", "UTF-8"));
CloseableHttpClient client = HttpClients.createDefault();
HttpPost post = new HttpPost(urlName);
post.setEntity(byteArrayEntity);
CloseableHttpResponse response = client.execute(post);
System.out.println("response status:\n"
+ response.getStatusLine().getStatusCode());
HttpEntity body = response.getEntity();
System.out.println("body:"+body);
// InputStream is = body.getContent();
// Hessian2Input h2i = new Hessian2Input(is);
// h2i.startMessage();
//
// Person person = (Person) h2i.readObject();
// System.out.println("response:\n" + person.toString());
// System.out.println(h2i.readString());
//
// h2i.completeMessage();
// h2i.close();
// is.close();
}
public static Person getPerson() {
Person person = new Person();
person.setAddress(new String[] { "Beijing", "*", "GuangZhou" });
person.setBrithday(new Date());
person.setGender(false);
person.setHeight(168.5D);
person.setId(300);
person.setName("Jack");
person.setPhone(188888888);
person.setWeight(55.2F);
return person;
}
}
接受:
- package cn.javass.chapter6.web.controller;
- import hessian.Person;
- import java.io.IOException;
- import javax.servlet.ServletInputStream;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.servlet.ModelAndView;
- import com.caucho.hessian.io.Hessian2Input;
- //@RequestMapping
- @Controller
- public class HelloWorldController {
- @RequestMapping(value = “/hello”)
- public String helloWorld(HttpServletRequest request, HttpServletResponse response) throws IOException {
- // 处理请求
- ServletInputStream sis = request.getInputStream();
- Hessian2Input h2i = new Hessian2Input(sis);
- h2i.startMessage();
- Person person = (Person) h2i.readObject();
- System.out.println(”receive:\n” + person.toString());
- System.out.println(h2i.readString());
- h2i.completeMessage();
- h2i.close();
- sis.close();
- return person.toString();
- }
- }
package cn.javass.chapter6.web.controller;
import hessian.Person;
import java.io.IOException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.caucho.hessian.io.Hessian2Input;
//@RequestMapping
@Controller
public class HelloWorldController {
@RequestMapping(value = "/hello")
public String helloWorld(HttpServletRequest request, HttpServletResponse response) throws IOException {
// 处理请求
ServletInputStream sis = request.getInputStream();
Hessian2Input h2i = new Hessian2Input(sis);
h2i.startMessage();
Person person = (Person) h2i.readObject();
System.out.println("receive:\n" + person.toString());
System.out.println(h2i.readString());
h2i.completeMessage();
h2i.close();
sis.close();
return person.toString();
}
}
- package hessian;
- import java.io.Serializable;
- import java.util.Date;
- public class Person implements Serializable {
- private static final long serialVersionUID = -1923645274767028479L;
- private String[] address;
- private Date brithday;
- private boolean gender;
- private double height;
- private int id;
- private String name;
- private int phone;
- private float weight;
- public String[] getAddress() {
- return address;
- }
- public void setAddress(String[] address) {
- this.address = address;
- }
- public Date getBrithday() {
- return brithday;
- }
- public void setBrithday(Date brithday) {
- this.brithday = brithday;
- }
- public boolean isGender() {
- return gender;
- }
- public void setGender(boolean gender) {
- this.gender = gender;
- }
- public double getHeight() {
- return height;
- }
- public void setHeight(double height) {
- this.height = height;
- }
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getPhone() {
- return phone;
- }
- public void setPhone(int phone) {
- this.phone = phone;
- }
- public float getWeight() {
- return weight;
- }
- public void setWeight(float weight) {
- this.weight = weight;
- }
- }
package hessian;
import java.io.Serializable;
import java.util.Date;
public class Person implements Serializable {
private static final long serialVersionUID = -1923645274767028479L;
private String[] address;
private Date brithday;
private boolean gender;
private double height;
private int id;
private String name;
private int phone;
private float weight;
public String[] getAddress() {
return address;
}
public void setAddress(String[] address) {
this.address = address;
}
public Date getBrithday() {
return brithday;
}
public void setBrithday(Date brithday) {
this.brithday = brithday;
}
public boolean isGender() {
return gender;
}
public void setGender(boolean gender) {
this.gender = gender;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPhone() {
return phone;
}
public void setPhone(int phone) {
this.phone = phone;
}
public float getWeight() {
return weight;
}
public void setWeight(float weight) {
this.weight = weight;
}
}
运行结果如下:
- 2016-04-22 17:49:23 [http-8080-1] DEBUG org.springframework.web.servlet.DispatcherServlet - DispatcherServlet with name ‘chapter6’ processing POST request for [/springmvc-chapter6/hello]
- 2016-04-22 17:49:23 [http-8080-1] DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Looking up handler method for path /hello
- 2016-04-22 17:49:24 [http-8080-1] DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Returning handler method [public java.lang.String cn.javass.chapter6.web.controller.HelloWorldController.helloWorld(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) throws java.io.IOException]
- 2016-04-22 17:49:24 [http-8080-1] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean ‘helloWorldController’
- receive:
- Person [address=[Beijing, *, GuangZhou], brithday=Fri Apr 22 17:49:23 CST 2016, gender=false, height=168.5, id=300, name=Jack, phone=188888888, weight=55.2]
- I am client.
- 2016-04-22 17:49:26 [http-8080-1] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Invoking afterPropertiesSet() on bean with name ‘Person [address=[Beijing, *, GuangZhou], brithday=Fri Apr 22 17:49:23 CST 2016, gender=false, height=168.5, id=300, name=Jack, phone=188888888, weight=55.2]’
- 2016-04-22 17:49:26 [http-8080-1] DEBUG org.springframework.web.servlet.DispatcherServlet - Rendering view [org.springframework.web.servlet.view.JstlView: name ‘Person [address=[Beijing, *, GuangZhou], brithday=Fri Apr 22 17:49:23 CST 2016, gender=false, height=168.5, id=300, name=Jack, phone=188888888, weight=55.2]’; URL [/WEB-INF/jsp/Person [address=[Beijing, *, GuangZhou], brithday=Fri Apr 22 17:49:23 CST 2016, gender=false, height=168.5, id=300, name=Jack, phone=188888888, weight=55.2].jsp]] in DispatcherServlet with name ‘chapter6’
- 2016-04-22 17:49:26 [http-8080-1] DEBUG org.springframework.web.servlet.view.JstlView - Forwarding to resource [/WEB-INF/jsp/Person [address=[Beijing, *, GuangZhou], brithday=Fri Apr 22 17:49:23 CST 2016, gender=false, height=168.5, id=300, name=Jack, phone=188888888, weight=55.2].jsp] in InternalResourceView ‘Person [address=[Beijing, *, GuangZhou], brithday=Fri Apr 22 17:49:23 CST 2016, gender=false, height=168.5, id=300, name=Jack, phone=188888888, weight=55.2]’
- 2016-04-22 17:49:26 [http-8080-1] DEBUG org.springframework.web.servlet.DispatcherServlet - Successfully completed request
2016-04-22 17:49:23 [http-8080-1] DEBUG org.springframework.web.servlet.DispatcherServlet - DispatcherServlet with name 'chapter6' processing POST request for [/springmvc-chapter6/hello]
2016-04-22 17:49:23 [http-8080-1] DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Looking up handler method for path /hello
2016-04-22 17:49:24 [http-8080-1] DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Returning handler method [public java.lang.String cn.javass.chapter6.web.controller.HelloWorldController.helloWorld(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) throws java.io.IOException]
2016-04-22 17:49:24 [http-8080-1] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'helloWorldController'
receive:
Person [address=[Beijing, *, GuangZhou], brithday=Fri Apr 22 17:49:23 CST 2016, gender=false, height=168.5, id=300, name=Jack, phone=188888888, weight=55.2]
I am client.
2016-04-22 17:49:26 [http-8080-1] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Invoking afterPropertiesSet() on bean with name 'Person [address=[Beijing, *, GuangZhou], brithday=Fri Apr 22 17:49:23 CST 2016, gender=false, height=168.5, id=300, name=Jack, phone=188888888, weight=55.2]'
2016-04-22 17:49:26 [http-8080-1] DEBUG org.springframework.web.servlet.DispatcherServlet - Rendering view [org.springframework.web.servlet.view.JstlView: name 'Person [address=[Beijing, *, GuangZhou], brithday=Fri Apr 22 17:49:23 CST 2016, gender=false, height=168.5, id=300, name=Jack, phone=188888888, weight=55.2]'; URL [/WEB-INF/jsp/Person [address=[Beijing, *, GuangZhou], brithday=Fri Apr 22 17:49:23 CST 2016, gender=false, height=168.5, id=300, name=Jack, phone=188888888, weight=55.2].jsp]] in DispatcherServlet with name 'chapter6'
2016-04-22 17:49:26 [http-8080-1] DEBUG org.springframework.web.servlet.view.JstlView - Forwarding to resource [/WEB-INF/jsp/Person [address=[Beijing, *, GuangZhou], brithday=Fri Apr 22 17:49:23 CST 2016, gender=false, height=168.5, id=300, name=Jack, phone=188888888, weight=55.2].jsp] in InternalResourceView 'Person [address=[Beijing, *, GuangZhou], brithday=Fri Apr 22 17:49:23 CST 2016, gender=false, height=168.5, id=300, name=Jack, phone=188888888, weight=55.2]'
2016-04-22 17:49:26 [http-8080-1] DEBUG org.springframework.web.servlet.DispatcherServlet - Successfully completed request
1、序列化对象要实现java.io.Serializable接口。
2、单文本传输没必要使用hessian,pojo适合用hessian,但是要注意序列化的规范,可能特殊类型支持的不够完善。
本文是是初步使用,背后的原理待整理。
参考:
http://aiilive.blog.51cto.com/1925756/1601574