å¨webserviceå¦ä¹ ä¸æå°äºhessian,äºè æ ¸å¿çä¸åæ°æ®ä¼ è¾æ¨¡å¼,ä¸ä¸ªæ¯xml,ä¸ä¸ªæ¯äºè¿å¶,ä»å¤©å¯¹hessianå¦ä¹ å个å顾
     hessiançå¦ä¹ å®ç½(hessian)
     hessianå ¥é¨example
æ°å»ºä¸ä¸ªmavençwebé¡¹ç® pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>stu</groupId>
<artifactId>stu</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>hessian</artifactId>
<packaging>war</packaging>
<dependencies>
<!-- https://mvnrepository.com/artifact/com.caucho/hessian -->
<dependency>
<groupId>com.caucho</groupId>
<artifactId>hessian</artifactId>
<version>4.0.38</version>
</dependency>
<!-- <dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency> -->
</dependencies>
</project>
web.xml
<web-app>
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
<!--apiå®ç°ç±»-->
<init-param>
<param-name>home-class</param-name>
<param-value>server.BasicService</param-value>
</init-param>
<!--api-->
<init-param>
<param-name>home-api</param-name>
<param-value>server.BasicAPI</param-value>
</init-param>
</servlet>
<servlet-mapping>
<url-pattern>/hello</url-pattern>
<servlet-name>hello</servlet-name>
</servlet-mapping>
</web-app>
BasicAPI
package server;
public interface BasicAPI {
public String hello();
}
BasicService
package server;
public class BasicService implements BasicAPI{
private String _greeting = "Hello, world";
public void setGreeting(String greeting)
{
_greeting = greeting;
}
public String hello()
{
return _greeting;
}
}
client
package client;
import com.caucho.hessian.client.HessianProxyFactory;
import server.BasicAPI;
public class HessianClient {
public static void main(String[] args) throws Exception {
//serverå®ä¹Servlet
String url = "http://localhost:8080/hello";
//代çå·¥å
HessianProxyFactory factory = new HessianProxyFactory();
//å建代ç对象
BasicAPI basic = (BasicAPI) factory.create(BasicAPI.class, url);
//è¿ç¨ä»£ç对象访é®
System.out.println("hello(): " + basic.hello());
}
}
     å¯å¨web项ç®(ææ¯ç¨çeclipseå åµçjettyæ件,æå¯å¨é¡¹ç®æ¶å»æäºé¡¹ç®ååç¼)      è¿è¡client,æå°Â hello(): Hello, world Â å ¥é¨æ¡ä¾ok!
  hessianç®ä»
   Hessianæ¯åºäºBinary-RPCåè®®å®ç°çï¼æ¯ä¸ç§äºè¿å¶æ°æ®æ ¼å¼ï¼æ以å¯ä»¥è·¨ä¸åçè¯è¨å¹³å°ï¼æ以ä¸ç®¡æ¯Javaï¼è¿æ¯.NETé½å¯ä»¥ä½¿ç¨ãhessianå®ç°äºä¸åè¯è¨å¯ä»¥è¿ç¨è°ç¨(æ¶åå°rpc,rpcè®æææ,åç»ä¸é¨è®²è®²rpc),è¿æ¹é¢ä¹æå¾å¤å ¶ä»çå®ç°æ¹å¼(æçä¸å¤§è´RMI > Httpinvoker >= Hessian>>Burlap>> WebService),RMI ä¸Httpinvoker (springæçä¸å¥çè¿ç¨è°ç¨)å±éäºjava,Hessianåºäºäºè¿å¶,Burlapä¸WebServiceåºäºxml,Hessianä¸Burlapé½æ¯Caucho Technologyæä¾ç,Burlapç¸å¯¹äºWebServiceç»ææ´ç®å,ä½æ¯éç¨æ§æ²¡æWebServiceé£ä¹å¹¿æ³.     hessianåºæ¬åç( hessianåºæ¬åç):
