Hession学习3

来源:互联网 发布:centos 安装vncserver 编辑:程序博客网 时间:2024/06/18 18:00

一、创建Hessian的Server


1.1创建web项目HessionSer,其pom.xml配置如下:

[java] view plain copy
  1. <properties>  
  2.         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
  3.         <argLine>-Dfile.encoding=UTF-8</argLine>  
  4.         <spring.version>4.1.6.RELEASE</spring.version>  
  5.     </properties>  
  6.     <dependencies>  
  7.         <dependency>  
  8.             <groupId>javax.servlet</groupId>  
  9.             <artifactId>jstl</artifactId>  
  10.             <version>1.2</version>  
  11.             <scope>provided</scope>  
  12.         </dependency>  
  13.         <dependency>  
  14.             <groupId>javax.servlet.jsp</groupId>  
  15.             <artifactId>jsp-api</artifactId>  
  16.             <version>2.1</version>  
  17.             <scope>provided</scope>  
  18.         </dependency>  
  19.         <dependency>  
  20.             <groupId>org.glassfish</groupId>  
  21.             <artifactId>javax.annotation</artifactId>  
  22.             <version>3.0.1</version>  
  23.         </dependency>  
  24.         <dependency>  
  25.             <groupId>org.glassfish</groupId>  
  26.             <artifactId>javax.ejb</artifactId>  
  27.             <version>3.0.1</version>  
  28.         </dependency>  
  29.         <dependency>  
  30.             <groupId>org.jboss.weld</groupId>  
  31.             <artifactId>weld-osgi-bundle</artifactId>  
  32.             <version>1.0.1-SP3</version>  
  33.         </dependency>  
  34.         <dependency>  
  35.             <groupId>org.glassfish</groupId>  
  36.             <artifactId>javax.servlet</artifactId>  
  37.             <version>3.0.1</version>  
  38.         </dependency>  
  39.         <dependency>  
  40.             <groupId>com.caucho</groupId>  
  41.             <artifactId>hessian</artifactId>  
  42.             <version>4.0.38</version>  
  43.         </dependency>  
  44.         <dependency>  
  45.             <groupId>org.springframework</groupId>  
  46.             <artifactId>spring-test</artifactId>  
  47.             <version>${spring.version}</version>  
  48.         </dependency>  
  49.         <dependency>  
  50.             <groupId>org.springframework</groupId>  
  51.             <artifactId>spring-core</artifactId>  
  52.             <version>${spring.version}</version>  
  53.         </dependency>  
  54.         <dependency>  
  55.             <groupId>org.springframework</groupId>  
  56.             <artifactId>spring-aop</artifactId>  
  57.             <version>${spring.version}</version>  
  58.         </dependency>  
  59.         <dependency>  
  60.             <groupId>org.springframework</groupId>  
  61.             <artifactId>spring-webmvc</artifactId>  
  62.             <version>${spring.version}</version>  
  63.         </dependency>  
  64.         <dependency>  
  65.             <groupId>org.springframework</groupId>  
  66.             <artifactId>spring-jdbc</artifactId>  
  67.             <version>${spring.version}</version>  
  68.         </dependency>  
  69.     </dependencies>  

1.2.配置web.xml

