• Spring整合Hessian


    Spring让Hessian变得不但强大,而且易用,但是易用背后,却有不少陷阱!
     
    这个例子很简单,但实际上的确花费了我超过一小时的时间,排除了种种问题,最后问题终于水落石出。
     
    整合以上篇Hello Hessian为基础,加入Spring框架,进行改进。
     
    一、环境
    jdk1.5
     
    顺便说下,如果不说环境版本,很难保证你的程序在别的版本下能运行。
     
    二、整合
     
    1、写Spring的发布Hessian服务的配置文件
     
    hessian-servlet.xml
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> 
    <beans> 
            <bean id="defaultHandlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> 
            <bean id="helloService" class="lavasoft.suths.service.HelloService"/> 
            <bean name="/hello" class="org.springframework.remoting.caucho.HessianServiceExporter"> 
                    <property name="service" ref="helloService"/> 
                    <property name="serviceInterface" value="lavasoft.suths.service.Hello"/> 
            </bean> 
    </beans>
     
    2、配置web.xml
    <?xml version="1.0" encoding="UTF-8"?> 
    <web-app xmlns="http://java.sun.com/xml/ns/javaee" 
                     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
            http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
                     version="2.5"> 
            <context-param> 
                    <param-name>contextConfigLocation</param-name> 
                    <param-value> 
                            /WEB-INF/hessian-servlet.xml 
                    </param-value> 
            </context-param> 
            <servlet> 
                    <servlet-name>hessian</servlet-name> 
                    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
                    <load-on-startup>4</load-on-startup> 
            </servlet> 

            <servlet-mapping> 
                    <servlet-name>hessian</servlet-name> 
                    <url-pattern>/hessian/*</url-pattern> 
            </servlet-mapping> 
    </web-app>
     
    陷阱:
    a)hessian-servlet.xml的文件名必须以<servlet-name>hessian</servlet-name>名字开头,并且加上-servlet.xml一段,组成完整的文件名。
    b)hessian-servlet.xml的文件名格式必须是[servlet-name]-servlet.xml格式,否则出错。
     
    三、部署应用
     
    因为涉及到类加载顺序问题,好用IDEA启动Tomcat测试老失败,不知道为啥!这次不用IDEA嵌入式启动Tomcat了,直接自己部署测试。
    部署后,启动界面如下:
     
    三、写测试
     
    这次测试,可以在上个例子的基础上进行修改来测试,根据上面的配置,那么请求HelloService的URL应该是:http://localhost:8080/hessianapp/hessian/hello
    package lavasoft.suths.service.client; 

    import com.caucho.hessian.client.HessianProxyFactory; 
    import lavasoft.suths.service.Hello; 

    import java.net.MalformedURLException; 

    /** 
    * 客户端调用(会依赖服务接口) 

    * @author leizhimin 2009-8-14 12:29:33 
    */
     
    public class Client { 
            public static void main(String[] args) throws MalformedURLException { 
                    String url = "http://localhost:8080/hessianapp/hessian/hello"; 
                    HessianProxyFactory factory = new HessianProxyFactory(); 
                    Hello hello = (Hello) factory.create(Hello.class, url); 
                    System.out.println(hello.sayHello("Hessian")); 
            } 
    }
     
    运行结果:
    Hello Hessian! 

    Process finished with exit code 0
     
    还有一种测试方法,就是在客户端也使用Spring,需要做个配置remoting-client.xml:
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> 
    <beans> 
            <bean id="helloServiceClient" class="org.springframework.remoting.caucho.HessianProxyFactoryBean"
                    <property name="serviceUrl" value="http://localhost:8080/hessianapp/hessian/hello"/> 
                    <property name="serviceInterface" value="lavasoft.suths.service.Hello"/> 
            </bean> 
    </beans>
     
    然后写个测试类:
    package lavasoft.suths.service.client; 

    import lavasoft.suths.service.Hello; 
    import org.springframework.context.ApplicationContext; 
    import org.springframework.context.support.ClassPathXmlApplicationContext; 

    /** 
    * Spring整合Hessian,客户端测试 

    * @author leizhimin 2009-8-14 15:32:46 
    */
     
    public class TestClient { 
            public static void main(String[] args) { 
                    try { 
                            ApplicationContext context = new ClassPathXmlApplicationContext("/remoting-client.xml"); 
                            Hello hello = (Hello) context.getBean("helloServiceClient"); 
                            System.out.println(hello.sayHello("Spring Hession")); 
                    } 
                    catch (Exception e) { 
                            e.printStackTrace(); 
                    } 
            } 
    }
     
    运行结果:
    Hello Spring Hession! 

    Process finished with exit code 0
     
    陷阱:
    实际上,看着代码好好,程序有时候还是不能跑,原因是Hessian的版本问题,这里推荐使用Spring自带的版本,就不会有问题了。
     
    整个工程所以依赖的包:
    log4j-1.2.15.jar 
    spring-aop.jar 
    spring-beans.jar 
    spring-context.jar 
    spring-context-support.jar 
    spring-core.jar 
    spring-jdbc.jar 
    spring-jms.jar 
    spring-orm.jar 
    spring-test.jar 
    spring-tx.jar 
    spring-web.jar 
    spring-webmvc.jar 
    spring-webmvc-portlet.jar 
    spring-webmvc-struts.jar 
    hessian-3.1.3.jar 
    aopalliance.jar 
    commons-logging.jar
  • 相关阅读:
    python中的 upper() 、lower()、capitalize()、title()方法
    python中的strip()函数的用法
    python中的split()函数的用法
    python中的join()函数的用法
    appium 简单的测试例子(1)
    模拟器连接使用
    appuim连接时的一些出现的错误
    android获取包名的几种方法
    python+Appium(1)
    专注基础软件自研,巨杉入选“2020信创产业独角兽100强”
  • 原文地址:https://www.cnblogs.com/duanxz/p/4494226.html
Copyright © 2020-2023  润新知