a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 214|回复: 3

[其他] JAVA技巧:小小试Hessian实现webservice

[复制链接]
发表于 2012-8-4 12:28:23 | 显示全部楼层 |阅读模式
小试Hessian实现webservice
* `  Y8 f8 s0 A3 pHessian是一个轻量级的remoting on http工具,采用的是Binary RPC和谈,所以它很适合于发送二进制数据,同时又具有防火墙穿透能力。Hessian一般是经由过程Web应用来供给处事,是以很是近似于日常平常我们用的WebService。只是它不使用SOAP和谈,但对比webservice而言更简单、快捷。+ o4 _0 ]! c; ~6 J& W
Hessian官网:http://hessian.caucho.com/
: x7 W. @% b& G6 b5 S: h6 [2 }Hessian可经由过程Servlet供给远程处事,需要将匹配某个模式的请求映射到Hessian处事。也可Spring框架整合,经由过程它的DispatcherServlet可以完成该功能,DispatcherServlet可将匹配模式的请求转发到Hessian处事。Hessian的server端供给一个servlet基类, 用来措置发送的请求,而Hessian的这个远程过程挪用,完全使用动态代办代糊弄实现的,,建议采用面向接口编程,Hessian处事经由过程接口吐露。
8 p; X2 Y+ x! U8 G6 I. LHessian措置过程示意图:
, N# O  X9 s  o9 }* I% _) f5 v客户端——》序列化写到输出流——》远程体例(处事器端)——》序列化写到输出流 ——》客户端篡夺输入流——》输出结不美观
6 ^$ ^8 C- L% G# {* m4 E下面具体介绍最常用的两种体例实现Hessian供给webservice:
7 Y" o! g( D- F5 E1 z纯Hessian实现2 W/ L! Z) u' o, _
配合Spring框架实现2 U  G5 p1 ]( i
在起头之前当然需要到官网上下载相关的lib包,放入项目的/WEB-INF/lib/下$ C+ @5 B4 ^5 X2 L3 l# X
【一】、纯Hessian实现轨范:! K: m# n7 I* s' @' d' D
1.根基代码, K- k! g, f1 F1 q: I" Q
首先编写一个处事的接口类:HelloHessian.java: h' [6 ~% B) ^4 T; B) j) ~
Java代码
& u9 I- _7 i7 r1 u# qpackage michael.hessian;
* B9 Q' k5 {/ `* Z# n! C7 J+ _import java.util.List;! e6 e( A# f; b) l8 M0 }! {& D
import java.util.Map;9 T4 g0 m. Y1 G2 T/ a* o( r
/**
1 \6 [' g% H; o* @author michael
8 x% W& C2 F$ I3 D$ v*# G' x& \$ W" p" r# i7 Q
*/- r' N' l' y+ H
public interface HelloHessian {; ]) j. y2 w7 S7 ^1 x
String sayHello();) q0 W2 W7 G- Y8 x
MyCar getMyCar();" _. L' P2 G) V. v% G
List《String》 myLoveFruit();
  G& _+ q0 k$ _; P1 b% F1 z3 q; TMap《String, String》 myBabays();, ~8 T2 Q  T; U& I
}$ O8 x7 N7 U7 t2 q, \4 c0 y$ H5 \
package michael.hessian;
) _# V3 O, }/ c1 p5 |import java.util.List;
8 ]; D1 s9 V1 h! _' K" Fimport java.util.Map;
& G' J2 B. \; T3 v- m& u" r7 n/**+ n% t' Y5 {" J4 Y* ]
* @author michael1 c/ U. Q2 B# A. T* p& b) u
*: W9 H6 V7 f! M! c
*/
6 k$ E$ y" d4 T; i6 j7 Y7 l) @! Rpublic interface HelloHessian {; W# [+ h5 N" d3 ~' N
String sayHello();2 _( z: H, N) k7 d6 r
MyCar getMyCar();
5 Y( t4 q  ?! {. d4 h2 B( yList《String》 myLoveFruit();
! y% ^" u$ [  P: r% UMap《String, String》 myBabays();" k7 {1 {# w  r) r
}+ e3 f3 N- c( A6 d$ D
一个java bean文件MyCar.java:
% f  m& Z2 z' j5 Q; U6 ]; kJava代码
9 E+ F- X4 F* N0 Y2 n) ~4 o3 opackage michael.hessian;+ T! R) c9 T, \" k
import java.io.Serializable;
7 G3 b4 t. k+ k* f2 Y
+ O, r6 D0 o, M) P5 K# c, t$ |; z4 w8 ?% M, i! y" U7 k
/**
# }! s  s& V0 r7 e6 r1 O9 L* @author michael) H, ~; ]8 x9 l" d
** f- n9 Z' x& M/ D- c
*/
& i1 \' e: }6 R, upublic class MyCar implements Serializable {
8 C# N- ~' W9 h  ~2 E  [/**
3 @6 A: |. J5 ], y; d2 |7 v*
5 w, Y6 M7 ^, q+ ?9 ~8 ~*/
& M% T& N8 C* o8 a4 \- p  Iprivate static final long serialVersionUID = 4736905401908455439L;1 [/ v0 s! r3 ?" h0 c; I7 @' e
private String carName;
% I, L" [: U3 {9 w: f) g0 ]* F+ Sprivate String carmodel;- d4 w# ]; y+ T4 ]8 k0 l" E5 a
/**
& q" P. J$ y8 u  T* @return the carName3 D0 u0 B: n* T, ~) i
*/
- x; o9 X0 u4 e* |; D& Spublic String getCarName() {
0 T0 ?& }2 i" b3 C7 P" jreturn carName;! n! W0 B- P9 D
}6 s# d) w3 x6 B9 Q# g
/**
6 h1 j! A- e! T8 M9 D2 q$ A* @return the carmodel
6 U. y  a* c, F" z6 k*/4 ~) n6 ~) c0 O
public String getCarmodel() {
- u2 Z5 b$ g8 Q0 i! {return carmodel;
9 V5 p& r. S7 w: B, x" i, g& O8 C}
+ q/ x+ |0 B' A8 d/**. e8 y- \4 u  A$ a/ L
* @param pCarName the carName to set
, H) |* @/ m) s( U2 }6 i: O" o- N& @*/& G6 i; `" a, G  \8 p5 S
public void setCarName(String pCarName) {
% F: c& ~# D# h% J' n7 w  s$ acarName = pCarName;1 r5 w) h. A$ h4 b1 Y
}
; `8 N0 m. I5 {& x/**" b6 N& Q- q  ^8 Z2 E
* @param pCarModel the carmodel to set; I1 _" e8 ^( N# Z* X
*/
& O- b# W5 m' I0 V& L( [) fpublic void setCarModel(String pCarmodel) {) C+ Y2 H9 ?3 W4 G- E9 u1 u
carModel = pCarmodel;% L" J4 r9 h3 g- j+ ?+ o
}* x- m5 T* W5 C* c1 I
/**
) i7 L( B1 ~' m2 @1 j- [0 }* @see java.lang.Object#toString()0 Z3 n, ~% E- z5 j: m8 C3 N
* @return
# _, N& @7 m7 ?. A6 \1 }*/
* k8 _% j- @1 P, X& Q- ]@Override
) I6 A6 r, _6 @8 o0 w( Hpublic String toString() {: S8 A9 f6 l, w6 K. v* k+ C
return “my car name:[” + this.carName + “] model:[” + this.carmodel
: {7 m" X3 A- s1 E+ “]。”;! x7 p/ L7 w0 Y- m8 d- h" E: p4 B/ t

$ \0 s3 y# H1 [  j}
回复

使用道具 举报

 楼主| 发表于 2012-8-4 12:28:24 | 显示全部楼层

JAVA技巧:小小试Hessian实现webservice

</p>}
$ J* U2 |: Y0 d8 B: xpackage michael.hessian;" U& Y! e# z6 _; a2 O- C- U
import java.io.Serializable;
0 }9 T; q& ]0 K! s$ f. a/**
% c/ j' M+ ?5 C" U' U5 F" v* @author michael
! i7 n1 p$ F5 @*9 v8 u' p) b0 N) z& }  p. A
*/
) v9 U  G% }- Wpublic class MyCar implements Serializable {1 w) b+ t7 ?3 o
/**
# ^& @4 |" h- V( c' ^# Y*
# K- ?9 }% I5 q! i5 U*/6 c2 l% N+ u% K: {+ Y1 w; ^4 U$ d
private static final long serialVersionUID = 4736905401908455439L;% ~& d; r. y1 v  ~
private String carName;
# l6 ~  Y7 C# D) [* }5 j! \private String carmodel;7 u4 h* G) p' Y" H" h
/**
4 ~" N4 p8 Y2 {  S* @return the carName5 l% i) X! Y8 S5 R
*/
7 N* r1 u. H- i! zpublic String getCarName() {' Y" G4 x5 ~( V) d# O: @: x  H: \
return carName;3 f5 w* b$ C/ _2 ?( F0 k
}
! f4 r! [+ k5 N5 r2 o* T  q% Y/*** G7 o: t$ P+ C
* @return the carmodel
# ]; e4 N" b. p7 V$ Z8 U9 E4 p*/) q- U- l* _% X) W* V7 S) ?8 ?8 m
public String getCarmodel() {' r* Z/ V, Q' |1 y1 f) `2 X* v
return carmodel;
* s& l* P8 O9 J/ t% j}/ F# f% w2 e  R; \3 h3 V
/**
1 r; w$ x. t" g: U8 O  r* @param pCarName the carName to set
4 k% v0 T$ F. W" V* Y* k/ @*/# z# C3 Y* c; ~- F) ~6 ~
public void setCarName(String pCarName) {  M) U% O8 Q, d  w0 l
carName = pCarName;; k4 F$ F' C% d( [
}
0 i0 B' Q' [, t3 s) T# F9 Q/**
( Y; ^( L5 q* K4 E$ f2 M4 E$ l* @param pCarModel the carmodel to set
! l) p1 g' q% Z3 V* g( N5 b*/; g6 H/ b  K0 I# p3 E, D( ~7 q
public void setCarModel(String pCarmodel) {) b& }6 }1 C$ H& _
carModel = pCarmodel;* D6 s- }# q! w- _5 Z% m( t
}
" b' R/ S8 _- w+ f) y, N* N/**! [3 i9 b  a$ H
* @see java.lang.Object#toString()7 [, ~3 q6 J8 ^1 u! L' L/ K5 H2 W5 z
* @return
! a, p) e& \% i3 Q: ]*/$ _  q& F. k3 C- f
@Override
; A0 B* ~7 {, r; k7 v: d! Z* Qpublic String toString() {
" M4 m- N/ O1 ?  j4 lreturn “my car name:[” + this.carName + “] model:[” + this.carmodel
4 e- m$ _, c+ v9 S+ “]。”;
1 p# C7 c( a% g# K! ~: ^! \" M}
8 o4 V: Z; q5 @0 N}; Y+ z+ ]9 U6 q5 u, x2 \. q" M
处事端接口的实现类:HelloHessianImpl.java
/ P, |, I: q8 N" [. wJava代码
2 R0 b5 A5 m6 n" `6 epackage michael.hessian.impl;3 A: N/ o0 U4 R$ }( W  C" ^
import java.util.ArrayList;8 {7 G% d5 S& q/ l
import java.util.HashMap;
* C( \8 b5 U2 P, p# s! ?# `import java.util.List;
1 C2 T' [8 o9 t1 B% nimport java.util.Map;
6 w5 T) m3 @: e. f3 J3 k* Mimport michael.hessian.HelloHessian;
( t6 e( A+ ?7 r; e  |2 R& ~import michael.hessian.MyCar;8 e2 j1 Q; b, Q$ N6 l
/**. V- X: H* ?5 D  p7 }0 a
* @author michael& @; w8 K0 B/ ]% `! X5 T
*# E( W! j# m9 E  Y0 N2 D( [
*/" H6 k0 x# a) A
public class HelloHessianImpl extends HessianServlet implements HelloHessian {8 l* H: o, @' a" N2 @  g
public MyCar getMyCar() {+ z/ }$ {2 |# @2 G
MyCar car = new MyCar();
$ o; P# y! V2 ?9 P9 e7 x* gcar.setCarName(“阿斯顿·马丁”);
3 x' ~( h  R& C! q2 |2 z8 Mcar.setCarmodel(“One-77”);6 q" {0 k3 a# q" P; W) b
return car;
. i# [+ e4 F/ F' L1 [6 M}$ t1 J5 R2 _' a. Q( k# N* b
public Map《String, String》 myBabays() {5 O1 X! g/ l) \
Map《String, String》 map = new HashMap《String, String》();' }1 z7 _" ^0 C" O
map.put(“son”, “孙吴空”);
: Q$ S: h2 H8 G6 M' Imap.put(“daughter”, “孙小美”);& Y, ^9 _5 V  o9 G+ G' M9 l2 B
return map;, c. D; |& P2 k9 F5 R4 B! s8 B
}
2 E% w- l- i4 P* r# Z3 y5 cpublic List《String》 myLoveFruit() {
- Q; G* W- M7 r/ Q9 ?/ v4 UList《String》 list = new ArrayList《String》();- G& L" \( W& J# e: ]+ r
list.add(“apple”);+ q2 R* s: P/ ^7 W. i
list.add(“kiwi”);/ U( e# c0 p) H5 g
list.add(“orange”);
! U( W- L% [' p3 C7 Ereturn list;' I6 y7 u% D1 C8 T/ H* j
}
1 O3 K! H" ?/ _public String sayHello() {
: [7 n# H* y* c- A; U8 Treturn “welcom to Hessian”;  H; w: {& D( d% c* k3 g1 w2 B% r; w
}
8 Q( R. ^, }" C/ b}' I5 F0 k1 v& U' \$ f
& q0 u* s+ L! R, I5 O' q/ R
6 _/ c' T; V% r% v. b
package michael.hessian.impl;6 X1 U( E2 t; l
import java.util.ArrayList;
& r" d. F7 ?9 j# B1 Mimport java.util.HashMap;8 E5 x2 B  @/ w" E9 r9 j, }8 g0 [
import java.util.List;6 t8 ?4 r" o8 o4 i; {* K
import java.util.Map;
. n$ T( I6 R, E( Yimport michael.hessian.HelloHessian;. c: Y. y: N; G
import michael.hessian.MyCar;! C$ U9 L' I/ c$ _1 B
/**
8 M# l; M1 Q/ W+ M4 y& \7 D* @author michael
: U9 S' ~3 k+ V$ N& I*) k) `, i4 Q- r* O2 k, j
*/
) |! h& C- S5 mpublic class HelloHessianImpl extends HessianServlet implements HelloHessian {3 j) ^# L+ h8 D7 }
public MyCar getMyCar() {7 w! e! K" A' I% K- A, g, c* I' z
MyCar car = new MyCar();4 t9 {. L/ o" j5 \
car.setCarName(“阿斯顿·马丁”);
& U: Q) o2 A! R$ v8 Ecar.setCarmodel(“One-77”);
, H3 L( s* r, t# m1 _8 e, Kreturn car;
! ?6 ^5 K7 O) v+ ]+ }}
" G. f9 o2 X! `/ r% Mpublic Map《String, String》 myBabays() {7 b- A' o% [$ U& K$ |
Map《String, String》 map = new HashMap《String, String》();
; d/ r" i1 X# [3 V. V+ U8 Y1 Z5 Xmap.put(“son”, “孙吴空”);
! C$ c. d2 Q4 g) o8 H+ Omap.put(“daughter”, “孙小美”);
9 w* Y# d2 v) |' }% o9 ~7 L: {return map;
  h1 A% z8 g4 ^- }$ u. D: y}" K# Q9 J5 ^* E
public List《String》 myLoveFruit() {8 [9 s5 b/ ^/ v
List《String》 list = new ArrayList《String》();9 i) ]4 }, C3 P3 d& a6 B* Z! a% Y) c
list.add(“apple”);
) l% O7 S) B+ D; c& {% M4 ilist.add(“kiwi”);
8 V6 z3 N: r, g: q/ Rlist.add(“orange”);
, `; Y$ a# ~* k) Ireturn list;
' S% a+ X, R* {7 c9 K# Z. e}
* o# {8 I" i5 Tpublic String sayHello() {
9 r/ P4 Y; ^8 N. {return “welcom to Hessian”;! x+ \. V3 O; J9 G
}
8 t- S  }  \9 e* J$ r" t}
: s" ~4 k1 ?9 [% K4 Z/ l- G2.设置装备摆设文件web.xml改削
2 Q; v! ^2 c" G( `6 d% z在web.xml设置装备摆设文件里增添如下信息:
3 ?) h: J3 y; S5 YXml代码) n( `4 J- q* n2 W% w
《servlet》
/ |6 O: g: \6 O, Q; f《servlet-name》HelloHessian《/servlet-name》4 X* ^/ V$ ^5 U' b5 f+ i
《servlet-class》
+ k8 f/ k+ {: c: icom.caucho.hessian.server.HessianServlet6 J% K$ l- ~6 \1 c+ m* ~9 w; V5 g- i
《/servlet-class》
  U6 G: P/ J- H3 }《init-param》
2 X" L1 c1 H( y$ ]; }7 t7 I! t《param-name》home-class《/param-name》) W$ j) B7 R5 m  }) q7 F
《param-value》michael.hessian.impl.HelloHessianImpl《/param-value》
" i2 \6 T" P/ l! {: B( X《/init-param》
' d/ I- q  K+ B; {《init-param》5 w3 t5 u: {" ]) H/ E
《param-name》home-api《/param-name》$ ^! z! B) |7 X7 B. Y( U
《param-value》michael.hessian.HelloHessian《/param-value》" g$ e6 h  V2 S
《/init-param》
# R% {- ?. i! v  {4 K( Z《load-on-startup》1《/load-on-startup》0 O6 [' j5 |" ~0 t
《/servlet》
8 j6 I; [5 g. h: ]《servlet-mapping》& T6 N* K0 r( [: t% R
《servlet-name》HelloHessian《/servlet-name》8 T( G# q- Y# M9 `+ S+ r! R
《url-pattern》/HessianService《/url-pattern》
& l6 O/ @& t$ v4 k《/servlet-mapping》
' j. h8 N0 x' ?《servlet-mapping》) {5 t3 P8 p; S  A# b) N8 z6 I
《servlet》$ L- i2 x9 f4 R; @
《servlet-name》HelloHessian《/servlet-name》3 p, ^+ v4 Y! ~. f! K+ D% j
《servlet-class》& E- ^0 H( ]* z8 Y# H, m# o
com.caucho.hessian.server.HessianServlet+ K0 U: J- M. `
《/servlet-class》" [  q# E8 V" ]5 P, [
《init-param》
) ^1 S2 C0 ]( c( t& ]9 G9 m4 I《param-name》home-class《/param-name》
8 X0 Y+ }' P+ `3 C7 L) ?8 w《param-value》michael.hessian.impl.HelloHessianImpl《/param-value》5 v; f9 z! \2 I9 p
《/init-param》: F+ l$ N. G0 \- A2 f
《init-param》5 |9 ]/ W6 t) \( j/ T
《param-name》home-api《/param-name》2 l1 Y) ^6 y/ K. T5 @
《param-value》michael.hessian.HelloHessian《/param-value》
0 ?3 r% |4 d+ O" \# x% C《/init-param》
" e/ K& G. t8 N6 W《load-on-startup》1《/load-on-startup》
: k2 D  j, S, V( N《/servlet》
" A3 U0 x# ~* [- U+ V6 N( K《servlet-mapping》
7 v5 y2 ?# f' Q$ X+ C* q《servlet-name》HelloHessian《/servlet-name》
: {. x3 d; u/ V( ~$ Z* n4 d5 u# ~《url-pattern》/HessianService《/url-pattern》
' ]) w6 q4 B: |5 w9 C5 w《/servlet-mapping》: w( e! h( a/ X/ E" G
《servlet-mapping》
; G& U+ O6 {; O8 c8 }3.java客户端验证  i+ ?0 J; w6 {3 `, R
Java代码; g0 S& F4 }1 U. v
package michael.hessian.client;
, k  u1 X% N7 ^  B5 q) simport java.net.MalformedURLException;, z4 b, _3 g$ R6 t
import java.util.Map;5 S3 n/ u) J( a2 |: W; [$ m# p
import michael.hessian.HelloHessian;( C4 A, c" K; U# k0 f. u: x9 m
import michael.hessian.MyCar;
4 u7 u6 @6 U; w6 G# g# ~4 Zimport com.caucho.hessian.client.HessianProxyFactory;
1 C' ]0 F- Q" o, C/**
: F  a; d8 W0 `( D! R* @author michael
$ I7 E: D* ^5 a! |4 M( |*
+ O% y+ |' y$ M) m- z*/: g" U$ r$ _* F+ t0 I
public class HessianClientTest {
' [! K7 f" [0 p, }# G' G- }& {/**' ~: ]& `5 j. T( H" k
* @param args# a1 o5 o- T; s2 P( w, w! M
*/+ D" g; w! S, r8 M- g, `
public static void main(String[] args) {7 z6 a8 w" D- y6 }& y9 @# ^9 J
String url = “http://localhost:8082/J2EE_sjsky/HessianService”;
2 T% l. {; L$ p6 |" gHessianProxyFactory factory = new HessianProxyFactory();
7 u$ H: `0 r0 D) k. ?0 jtry {
9 @0 {2 a( ~0 v$ G7 u9 bHelloHessian hello = (HelloHessian) factory.create(9 e; r8 U+ v- S* ]  b4 {
HelloHessian.class, url);
5 ]1 J: c' O' M( Y1 MSystem.out.println(hello.sayHello());
0 S% {5 [* X4 z, i4 d" \6 sMyCar car = hello.getMyCar();3 W9 b7 R! y: x7 |5 W
System.out.println(car.toString());! ~6 `$ @1 n/ A- Z' M
for (Map.Entry《String, String》 entry : hello.myBabays().entrySet()) {4 I2 t: m; U# L1 Q: W
System.out.println(entry.getKey() + “ ” + entry.getValue());, q( o$ W# `4 O  c* p3 Z1 ?& ^
}
1 o4 G& ^- r0 N6 W6 u8 u) Yfor (String str : hello.myLoveFruit()) {, v/ a/ r: X2 x. f* p, |8 G
System.out.println(str);! K- k! K* y5 M$ v5 l+ X
}
! w: c9 E/ r! `7 ~" J- j8 R} catch (MalformedURLException e) {
/ p! ~+ k/ z/ be.printStackTrace();
+ ]" \/ a5 R) k: G+ r}+ e6 Y# H, E' j+ d- X
}1 H& |2 F  P' Q
}3 O! B+ {7 p$ Z
package michael.hessian.client;
9 X+ F! m% e& P0 N, u$ U) Ximport java.net.MalformedURLException;- f6 U% t! D( ^/ s
import java.util.Map;4 b) N! X9 G) ]/ h8 [
import michael.hessian.HelloHessian;
; S! v& I& g% L( X) Fimport michael.hessian.MyCar;; ^/ q& k+ l7 l
import com.caucho.hessian.client.HessianProxyFactory;  e7 I7 u- l  z& K: S6 u
/**% O, t! i+ h9 N) y: U$ P5 T
* @author michael& y# s2 A: p1 x- S
*
# P! m/ B* k8 Z; Y# E" _*/
* C9 y; l0 F) |* k8 Z9 Hpublic class HessianClientTest {
& r. e, l* @; R' ^/**
0 s" t# C* V2 n# J4 R6 K* @param args6 H' _. l' O; \
*/, @5 f) G3 z+ b7 R( E
public static void main(String[] args) {
) b9 C8 p' {6 qString url = “http://localhost:8082/J2EE_sjsky/HessianService”;
  [, r3 J! L. f$ \# OHessianProxyFactory factory = new HessianProxyFactory();* b* Z6 \; k3 X7 E% X# B' c9 M( D
try {' J1 R  C9 @( u& P0 n; B) a% `
HelloHessian hello = (HelloHessian) factory.create(
1 r+ i9 b4 F: }9 l% dHelloHessian.class, url);
/ [# H) V# T' P- X; B+ d- T- ZSystem.out.println(hello.sayHello());, p& {* d/ u% h* O9 Y$ y
MyCar car = hello.getMyCar();5 t6 D- \& ]+ W3 p
System.out.println(car.toString());
3 ~3 U8 {! d2 D! vfor (Map.Entry《String, String》 entry : hello.myBabays().entrySet()) {" D& ^0 H4 x2 C" b1 ~
System.out.println(entry.getKey() + “ ” + entry.getValue());
- F1 P) E. m- w1 W% }}
, {% O0 [) T" M* H/ @9 ~2 A0 \* N8 ?for (String str : hello.myLoveFruit()) {
& _+ g; b; V9 C: Q6 X( x: {( QSystem.out.println(str);
4 c" b# F% b% A+ P}* {0 ]1 _/ s! w$ s, k4 z" F. @
} catch (MalformedURLException e) {+ ~( e$ f# Q. t
e.printStackTrace();& o6 c9 z0 t$ n. |3 D7 t8 K( m
}
' N, y* M! f4 `0 H}! ]3 }3 \2 Y" W* Z0 ?" e; z- l

* q: F3 J5 R/ I4 }& F% l4 ^! M}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-4 12:28:25 | 显示全部楼层

JAVA技巧:小小试Hessian实现webservice

</p>运行结不美观如下:% u- Z5 {; [2 v
7 y- }) U( u& o+ o7 k( H- m
$ f' q# r4 M0 ?2 @& ]9 M' a
Java代码
4 K) X* Z. w3 e9 [0 T# ?- P2 wwelcom to Hessian) v. }" ]& V$ }& E8 _  y
my car name:[阿斯顿·马丁] model:[One-77]。5 ]4 c6 c, D8 I# J) A4 m! G
daughter 孙小美7 H' ?2 e. {! z8 R9 \- t8 [2 L
son 孙吴空
! V, t1 q* d# f/ o8 A. {6 u# bapple
6 K- Z4 W9 J7 g4 \! T( w2 ]8 Ukiwi
1 X' \- {9 g# s9 |, yorange1 ?, E, `/ e' |, S3 ?
welcom to Hessian
- Q" z% \; p% J5 r2 Rmy car name:[阿斯顿·马丁] model:[One-77]。
# L1 `" @3 W! n- i) Q; `daughter 孙小美0 Q1 e% |( A% Z0 d+ b4 S
son 孙吴空8 A" \, w+ I& Q; a/ Y
apple+ Q5 K+ V2 F; y& c7 M
kiwi
* j2 o' y, F- b: b0 F5 U5 j' dorange
; |) @$ Y! k! Y; O$ G) V# c- ^( T" E【二】、spring+hessian 实现处事端:6 `, S+ |1 I  ?* L0 E
1.根基代码见膳缦沔的demo
. q# d4 O6 I% `5 m$ n2 O8 A; @6 k2.改削设置装备摆设文件
9 H  i" R) ^; ]) f% m! y& o在web.xml,增添内容如下:5 r' i, W& P$ x9 P6 T
Xml代码2 X- T$ g  Q2 w$ x# O" g: w
《servlet》
3 g6 c( F7 U; P; C7 B& ~《servlet-name》springhessian《/servlet-name》) G( M" g; ~* `8 S. z
《servlet-class》
# ]* y/ k$ [% c2 D! porg.springframework.web.servlet.DispatcherServlet
, ]! s. u: Q% Z/ Z: `; q5 \) o《/servlet-class》" U9 s: |- x1 @9 u/ m, c3 {
《!--5 F/ ~; C% _1 Q, ]
《init-param》/ a1 A- c7 x  T) X6 [
《param-name》contextConfigLocation《/param-name》
# I" U' p8 ]8 X/ j《param-value》/WEB-INF/springhessian-servlet.xml《/param-value》
- Y2 [* w' d5 G+ k+ {$ F+ o& E& o《/init-param》1 m: J7 o5 R0 V0 n! B. p
--》
( i+ c7 F6 q+ ?+ I2 o9 }/ t3 p《load-on-startup》1《/load-on-startup》& _9 W1 _5 p* }  C; e1 ~
《/servlet》0 U$ y6 d& s$ w$ ^+ E
《servlet-mapping》; p0 k. B9 h- k1 M3 w
《servlet-name》springhessian《/servlet-name》* y3 K) o' }" \0 Z2 ^
《url-pattern》/springhessian/*《/url-pattern》$ r  {: s1 I% s4 P
《/servlet-mapping》
5 X* F+ s3 r$ r: W* s《servlet》
- g3 y+ }& @0 E. g2 \  l《servlet-name》springhessian《/servlet-name》
  _8 U# O* {5 S# a% U3 H- M《servlet-class》
, t# c5 F, O+ e" p: T3 Borg.springframework.web.servlet.DispatcherServlet
$ ]2 b* P/ R4 ]8 l8 A( ^2 j《/servlet-class》
2 f% D% h9 S2 w8 H, ~& j《!--
, A, T1 |% b& E: w《init-param》
8 W! |1 S; p  x3 k# z7 E! y! F《param-name》contextConfigLocation《/param-name》
! W- j) R- \' h; j6 O+ r) z《param-value》/WEB-INF/springhessian-servlet.xml《/param-value》$ c) s4 J: U4 R
《/init-param》
1 c! k% x* z1 N1 c* x( ?4 O( s; e--》( b. K& x: _$ n5 _
《load-on-startup》1《/load-on-startup》! D: o/ ~. s% `0 g
《/servlet》
, f$ H6 @! @/ N3 z4 J《servlet-mapping》
: C. Z) O) D- e" ^6 t: P& Y《servlet-name》springhessian《/servlet-name》
9 ]) I' t( X. z/ k9 y( d9 L《url-pattern》/springhessian/*《/url-pattern》4 S: @! s& y/ H4 K3 \: C
《/servlet-mapping》
5 \3 \/ R4 l& P$ v5 c# g- i  @# g, d在/WEB-INF/增添一个叫servlet-name-servlet.xml设置装备摆设文件。该文件的命名有必然的轨则,红色servlet-name需要和web.xml中的《servlet-name》springhessian《/servlet-name》界说的名称相匹配,好比本例子应叫springhessian-servlet.xml,如惺招也不轻易犯错。' |+ J* w: o$ l
当然该文件也可以自己肆意命名。如不美观是自界说的文件名称不合适上述默认的轨则,需要在《servlet》中增添《init-param》相关属性,酬报指定加载设置装备摆设文件,否则会报错。
/ X$ F( {. i$ |! i2 Y典型:springhessian-servlet.xml% h6 x2 Q+ W( k/ ]  B: }9 S
Xml代码7 v  ?$ W6 b) ?6 H/ P
《?xml version=“1.0” encoding=“UTF-8”?》3 X. w+ G: r4 a7 G- |3 t: l
《!DOCTYPE beans PUBLIC “-//SPRING//DTD BEAN//EN” “http://www.springframework.org/dtd/spring-beans.dtd”》
. G/ t5 ^1 P0 l8 N& c9 P《beans》  l( {: Y+ h: @; A
《bean id=“helloHessianImpl”1 Q6 M; l+ Z8 @, W$ V# z
class=“michael.hessian.impl.HelloHessianImpl” /》
  @' W. I! P; l《!-- 使用HessianServiceExporter 将bean生成Hessian处事--》* S$ _! W. W, T  `  Y" l  M
《bean name=“/helloHessianService”
, s: n% q) Q# I3 `, e( h9 h2 D( J3 ]) Cclass=“org.springframework.remoting.caucho.HessianServiceExporter”》! K5 F7 b$ i! ]& R9 s5 m% c
《!-- 界说需要生成处事的实现类--》4 B6 ?; q7 o; A; y" w8 e/ q
《property name=“service” ref=“helloHessianImpl” /》( X4 o1 q0 A3 a4 C
《!-- Hessian 供给处事的接口--》
4 {; C" U) n; X' i3 V. Q! e2 s《property name=“serviceInterface”
$ e& c3 C: F# T3 K" V" `value=http://www.examw.com/java/zhuangye/157581/“michael.hessian.HelloHessian” /》
8 z& M& @2 T( N3 Y《/bean》
/ z9 U6 j  d6 f; o5 k《/beans》
2 p' g- Z, u' a5 U《?xml version=“1.0” encoding=“UTF-8”?》) _' l$ M' j  n( ?+ f1 P
《!DOCTYPE beans PUBLIC “-//SPRING//DTD BEAN//EN” “http://www.springframework.org/dtd/spring-beans.dtd”》
8 H$ E( h2 L7 ^1 |; p8 K《beans》
7 V) h5 S# E/ L+ |; m+ g《bean id=“helloHessianImpl”1 N, g# p* q2 o! d0 M# Y; F( q" X
class=“michael.hessian.impl.HelloHessianImpl” /》- l  U) W1 ~0 e2 t
《!-- 使用HessianServiceExporter 将bean生成Hessian处事--》" |- G7 ?4 D( H$ }% n2 z  a; D
《bean name=“/helloHessianService”. y% I& g0 f9 p+ `1 E  M; s/ ?
class=“org.springframework.remoting.caucho.HessianServiceExporter”》
: E/ \1 a; z9 y7 @) l8 }《!-- 界说需要生成处事的实现类--》
. K2 l) B5 l4 R! y《property name=“service” ref=“helloHessianImpl” /》0 F$ a# H$ f, W4 r
《!-- Hessian 供给处事的接口--》
) C) Q5 x7 h0 e& D% K- n《property name=“serviceInterface”3 S6 l. Z0 E, ?/ h# [* l
value=http://www.examw.com/java/zhuangye/157581/“michael.hessian.HelloHessian” /》
; r6 {: b5 c! X! K) z《/bean》! U  Q: v% y% ~  }/ V$ G& P: g2 L
《/beans》
+ V: a4 K' N& |. p3.java客户端验证' E9 D* Q+ [! I" z8 O% E- H
和膳缦沔的例子相似,只需要把访谒的url替代成新的即可如下:. Q! n& \3 `1 x. B5 M
Java代码0 m2 N9 `" j# U: F' }+ x
String url=http://localhost:8082/J2EE_sjsky/springhessian/helloHessianService6 p8 p# _6 J) j
String url=http://localhost:8082/J2EE_sjsky/springhessian/helloHessianService
/ g3 S. p% e( C4 u运行结不美观和膳缦沔例子一样。
2 c3 }, v) B* z4.spring设置装备摆设客户端
$ f3 g5 }4 j2 B, N7 F增添一个spring的bean设置装备摆设文件hessian-client.xml4 V+ ]: m3 |( q8 o+ u
Xml代码
7 _+ ]% W' J7 Q《?xml version=“1.0” encoding=“UTF-8”?》+ ?; [8 A2 f5 m# \5 t/ E) E
《!DOCTYPE beans PUBLIC “-//SPRING//DTD BEAN//EN” “http://www.springframework.org/dtd/spring-beans.dtd”》
/ L* b, l. T$ N! x. d& S《beans》( H- q& d& L9 z3 e9 N
《bean id=“helloHessianClient”
$ s# g" C: n" V& pclass=“org.springframework.remoting.caucho.HessianProxyFactoryBean”》  W1 `0 ^, ~; R& }9 J  T8 W8 q
《property name=“serviceUrl”》
6 R  l6 O' i% d5 `" \( `+ B. D《value》. M3 l  k5 v* h8 ]
http://localhost:8082/J2EE_sjsky/springhessian/helloHessianService
  S9 B8 L/ ]# X7 |《/value》5 A6 Y$ v9 `8 r0 O0 @
《/property》
2 M+ g3 j* [, b《property name=“serviceInterface”
" k* |% H; w0 z+ k+ kvalue=http://www.examw.com/java/zhuangye/157581/“michael.hessian.HelloHessian” /》
4 o+ V+ }* f' r* r0 S; o* R( l5 o《/bean》
3 |8 `6 h# R) C4 ?! a6 x% y  t《/beans》5 u( ~7 g, N+ ]3 I  a. v1 U, f) ~
《?xml version=“1.0” encoding=“UTF-8”?》/ ?. G3 ?8 a& M$ r
《!DOCTYPE beans PUBLIC “-//SPRING//DTD BEAN//EN” “http://www.springframework.org/dtd/spring-beans.dtd”》
$ L2 K0 {9 W# K6 K《beans》
  a% U% i0 G5 a3 d# J7 D0 p《bean id=“helloHessianClient”" X' G2 l3 F8 M: R# b
class=“org.springframework.remoting.caucho.HessianProxyFactoryBean”》' u4 ~5 `: M/ M% \" q
《property name=“serviceUrl”》
$ a; N# H* v0 Q《value》' V. u0 n- j5 g5 G
http://localhost:8082/J2EE_sjsky/springhessian/helloHessianService
# ~( J( u1 x. L9 l《/value》
% W. g& ^4 [1 ]3 A) C+ a; Y2 v《/property》' K# X% y8 C" H
《property name=“serviceInterface”
1 [8 ?" l$ F) Hvalue=http://www.examw.com/java/zhuangye/157581/“michael.hessian.HelloHessian” /》
2 J& q/ v3 s- J* u9 b1 ~《/bean》: D* {& W! H) w6 c
《/beans》4 v" \9 X, F( o+ ?' N1 ?# t
测试代码HessianSpringClient.java:% J4 r6 o/ w" ?. T$ t! W8 x$ N
Java代码; e3 R" F: f/ x
package michael.hessian.client;  P$ _- Y4 P4 }
import java.util.Map;
4 g( f, G4 n* [9 K6 ^: d: simport michael.hessian.HelloHessian;& `6 y7 A8 @, w# D4 @1 k( v1 p
import michael.hessian.MyCar;8 I0 I. E: J0 f$ C) r+ A
import org.springframework.context.ApplicationContext;
$ T1 ^  b5 r$ E4 O$ B+ cimport org.springframework.context.support.ClassPathXmlApplicationContext;
6 M  z8 V0 J1 f5 F0 Z/**
& A7 D8 O8 V9 r. H4 E. ~5 |( B* @author michael" E8 Y, H" c1 c) a
*5 g2 f9 I* E2 `. U' }  k
*/* _( g5 M' P/ y8 x, k/ X* m
/ h1 o6 Q, r& \0 A1 {6 Y

" E3 X3 H% G" Y/ J2 }& V. Bpublic class HessianSpringClient {
0 @2 v  w/ V/ n5 P7 y% g/**( k; Q# d" ?, f. l# m; U6 E; _1 R
* @param args
. {! Q7 B6 x2 }& L- N9 J' [, k*/
/ D8 q; s5 v  Epublic static void main(String[] args) {
" i' B' L7 i: v+ g1 |try {
# @1 t8 i& \4 C, \; B9 yApplicationContext context = new ClassPathXmlApplicationContext(+ X* D/ A2 z3 @
“hessian-client.xml”);  p/ d2 G* Y  `' [5 M3 I
HelloHessian hello = (HelloHessian) context
% ]2 b* g; Z* B1 i6 X- U.getBean(“helloHessianClient”);0 p% q2 b/ {0 F0 h6 v
System.out.println(hello.sayHello());  R( [( _# @# i9 U' Z; U
MyCar car = hello.getMyCar();
8 Z: S- S# f% g, wSystem.out.println(car.toString());
9 u9 t0 N6 }+ Bfor (Map.Entry《String, String》 entry : hello.myBabays().entrySet()) {
' k5 t" @" m% Q& U, @  D+ d+ |; WSystem.out.println(entry.getKey() + “ ” + entry.getValue());
# ?! L. \: u8 x}6 g6 F0 H$ Q# {9 L  d' K: o
for (String str : hello.myLoveFruit()) {
( \* \. J5 y3 j' CSystem.out.println(str);
  W% K/ E+ }% T% I, {, M  p1 I* O5 A8 E' B
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-4 12:28:26 | 显示全部楼层

JAVA技巧:小小试Hessian实现webservice

</p>} catch (Exception e) {
) }9 b# _9 ~4 B' {) we.printStackTrace();/ [  Y* L9 Z- a& e# r2 ]2 A
}& B: }% A# [4 j1 l+ _. ~+ `
}
# k9 U/ H' r2 [: d5 o8 q# I# k}
4 ?+ i( i, E. I8 R7 t/ apackage michael.hessian.client;/ T! s% z) N$ b  L. r2 W% _
import java.util.Map;
5 F/ e- \4 G' k0 Pimport michael.hessian.HelloHessian;  U. ~! T3 ]. j0 J) v  V. T
import michael.hessian.MyCar;
" v" m& b' J# G  a2 I$ Qimport org.springframework.context.ApplicationContext;  z4 r$ d8 \. U  |3 c8 F
import org.springframework.context.support.ClassPathXmlApplicationContext;
2 Q$ g  x7 {% B) h0 X/**1 \' @( \0 C2 D% F0 |9 a
* @author michael0 P* q2 M9 `& y4 Z* M
*
1 }& t5 Y5 i+ `*/
/ s% y$ A7 ?8 O4 x' Cpublic class HessianSpringClient {
) R5 z1 c0 ?4 v- P8 e/**
! P$ o* U1 w: {& O8 Y( v% C" p* @param args
. Q5 t3 h) ~# w& R: j*/
! ^' H3 c5 I8 x$ G0 C8 Lpublic static void main(String[] args) {5 p' K2 }6 Q6 K. N1 P3 w; m
try {$ I+ `$ Y5 i' t  ]
ApplicationContext context = new ClassPathXmlApplicationContext(
5 u! [' \1 \- G( v. ?4 T! B“hessian-client.xml”);+ F% A. N& A+ ^: ?4 W) y
HelloHessian hello = (HelloHessian) context
7 y& U: {0 m6 O1 }1 p" U4 r" T.getBean(“helloHessianClient”);
8 ?  x1 k; }* g0 {: J# f5 h2 lSystem.out.println(hello.sayHello());
/ P& R" e2 P: V9 AMyCar car = hello.getMyCar();
# Q3 B4 P7 L) n  }System.out.println(car.toString());
5 H, i$ N* ^- Zfor (Map.Entry《String, String》 entry : hello.myBabays().entrySet()) {
' q. t: ?- ~. {4 n  |& oSystem.out.println(entry.getKey() + “ ” + entry.getValue());5 T7 P; N+ V) `8 W' N
}
# p$ t3 [3 s: c; xfor (String str : hello.myLoveFruit()) {' i6 o( Y4 v% a+ e$ @
System.out.println(str);+ [3 s0 L( Q6 `: J) _
}
: E. n, C; `6 K3 R2 T} catch (Exception e) {
' N( @( T5 S2 j7 }e.printStackTrace();4 p" B  w5 B3 R+ J5 w
}
4 W2 ]  \! o- x: _8 J6 a8 f- P}6 b. p* y! j# Y6 P8 j4 ]) j( i/ @
}* T8 s# A5 q1 z' v& e
运行结不美观和膳缦沔完全一致8 X0 J, z, V6 E6 G
5.com.caucho.hessian.io.HessianProtocolException: expected string at 0x6d异常措置- A' W( X# [( q
我在spring+hessian整合测试过程中,客户端挪用时,发生了异常,而处事端错误内容如下:; p& ^  M+ u, W
Java代码4 w) u5 _- Z  Q+ ?# |! p3 z. [/ B
2011-4-25 16:14:44 org.apache.catalina.core.StandardWrapperValve invoke
" c7 t+ M; b) B- C# C0 V+ R严重: Servlet.service() for servlet remoting threw exception6 ~; R  D  v7 s% k; [
com.caucho.hessian.io.HessianProtocolException: expected string at 0x6d% c5 o( f7 L! V8 f
at com.caucho.hessian.io.Hessian2Input.error(Hessian2Input.java:2882)7 F& w- h1 f1 I/ T; \+ M9 l
at com.caucho.hessian.io.Hessian2Input.expect(Hessian2Input.java:2830)
$ f* r& N/ l) M2 t3 I3 ^at com.caucho.hessian.io.Hessian2Input.readString(Hessian2Input.java:1362)$ |+ A! q4 ~! M$ X! u$ ~+ W( M" X# P
at com.caucho.hessian.io.Hessian2Input.readMethod(Hessian2Input.java:272)" {& R2 I& N  M  m  k" i: e
at com.caucho.hessian.server.HessianSkeleton.invoke(HessianSkeleton.java:249)
* O. j4 A4 t+ Q, sat com.caucho.hessian.server.HessianSkeleton.invoke(HessianSkeleton.java:221)" Y9 R/ F6 U4 H3 J+ R6 D
at org.springframework.remoting.caucho.Hessian2SkeletonInvoker.invoke(Hessian2SkeletonInvoker.java:67)
1 t% j! i7 e) B; Z$ aat org.springframework.remoting.caucho.HessianServiceExporter.handleRequest(HessianServiceExporter.java:147)
  y4 W7 K, Z. uat org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:49)