[java] view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">  
  3.   <display-name></display-name>  
  4.   <welcome-file-list>  
  5.     <welcome-file>index.jsp</welcome-file>  
  6.   </welcome-file-list>  
  7.   <context-param>  
  8.     <param-name>contextConfigLocation</param-name>  
  9.     <param-value>  
  10.             classpath*:spring*.xml  
  11.         </param-value>  
  12.   </context-param>  
  13.   <listener>  
  14.     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  15.   </listener>  
  16.   <servlet>  
  17.     <servlet-name>remoting</servlet-name>  
  18.     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  19.     <init-param>  
  20.       <param-name>contextConfigLocation</param-name>  
  21.       <param-value>classpath*:remoting-servlet.xml</param-value>  
  22.     </init-param>  
  23.     <load-on-startup>1</load-on-startup>  
  24.   </servlet>  
  25.   <servlet-mapping>  
  26.     <servlet-name>remoting</servlet-name>  
  27.     <url-pattern>/remoting/*</url-pattern>  
  28.   </servlet-mapping>  
  29. </web-app>  

1.3.Hessian的配置文件:remoting-servlet.xml。

因为web.xml里的servlet为remoting,默认会查找servlet的name-servlet.xml的文件,即remoting-servlet.xml,而上面配置里通过contextConfigLocation去查找,所以,此时该配置文件名字可以任意设置。内容如下:
[java] view plain copy
  1. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">  
  2. <beans>  
  3.     <!-- 接口的具体实现类 -->  
  4.     <!-- <bean id="loginTestInterfa" class="com.cn.wddqz.manage.impl.LoginTestImpl" /> -->  
  5.     <!-- 使用Spring的HessianServie做代理 -->  
  6.     <bean name="/loginTestInterfa"  
  7.     class="org.springframework.remoting.caucho.HessianServiceExporter">  
  8.         <!-- service引用具体的实现实体Bean-->  
  9.         <property name="service" ref="loginTestInterfa" />  
  10.         <property name="serviceInterface" value="com.cn.wddqz.manage.LoginTestInterfa" />  
  11.     </bean>  
  12.   
  13. </beans>  

1.4.因为用到spring注解,所以配置spring-servlet.xml:

[java] view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"  
  4.     xmlns:context="http://www.springframework.org/schema/context"  
  5.     xmlns:mvc="http://www.springframework.org/schema/mvc"  
  6.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd     
  7.        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd     
  8.        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd     
  9.        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd  
  10.        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd">  
  11.   
  12.     <!-- 设置使用注解的类所在的jar包 -->  
  13.     <context:component-scan base-package="com.cn.wddqz"></context:component-scan>  
  14.   
  15.     <!-- 完成请求和注解POJO的映射 -->  
  16.     <bean  
  17.         class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />  
  18.     <bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"/>  
  19. </beans>  

1.5.定义一个接口

[java] view plain copy
  1. package com.cn.wddqz.manage;  
  2.   
  3. /** 
  4.  * Hessian Server的接口需要暴露给client使用 
  5.  * 类名称:LoginTestInterfa 
  6.  * 类描述: 
  7.  * 创建人:wodediqizhang@163.com 
  8.  * 修改时间:2016-6-20 下午4:22:02 
  9.  * Modification History: 
  10.  * ============================================================================= 
  11.  *   Author         Date          Description 
  12.  *   ------------ ---------- --------------------------------------------------- 
  13.  *   ghb            2016-6-20        创建文档  
  14.  * ============================================================================= 
  15.  * @version 1.0.0 
  16.  * 
  17.  */  
  18. public interface LoginTestInterfa {  
  19.   
  20.     public String qualifyInfo(String name,String mail) ;  
  21. }  

1.6.接口的实现:

[java] view plain copy
  1. package com.cn.wddqz.manage.impl;  
  2.   
  3. import com.cn.wddqz.manage.LoginTestInterfa;  
  4. import org.springframework.stereotype.Service;  
  5. /** 
  6.  * Hessian Server的接口实现,client调用接口,会在这里进行业务处理 
  7.  * 类名称:LoginTestImpl 
  8.  * 类描述: 
  9.  * 创建人:wodediqizhang@163.com 
  10.  * 修改时间:2016-6-20 下午4:22:44 
  11.  * Modification History: 
  12.  * ============================================================================= 
  13.  *   Author         Date          Description 
  14.  *   ------------ ---------- --------------------------------------------------- 
  15.  *   ghb            2016-6-20        创建文档  
  16.  * ============================================================================= 
  17.  * @version 1.0.0 
  18.  * 
  19.  */  
  20. @Service("loginTestInterfa")  
  21. public class LoginTestImpl implements LoginTestInterfa {  
  22.   
  23.     @Override  
  24.     public String qualifyInfo(String name, String mail) {  
  25.         System.out.println("Hessian Server 接口调用");  
  26.         return "名字:["+name+"],邮箱:["+mail+"]";  
  27.     }  
  28. }  