- 客æ·ç«¯å起请æ±ï¼æç § Binary -RPC åè®®å°è¯·æ±ä¿¡æ¯è¿è¡å¡«å ï¼
- å¡«å å®æ¯åå°äºè¿å¶æ ¼å¼æ件转å为æµï¼éè¿ä¼ è¾åè®®è¿è¡ä¼ è¾ï¼
- æ¥æ¶å°å¨æ¥æ¶å°æµå转æ¢ä¸ºäºè¿å¶æ ¼å¼æ件ï¼æç § Binary -RPC åè®®è·å请æ±çä¿¡æ¯å¹¶è¿è¡å¤çï¼
- å¤çå®æ¯åå°ç»ææç § Binary -RPC åè®®åå ¥äºè¿å¶æ ¼å¼æ件ä¸å¹¶è¿åã
 hessianä¾åçä¸äºå»¶ä¼¸
1.è¿åå¼:
    ä¸è¿°basicServiceä¸è¿åçæ¯ä¸ä¸ªString,å®é ä¸,ä»»ä½ä¸ä¸ªå¯åºååç±»åé½å¯ä»¥
2.hessianåºååå·¥å ·ç±»-  Â
package hessianUtil;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import com.caucho.hessian.io.Hessian2Input;
import com.caucho.hessian.io.Hessian2Output;
public class HessianSerialization {
public static void main(String[] args) throws Exception {
//åè½çèµ·æ¥è·ObjectOutputStream ä¸ObjectInputStream ååç¸ä¼¼
OutputStream os = new FileOutputStream("C:\\Users\\admin\\Desktop\\temp\\student.xml");
Hessian2Output out = new Hessian2Output(os);
out.writeObject(new Student("hello"));
out.writeObject(new Student("world"));
out.flush();
os.close();
System.out.println("write over");
InputStream is = new FileInputStream("C:\\Users\\admin\\Desktop\\temp\\student.xml");
Hessian2Input in = new Hessian2Input(is);
Student s1 = (Student) in.readObject(Student.class);
Student s2 = (Student) in.readObject(Student.class);
System.out.println(s1.getName());
System.out.println(s2.getName());
is.close();
}
}
2.æ°æ®æµä¼ é   æ°æ®éæ¯è¾å¤§æ¶,ä¼ éæµæ¯ä¼ ébinaryæ´ææç,å¨å ¥é¨çexampleåºç¡ä¸ç»§ç»ç¼å
server
package server;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
public class BasicService implements BasicAPI {
private String _greeting = "Hello, world";
public void setGreeting(String greeting) {
_greeting = greeting;
}
public String hello() {
return _greeting;
}
@Override
public void upload(String filename, InputStream data) {
try {
byte[] buff = new byte[1024];
data.read(buff);
System.out.println("upload success! filename:" + filename + "; name:" + new String(buff));
} catch (IOException e) {
e.printStackTrace();
} finally {
if (data != null) {
try {
data.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
@Override
public InputStream download() {
return new ByteArrayInputStream("hello world".getBytes());
}
}
client
package client;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import com.caucho.hessian.client.HessianProxyFactory;
import server.BasicAPI;
public class HessianClient {
public static void main(String[] args) throws Exception {
//serverå®ä¹Servlet
String url = "http://localhost:8080/hello";
//代çå·¥å
HessianProxyFactory factory = new HessianProxyFactory();
//å建代ç对象
BasicAPI basic = (BasicAPI) factory.create(BasicAPI.class, url);
//è¿ç¨ä»£ç对象访é®
System.out.println("hello(): " + basic.hello());
//ä¸ä¼
basic.upload("myfile", new ByteArrayInputStream("hello world".getBytes()));
//ä¸è½½
InputStream is = basic.download();
byte[] buff = new byte[1024];
is.read(buff);
System.out.println(new String(buff));
is.close();
}
}
3.hessiançdebugæ¥å¿     å®ç½ä¸æ讲çdebugæ¥å¿çé ç½®æ¯é对å¨resin容å¨çè¿è¡ç项ç®(hessianä½ä¸ºresinä½ç³»ä¸çä¸é¨å...),æ¤å¤ä» åç®åä»ç»     å®è£ resinç¯å¢( resinä¸è½½,ä¸è¦ä¸è½½pro,é£ä¸ªè¦è±é±),ä¸è½½zip解å     resinä½ä¸ºä¸ä¸ªweb容å¨(å ¶å¯å¨æ¹å¼è·tomcatååç¸ä¼¼),ä½ä¸ºå¼åè ,ä¸è¬æ两è å¯å¨å¯å¨æ¹å¼,å½ä»¤è¡(start.batå¯å¨)æ使ç¨å¼åå·¥å ·å¸¦æ件å¯å¨.     以eclipseæ件å¯å¨ä¸ºä¾,å®è£ æ件( eclipse-resin install),æ°å»ºserver Â
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiclRnblN0LclHdpZXYyd2LcBzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CX9smaORTUU5ENNpXTmZEWjZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39TMwYzMxcTN2EDOwgDM3EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
     æ°å»ºå®æ,ä¼çæä¸ä¸ªserverå·¥ç¨(tomcate类似,建ç«serverçæ¶å,ä¼copyä¸ä»½å¯å¨çå¿ è¦çconfigæ件,å¼åè°è¯åªè¦ä¿®æ¹æ¤serverå³å¯)
         为å®ç°æ¥å¿ææ,ç®åè®¾ç½®ä¸ Â Â Â Â Â æ³¨éresin.xmlä¸ç (å»é¤ä¸äºä¸å¿ è¦çä¿¡æ¯å¹²æ°)
<!-- Logging configuration for the JDK logging API -->
<!-- <log-handler format=" {${thread}} ${log.message}" level="all" name="" path="stdout:" timestamp="[%y-%m-%d %H:%M:%S.%s]"/> -->
      cluster-default.xmlä¸è®¾ç½®logå 容
<host-default>
<access-log path="log/access.log"
format='%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i"'
rollover-period="1W" />
<log name="" level="finest" path="stdout:" timestamp="[%Y-%m-%d %H:%M:%S]"
format=" ${log.message}" />
     åé¢çlogæ¯æå ä¸å»ç,åªå±ç¤ºäºæ¶é´ä¸æ¥å¿ä¿¡æ¯ stdout-æ§å¶å°æå° Â Â Â Â Â å¯¹å ¥é¨exampleç¨ä½ä¿®æ¹
public String hello(String hello) {
return _greeting+hello;
}
    å¯å¨å®¢æ·ç«¯è®¿é®
public static void main(String[] args) throws Exception {
//serverå®ä¹Servlet
String url = "http://localhost:8080/hessian/hello";
//代çå·¥å
HessianProxyFactory factory = new HessianProxyFactory();
/* Object create = factory.create(url);
System.out.println(create.getClass());*/
//å建代ç对象
BasicAPI basic = (BasicAPI) factory.create(BasicAPI.class, url);
//è¿ç¨ä»£ç对象访é®
System.out.println("hello(): " + basic.hello("åå"));
    æå°å 容
[2017-08-08 16:43:23] call 2.0
[2017-08-08 16:43:23] method "hello"
[2017-08-08 16:43:23] "åå"
[2017-08-08 16:43:23] Hessian 2.0
[2017-08-08 16:43:23] Reply
[2017-08-08 16:43:23] Http[app-0, 3] HTTP/1.1 200 OK
[2017-08-08 16:43:23] Http[app-0, 3] Content-Type: x-application/hessian; charset=null
[2017-08-08 16:43:23] Http[app-0, 3] Transfer-Encoding: chunked
[2017-08-08 16:43:23] Http[app-0, 3] write-set-offset(172)
[2017-08-08 16:43:23] Http[app-0, 3] write-next-buffer(23)
[2017-08-08 16:43:23] Http[app-0, 3] flush()
[2017-08-08 16:43:23] "Hello, worldåå"
[2017-08-08 16:43:23] Http[app-0, 3] write-chunk-tail(7)
[2017-08-08 16:43:23] Http[app-0, 3] finish/keepalive
     resinçlogä½ç³»å¯ä»¥å¹é log4j,ææ¶é´åç¬è¯´ä¸è¯´( resin log)