" G& @) b* \9 G# j2 k6 Lat org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:819)
/ O; w8 p( q; y5 mat org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:754)' F; a0 h7 m5 A& z" t* R+ H+ u
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:399)# l& w: ?0 V# l3 z2 b* a
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:364)7 @. v: u; V9 _0 x! j) i9 l
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710). D1 F3 g1 B( ^+ h# R
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)7 l3 v! t. y" E; ]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
, w: \4 Q7 p5 [4 t5 `at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
8 k5 d, p+ M. E% Mat org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)5 [, L, \0 M$ E
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)0 v4 i, A7 Z  `
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
+ C# e* ]; m  L+ p: k6 C1 {" O: Kat org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
7 |) `8 ?" Q7 y/ y$ E' N- d; Mat org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)2 b$ w; J! s9 H
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
1 \7 F& q+ k+ Xat org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
3 @$ N" s. V. Y3 s+ X1 z. pat org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
4 @5 ?3 E+ f7 p8 P; @) @at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)) I6 a6 q  Y4 d' E- U: t& l6 f( z
at java.lang.Thread.run(Thread.java:619)
6 p8 D* d. O) I7 W. f) w2011-4-25 16:14:44 org.apache.catalina.core.StandardWrapperValve invoke, Q) p6 C1 S4 u8 ]/ `
严重: Servlet.service() for servlet remoting threw exception3 M# x& i+ L% o1 h% J  d
com.caucho.hessian.io.HessianProtocolException: expected string at 0x6d
( @: S6 ?, r/ {at com.caucho.hessian.io.Hessian2Input.error(Hessian2Input.java:2882)0 h; \! C1 U0 r8 B5 E5 G
at com.caucho.hessian.io.Hessian2Input.expect(Hessian2Input.java:2830)
* i  l% g( ]! s4 C- Eat com.caucho.hessian.io.Hessian2Input.readString(Hessian2Input.java:1362)6 {  C4 `8 y* Q, w( `
at com.caucho.hessian.io.Hessian2Input.readMethod(Hessian2Input.java:272)- A2 M. {& F% T. g: ^, [+ v* A
at com.caucho.hessian.server.HessianSkeleton.invoke(HessianSkeleton.java:249)& X6 K) L* i7 k3 b& Y
at com.caucho.hessian.server.HessianSkeleton.invoke(HessianSkeleton.java:221)
8 \  C1 S0 {& a3 }+ }7 p' E& i' h; ~* R* |

0 `& G) u) h- E; r/ x* ~6 Cat org.springframework.remoting.caucho.Hessian2SkeletonInvoker.invoke(Hessian2SkeletonInvoker.java:67)
. C1 w* b# h. C+ m5 H2 {at org.springframework.remoting.caucho.HessianServiceExporter.handleRequest(HessianServiceExporter.java:147)
, C2 D: y, j/ |( R2 K+ tat org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:49)6 j* i3 x! F+ y' [" Y3 [. y
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:819)
! |3 L5 F# R) F9 G- y- Vat org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:754)! Q7 M. p5 X) M9 o) N
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:399)
! I9 A  J; T# B5 g4 D( xat org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:364); l8 X1 N/ q0 L/ b
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710): b! y9 ^3 B5 H
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
: y) ~* w6 A! T* F- w; `9 W- b  vat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
2 a$ G2 b% G% }& Z9 l+ {" }at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)$ I3 |9 ]; ~' o6 u; g6 e2 i
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
- \. u+ `6 M8 zat org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)* z8 z, W& b( s/ e- c: v; I# b4 i
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)" L/ n9 z3 k; y) ^1 r5 k
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
( Q3 S5 q+ ^+ M% D: @at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109). ?, v% c2 [! ?9 ~+ _: s
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
; K( o& w# V0 Cat org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)% ?+ |1 Y+ S  m2 Y& @% W% |
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581): J4 Z( N- A9 v0 e
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)  |8 o7 j9 o2 e1 l4 y2 N/ N
at java.lang.Thread.run(Thread.java:619)9 ]2 L% t  `5 ?  t, j0 m% r% O
经查资料发现原始是hessian和spring的版本不兼容引起的,从头下载hessian-3.1.6.jar导入项目,一路运行正常,测试完全经由过程。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-4 01:05 , Processed in 0.206692 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表