此时,Hessian的Server端已经完成了。因为Hessian是接口暴露,所以将HessianSer的接口导出为jar,提供给HessianCli使用。

二、创建Hessian的Client


2.1.pom.xml加载jar包:

[java] view plain copy
  1. <properties>  
  2.         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
  3.         <argLine>-Dfile.encoding=UTF-8</argLine>  
  4.         <spring.version>4.1.6.RELEASE</spring.version>  
  5.     </properties>  
  6.     <dependencies>  
  7.         <dependency>  
  8.             <groupId>javax.servlet</groupId>  
  9.             <artifactId>jstl</artifactId>  
  10.             <version>1.2</version>  
  11.             <scope>provided</scope>  
  12.         </dependency>  
  13.         <dependency>  
  14.             <groupId>javax.servlet.jsp</groupId>  
  15.             <artifactId>jsp-api</artifactId>  
  16.             <version>2.1</version>  
  17.             <scope>provided</scope>  
  18.         </dependency>  
  19.         <dependency>  
  20.             <groupId>org.glassfish</groupId>  
  21.             <artifactId>javax.annotation</artifactId>  
  22.             <version>3.0.1</version>  
  23.         </dependency>  
  24.         <dependency>  
  25.             <groupId>org.glassfish</groupId>  
  26.             <artifactId>javax.ejb</artifactId>  
  27.             <version>3.0.1</version>  
  28.         </dependency>  
  29.         <dependency>  
  30.             <groupId>org.jboss.weld</groupId>  
  31.             <artifactId>weld-osgi-bundle</artifactId>  
  32.             <version>1.0.1-SP3</version>  
  33.         </dependency>  
  34.         <dependency>  
  35.             <groupId>org.glassfish</groupId>  
  36.             <artifactId>javax.servlet</artifactId>  
  37.             <version>3.0.1</version>  
  38.         </dependency>  
  39.         <dependency>  
  40.             <groupId>com.caucho</groupId>  
  41.             <artifactId>hessian</artifactId>  
  42.             <version>4.0.38</version>  
  43.         </dependency>  
  44.         <dependency>  
  45.             <groupId>org.springframework</groupId>  
  46.             <artifactId>spring-test</artifactId>  
  47.             <version>${spring.version}</version>  
  48.         </dependency>  
  49.         <dependency>  
  50.             <groupId>org.springframework</groupId>  
  51.             <artifactId>spring-core</artifactId>  
  52.             <version>${spring.version}</version>  
  53.         </dependency>  
  54.         <dependency>  
  55.             <groupId>org.springframework</groupId>  
  56.             <artifactId>spring-aop</artifactId>  
  57.             <version>${spring.version}</version>  
  58.         </dependency>  
  59.         <dependency>  
  60.             <groupId>org.springframework</groupId>  
  61.             <artifactId>spring-webmvc</artifactId>  
  62.             <version>${spring.version}</version>  
  63.         </dependency>  
  64.         <dependency>  
  65.             <groupId>org.springframework</groupId>  
  66.             <artifactId>spring-jdbc</artifactId>  
  67.             <version>${spring.version}</version>  
  68.         </dependency>              <dependency>  
  69.             <groupId>hessianSer</groupId>  
  70.             <artifactId>hessianSer</artifactId>  
  71.             <version>0.0.1-SNAPSHOT</version>  
  72.         </dependency><pre name="code" class="java"></dependencies>  

2.2.配置web.xml

