加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Hessian, 短小精悍的webService 解决方案

发布时间:2020-12-17 00:21:56 所属栏目:安全 来源:网络整理
导读:Hessian,短小精悍的webService 解决方案 ? 可能你不知道这个单词: Hessian ,我查过,是: hessian ?n. 粗麻布 ,我晕倒,怎么这么多的 Java 爱好者,把这些名字都取得稀奇古怪。 ?? 言规正传,我们莱说这块:粗麻布(它的英文发音也很奇怪),这个 140K 的
Hessian,短小精悍的webService 解决方案 ?

可能你不知道这个单词:Hessian,我查过,是:hessian ?n. 粗麻布,我晕倒,怎么这么多的Java爱好者,把这些名字都取得稀奇古怪。

?? 言规正传,我们莱说这块:粗麻布(它的英文发音也很奇怪),这个140K的东西,可以替代Webservice,或者说它就是一个webService的构建者,可以实现非SOAP协议的远程事务调用,对象传递和大文件传递。

?? 先看看怎么部署它,我用的Java Container是他的哥哥Resin(也是一个奇怪的名字),先把这个140kbJar拷贝到你的webapp目录的WEB-INF下的lib目录里面。,接下来我们做一个tutorship

先建立一个接口,相当于EJB里面的stub,如下:

package app.demo;

public interface BasicAPI {

??? public String hello();

???? public User getUser();

}?

再建立一个实现类:

package app.demo;

public class BasicService implements BasicAPI{

??? private String _greeting = "Hello,world";

????? public void setGreeting(String greeting)

????? {

??????? _greeting = greeting;

????? }

?????? public String hello()

?????? public String hello()

?????? public String hello()

?????? public String hello()

?????? public String hello()

?????? public String hello()

????? {

??????? return _greeting;

????? }

?????? public User getUser(){

?????? public User getUser(){

?????? public User getUser(){

?????? public User getUser(){

?????? public User getUser(){

?????? public User getUser(){

????????? return new User("prance","meshow");

????? }

}

为了查看它是否可以传递对象,我们再建立一个可以序列化的User对象

package app.demo;

public class User implements java.io.Serializable? {

??? String userName="snoopy";

??? String password ="showme";

??? public User( String user,String pwd){

??????? this.userName =user;

??????? this.password =pwd;

??? }

??? public String getUserName() {

??????? return userName;

??? }

??? public String getPassword() {

??????? return password;

??? }

}?

好了接下部署在你的webapp下面,申明一下,这个麻布可以在它哥哥的早期版本下面使用,我在resin2.1.10下面测试是可以的,废话不说,直接配置web.xml如下

<servlet servlet-name="hello"

?????????? servlet-class="com.caucho.hessian.server.HessianServlet">

??? <init-param service-class="app.demo.BasicService"/>

??? <init-param api-class="app.demo.BasicAPI"/>

? </servlet>?

? <servlet-mapping url-pattern="/hello" servlet-name="hello"/>

人们的好奇心就是没有救,我访问了一下这个servlet,大家可能很奇怪,我没有写servlet呀,当然,在hessian-3.0.13.jar里面有,你如果看到一行字:

Hessian Requires POST

没错,就是它。

先试一下用客户程序来访问它:

代码如下:

package app.demo;

import com.caucho.hessian.client.HessianProxyFactory;

public class BasicClient {

? public static void main(String []args)

??? throws Exception

? {

??? String url = "http://127.0.0.1:81/demo/hello";

???? HessianProxyFactory factory = new HessianProxyFactory();

???? HessianProxyFactory factory = new HessianProxyFactory();

???? HessianProxyFactory factory = new HessianProxyFactory();

???? HessianProxyFactory factory = new HessianProxyFactory();

???? HessianProxyFactory factory = new HessianProxyFactory();

???? HessianProxyFactory factory = new HessianProxyFactory();

??? BasicAPI basic = (BasicAPI) factory.create(BasicAPI.class,url);

???? System.out.println("Hello: " + basic.hello());

???? System.out.println("Hello: " + basic.hello());

???? System.out.println("Hello: " + basic.hello());

???? System.out.println("Hello: " + basic.hello());

???? System.out.println("Hello: " + basic.hello());

???? System.out.println("Hello: " + basic.hello());

??? System.out.println("Hello: " + basic.getUser() .getUserName() );

????? System.out.println("Hello: " + basic.getUser().getPassword()? );

?? }

?? }

?? }

?? }

?? }

?? }

}

直接执行,结果是这样的:

Hello: Hello,world

Hello: prance

Hello: meshow

这个结果说明,从一个client application是可以调用hessian的,而且可以传递对象。

最后用一个jsp来检验一下:

<%@ page import="com.caucho.hessian.client.HessianProxyFactory,

???????????????? app.demo.BasicAPI"%>

<%@page language="java" %>

<%

?String url = ("http://" +request.getServerName() + ":" + request.getServerPort() +

????????? request.getContextPath() + "/hello");

??? out.println(url);

??? HessianProxyFactory factory = new HessianProxyFactory();

??? BasicAPI basic = (BasicAPI) factory.create(BasicAPI.class,url);

??? out.println("Hello: " + basic.hello());

??? out.println("Hello: " + basic.getUser() .getUserName() );

??? out.println("Hello: " + basic.getUser().getPassword()? );?

%>

好了,全部测试完毕,简简单单,快快乐乐。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读