zoukankan      html  css  js  c++  java
  • Spring Remoting by HTTP Invoker Example--reference

    Spring provides its own implementation of remoting service known as HttpInvoker. It can be used for http request than RMI and works well across the firewall.

    By the help of HttpInvokerServiceExporter and HttpInvokerProxyFactoryBean classes, we can implement the remoting service provided by Spring's Http Invokers.


    Http Invoker and Other Remoting techniques

    You can use many Remoting techniques, let's see which one can be best for you.

    Http Invoker Vs RMI

    RMI uses JRMP protocol whereas Http Invokes uses HTTP protocol. Since enterprise applications mostly use http protocol, it is the better to use HTTP Invoker. RMI also has some security issues than HTTP Invoker. HTTP Invoker works well across firewalls.

    Http Invoker Vs Hessian and Burlap

    HTTP Invoker is the part of Spring framework but Hessian and burlap are proprietary. All works well across firewall. Hessian and Burlap are portable to integrate with other languages such as .Net and PHP but HTTP Invoker cannot be.


    Example of Spring HTTP Invoker

    To create a simple spring's HTTP invoker application, you need to create following files.

    1. Calculation.java
    2. CalculationImpl.java
    3. web.xml
    4. httpInvoker-servlet.xml
    5. client-beans.xml
    6. Client.java

    1) Calculation.java

    It is the simple interface containing one method cube.

     
    1. package com.javatpoint;  
    2. public interface Calculation {  
    3. int cube(int number);  
    4. }  

    2) CalculationImpl.java

    This class provides the implementation of Calculation interface.

     
    1. package com.javatpoint;  
    2. public class CalculationImpl implements Calculation{  
    3.     public int cube(int number) {  
    4.         return number*number*number;  
    5.     }  
    6. }  

    3) web.xml

    In this xml file, we are defining DispatcherServlet as the front controller. If any request is followed by .http extension, it will be forwarded to DispatcherServlet.

     
    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <web-app version="2.5"   
    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_2_5.xsd">  
    7.     
    8.     <servlet>  
    9.     <servlet-name>httpInvoker</servlet-name>  
    10.     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
    11.     <load-on-startup>1</load-on-startup>  
    12. </servlet>  
    13.   
    14. <servlet-mapping>  
    15.     <servlet-name>httpInvoker</servlet-name>  
    16.     <url-pattern>*.http</url-pattern>  
    17. </servlet-mapping>  
    18.   
    19. </web-app>  

    4) httpInvoker-servlet.xml

    It must be created inside the WEB-INF folder. Its name must be servletname-servlet.xml. It defines bean forCalculationImpl and HttpInvokerServiceExporter.

     
    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   
    5.     http://www.springframework.org/schema/beans/spring-beans.xsd">  
    6.       
    7. <bean id="calculationBean" class="com.javatpoint.CalculationImpl"></bean>  
    8. <bean name="/Calculation.http"   
    9. class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">  
    10.     <property name="service" ref="calculationBean"></property>  
    11.     <property name="serviceInterface" value="com.javatpoint.Calculation"></property>  
    12. </bean>  
    13.   
    14. </beans>  

    5) client-beans.xml

    In this xml file, we are defining bean for HttpInvokerProxyFactoryBean. You need to define two properties of this class.

    1. serviceUrl
    2. serviceInterface
     
    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   
    5. http://www.springframework.org/schema/beans/spring-beans.xsd">  
    6.       
    7. <bean id="calculationBean"   
    8. class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">  
    9.     <property name="serviceUrl"   
    10.          value="http://localhost:8888/httpinvoker/Calculation.http"></property>  
    11.     <property name="serviceInterface" value="com.javatpoint.Calculation"></property>  
    12. </bean>  
    13. </beans>  

    6) Client.java

    This class gets the instance of Calculation and calls the method.

     
    1. package com.javatpoint;  
    2. import org.springframework.context.ApplicationContext;  
    3. import org.springframework.context.support.ClassPathXmlApplicationContext;  
    4.   
    5. public class Client {  
    6.  public static void main(String[] args){  
    7.   ApplicationContext context = new ClassPathXmlApplicationContext("client-beans.xml");  
    8.   Calculation calculation = (Calculation)context.getBean("calculationBean");  
    9.   System.out.println(calculation.cube(5));  
    10.  }  
    11. }  

    Output

     
    1. Output: 125  

    How to run this example

    Start and deploy the project, here we are assuming that server is running on 8888 port number. If the port number is different, change the serviceURL in client-beans.xml.

    Then, Compile and Run the Client.java file.


    Web-based Client

    In the example given above, we used console based client. We can also use web based client. You need to create 3 additional files. Here, we are using following files:

    1. ClientInvoker.java
    2. index.jsp
    3. process.jsp

    ClientInvoker.java

    It defines only one method getCube() that returns cube of the given number

     
    1. package com.javatpoint;  
    2. import org.springframework.context.ApplicationContext;  
    3. import org.springframework.context.support.ClassPathXmlApplicationContext;  
    4.   
    5. public class ClientInvoker {  
    6.     public static int getCube(int number){  
    7.         ApplicationContext context = new ClassPathXmlApplicationContext("client-beans.xml");  
    8.         Calculation calculation = (Calculation)context.getBean("calculationBean");  
    9.         return calculation.cube(number);  
    10.     }  
    11. }  

    index.jsp

    It creates a form to get number.

     
    1. <form action="process.jsp">  
    2. Enter Number:<input type="text" name="number"/>  
    3. <input type="submit" value="cube" />  
    4. </form>  

    process.jsp

    It creates a form to get number.

     
    1. <jsp:include page="index.jsp"></jsp:include>  
    2. <hr/>  
    3. <%@page import="com.javatpoint.ClientInvoker"%>  
    4.   
    5. <%  
    6. int number=Integer.parseInt(request.getParameter("number"));  
    7. out.print("cube of "+number+" is: "+ClientInvoker.getCube(number));  
    8. %>  

    Output

    spring httpinvoker example output 1

    spring httpinvoker example output 2

    reference from:http://www.javatpoint.com/spring-remoting-by-http-invoker-example

  • 相关阅读:
    T4文本模板转换过程
    ARKit从入门到精通(6)-ARSession介绍
    ARKit从入门到精通(5)-ARScnView介绍
    ARKit从入门到精通(4)-ARKit全框架API大全
    ARKit从入门到精通(3)-ARKit自定义实现
    ARKit从入门到精通(2)-ARKit工作原理及流程介绍
    ARKit从入门到精通(1)-ARKit初体验
    ios系统中各种设置项的url链接
    iOS 检测网络状态 自动判断 认为提示网络改变
    ios 根据scrollview滑动的偏移计算滑动到第几页算法(不同需求不同计算)
  • 原文地址:https://www.cnblogs.com/davidwang456/p/3966925.html
Copyright © 2011-2022 走看看