[java] view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="3.0"   
  3.     xmlns="http://java.sun.com/xml/ns/javaee"   
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  6.     http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">  
  7.   <display-name></display-name>   
  8.   <welcome-file-list>  
  9.     <welcome-file>index.jsp</welcome-file>  
  10.   </welcome-file-list>  
  11.   <context-param>  
  12.         <param-name>contextConfigLocation</param-name>  
  13.         <param-value>  
  14.             classpath*:context.xml  
  15.         </param-value>  
  16.     </context-param>  
  17.     <!-- Start 配置上下文载入器 -->  
  18.     <!-- 上下文载入器载入除DispatcherServlet载入的配置文件之外的其它上下文配置文件 -->  
  19.     <servlet>  
  20.         <servlet-name>spring</servlet-name>  
  21.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  22.         <!-- 可以自定义servlet.xml配置文件的位置和名称,默认为WEB-INF目录下,名称为[<servlet-name>]-servlet.xml,如spring-servlet.xml   
  23.             <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring-servlet.xml</param-value>    
  24.             默认 </init-param> -->  
  25.         <init-param>  
  26.             <param-name>contextConfigLocation</param-name>  
  27.             <param-value>classpath*:spring-servlet.xml</param-value>  
  28.         </init-param>  
  29.         <load-on-startup>1</load-on-startup>  
  30.     </servlet>  
  31.   
  32.     <servlet-mapping>  
  33.         <servlet-name>spring</servlet-name>  
  34.         <url-pattern>/</url-pattern>  
  35.     </servlet-mapping>  
  36.       
  37.     <!-- 最常用的上下文载入器是一个Servlet监听器,其名称为ContextLoaderListener -->  
  38.     <listener>  
  39.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  40.     </listener>  
  41.     <!-- End 配置上下文载入器 -->  
  42. </web-app>  


2.3.context.xml,客户端关于Hessian的配置:

[java] view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">  
  5.      <bean  
  6.         class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
  7.         <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />  
  8.         <property name="ignoreResourceNotFound" value="true" />  
  9.         <property name="locations">  
  10.             <list>  
  11.                 <value>classpath:hessian.properties</value>  
  12.             </list>  
  13.         </property>  
  14.     </bean>  
  15.     <!--客户端Hessian代理工厂Bean-->  
  16.     <bean id="loginTestInterfa"  
  17.         class="org.springframework.remoting.caucho.HessianProxyFactoryBean">  
  18.         <!--这是因为接口中出现方法重载,在调用时,服务器端会跑出异常 。在整合spring中,在客户端的配置里面加上如下代码可以解决:-->  
  19.         <property name="overloadEnabled" value="true" />  
  20.         <!--请求代理Servlet路径:-->  
  21.         <property name="serviceUrl" value="${hessian.url}loginTestInterfa" />  
  22.         <!--接口定义:-->  
  23.         <property name="serviceInterface"  
  24.             value="com.cn.wddqz.manage.LoginTestInterfa" />  
  25.     </bean>   
  26.   
  27. </beans>  

2.4.hessian.properties配置Hessian链接,内容如下:


[java] view plain copy
  1. #配置文件  
  2. hessian.url=http\://localhost\:8080/HessianSer/remoting/  

2.5.servlet配置文件spring-servlet.xml:

[java] view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"  
  4.     xmlns:context="http://www.springframework.org/schema/context"  
  5.     xmlns:mvc="http://www.springframework.org/schema/mvc"  
  6.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd     
  7.        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd     
  8.        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd     
  9.        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd  
  10.        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd">  
  11.   
  12.     <!-- 设置使用注解的类所在的jar包 -->  
  13.     <context:component-scan base-package="com.cn.wddqz.web"></context:component-scan>  
  14.   
  15.     <!-- 完成请求和注解POJO的映射 -->  
  16.     <bean  
  17.         class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />  
  18.   
  19.      <!-- 定义JSP -->  
  20.      <!-- 对转向页面的路径解析。prefix:前缀, suffix:后缀 -->  
  21.     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
  22.         <property name="prefix" value="/WEB-INF/views/" />  
  23.         <property name="suffix" value=".jsp" />  
  24.     </bean>  
  25. </beans>  

2.6.写个简单的jsp,index.jsp:

[java] view plain copy
  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
  2. <%  
  3. String path = request.getContextPath();  
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  5. %>  
  6.   
  7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  8. <html>  
  9.   <head>  
  10.     <base href="<%=basePath%>">  
  11.     <title>测试Hessian</title>  
  12.   </head>  
  13.     
  14.     <body>  
  15.     <div style="TEXT-ALIGN: center;MARGIN-RIGHT: auto; MARGIN-LEFT: auto; ">  
  16.         <form action="login" method="post">  
  17.             <div>  
  18.                 <label for="name">姓名:</label> <input class="easyui-validatebox"  
  19.                     type="text" name="name" data-options="required:true" />  
  20.             </div>  
  21.             <div>  
  22.                 <label for="email">邮箱:</label> <input class="easyui-validatebox"  
  23.                     type="text" name="email" data-options="validType:'email'" />  
  24.             </div>  
  25.             <div>  
  26.                 <button type="submit">登录</button>  
  27.             </div>  
  28.         </form>  
  29.     </div>  
  30.   </body>  
  31. </html>  

2.7.IndexController调用hessian接口

[java] view plain copy
  1. package com.cn.wddqz.web;  
  2.   
  3. import javax.servlet.http.HttpServletRequest;  
  4.   
  5. import org.springframework.beans.factory.annotation.Autowired;  
  6. import org.springframework.stereotype.Controller;  
  7. import org.springframework.web.bind.annotation.RequestMapping;  
  8. import org.springframework.web.servlet.ModelAndView;  
  9.   
  10. import com.cn.wddqz.manage.LoginTestInterfa;  
  11.   
  12. /** 
  13.  * 通过Controller调用hessian接口 
  14.  * 类名称:IndexController 
  15.  * 类描述: 
  16.  * 创建人:wodediqizhang@163.com 
  17.  * 修改时间:2016-6-20 下午4:22:02 
  18.  * Modification History: 
  19.  * ============================================================================= 
  20.  *   Author         Date          Description 
  21.  *   ------------ ---------- --------------------------------------------------- 
  22.  *   ghb            2016-6-20        创建文档  
  23.  * ============================================================================= 
  24.  * @version 1.0.0 
  25.  * 
  26.  */  
  27. @Controller  
  28. public class IndexController {  
  29.   
  30.     @Autowired  
  31.     private LoginTestInterfa loginTestInterfa;  
  32.     @RequestMapping("/login")  
  33.     public ModelAndView indexView(HttpServletRequest request) {  
  34.         String name = request.getParameter("name");  
  35.         String email = request.getParameter("email");  
  36.         String loginInfo = loginTestInterfa.qualifyInfo(name,email);  
  37.         System.out.println("loginInfo="+loginInfo);  
  38.         ModelAndView mv = new ModelAndView();  
  39.         mv.addObject("message", loginInfo);  
  40.         return mv;  
  41.     }  
  42. }  

2.8.login.jsp显示调用接口之后在页面上展示message数据:

[java] view plain copy
  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
  2. <%  
  3. String path = request.getContextPath();  
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  5. %>  
  6.   
  7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  8. <html>  
  9.   <head>  
  10.     <base href="<%=basePath%>">  
  11.       
  12.     <title>显示内容</title>  
  13.   </head>  
  14.     
  15.   <body>  
  16.    ${message };  
  17.   </body>  
  18. </html>  


2.9.将HessianSer导出的jar包导出到本地,然后通过myeclipse导入到maven库里面。在HessianCli的pom.xml配置jar包即可。这样子方便以后HessianSer的接口增多时,只需要将接口导出,然后替换maven库中的jar包就能完成项目更新而不需要在修改client端的配置。

此时HessianCli就配置完成了。

三、测试

    访问http://127.0.0.1:8080/HessianCli/,得到如下界面:

点击登录,返回到login页面,

此时,测试已完成。

原创粉丝点击