کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

آموزش کار از راه دور با http در Java Spring

فراخوان(Invoker) HTTP

مثال Spring از راه دور با فراخوان HTTP

Spring پیاده سازی خود از خدمات از راه دور را با عنوان HttpInvoker ارائه می دهد. از آن می توان برای درخواست HTTP نسبت به RmI استفاده کرد. همچنین به خوبی در firewall کار می کنند. با کمک کلاس های HttpInvokerServiceExporter و HttpInvokerProxyFactoryBean ، می توان خدمات از راه دور ارائه شده توسط فراخوان های HTTP در Spring را پیاده سازی کرد.


فراخوان HTTP و سایر تکنیک های از راه دور

تکنیک های از راه دور زیادی را می توانید استفاده کنید. در اینجا بهترین آنها را با هم بررسی می کنیم.

فراخوان HTTP در مقابل RMI (فراخوانی متد از راه دور) : RMI (فراخوانی متد از راه دور) از پروتکل JRMP استفاده می کند، درحالی که فراخوان HTTP از پروتکل HTTP استفاده می کند. از آنجایی که برنامه های کاربردی سازمانی اغلب از پروتکل http استفاده می کنند، بهتر است از فراخوان HTTP استفاده کنیم. همچنین RMI (فراخوانی متد از راه دور) نسبت به فراخوان http دارای مشکلات امنیتی است. فراخوان http در دیوار آتش به خوبی کار می کند.

فراخوان HTTP در مقابل Hessian و Burlap : فراخوان http بخشی از فریمورک اسپرینگ است اما hessian و burlap خصیصه وابسته هستند. همه در دیوار آتش به خوبی عمل می کنند. Hessian و burlap برای ادغام با سایر زبان ها از جمله .Net و PHP قابل انتقال هستند اما فراخوان http قابل انتقال نیست.


مثال فراخوان http در Spring

برای ساخت یک برنامه کاربردی ساده فراخوان http در Spring، فایل های زیر را باید ایجاد کنید:

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

1- Calculation.java

این یک واسط ساده دربردارنده متد cube است.

package com.javatpoint;  
public interface Calculation {  
int cube(int number);  
}  

2- CalculationImpl.java

این کلاس پیاده سازی واسط محاسبات(Calculation) را ارائه می دهد.

package com.javatpoint;  
public class CalculationImpl implements Calculation{  
    public int cube(int number) {  
        return number*number*number;  
    }  
}  

3- web.xml

در این فایل xml، DispatcherServlet را به عنوان کنترلر جلو تعریف می کنیم. اگر هر درخواستی پسوند .http داشته باشد، بهDispatcherServlet فرستاده می شود.

< ?xml version="1.0" encoding="UTF-8" ?>
  
< web-app version="2.5"
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">  
     
     < servlet>  
     < servlet-name>httpInvoker< /servlet-name>  
     < servlet-class>org.springframework.web.servlet.DispatcherServlet< /servlet-class>  
     < load-on-startup>1< /load-on-startup>  
< /servlet>  
   
< servlet-mapping>  
     < servlet-name>httpInvoker< /servlet-name>  
     < url-pattern>*.http< /url-pattern>  
< /servlet-mapping>  
   
< /web-app>  

4- httpInvoker-servlet.xml

این فایل باید درون پوشهWEB-INF ایجاد شود و نام آن باید servletname-servlet.xml باشد. این فایل bean را برای CalculationImpl و HttpInvokerServiceExporter تعریف می کند.

< ?xml version="1.0" encoding="UTF-8" ?>
  
< beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans.xsd">  
       
< bean id="calculationBean" class="com.javatpoint.CalculationImpl">< /bean>  
< bean name="/Calculation.http"
         9. class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">  
     < property name="service" ref="calculationBean">< /property>  
     < property name="serviceInterface" value="com.javatpoint.Calculation">< /property>  
< /bean>  
   
< /beans>   

5- client-beans.xml

در این فایل xml، bean را برای HttpInvokerProxyFactoryBean تعریف می کنیم. دو خصیصه serviceUrl و serviceInterface از این کلاس را نیز باید تعریف کنید.

< ?xml version="1.0" encoding="UTF-8" ?>
  
< beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">  
      
< bean id="calculationBean"
 class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">  
     < property name="serviceUrl"
 value="http://localhost:8888/httpinvoker/Calculation.http">< /property>  
     < property name="serviceInterface" value="com.javatpoint.Calculation">< /property>  
< /bean>  
< /beans>  

6- Client.java

این کلاس یک نمونه از Calculation می گیرد و متد را فراخوانی میکند.

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

خروجی : 125



نحوه اجرای این مثال

روژه را شروع و مستقر کنید، در اینجا فرض می کنیم سرور روی پورت شماره 8888 در حال اجرا است. اگر شماره پورت متفاوت است، serviceURL را در فایل client-beans.xml تغییر دهید. سپس فایل Client.java را کامپایل و اجرا کنید.


کاربر مبتنی بر وب

در مثال بالا، از کاربر مبتنی بر کنسول (console based client) استفاده شد. علاوه بر آن میتوان از کاربر مبتنی بر وب (web based client) نیز استفاده کرد. 3 فایل زیر را باید ایجاد کنید:


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

ClientInvoker.java :

متد getCube() را تعریف می کند که مکعب عدد داده شده را باز می گرداند.

package com.javatpoint;  
import org.springframework.context.ApplicationContext;  
import org.springframework.context.support.ClassPathXmlApplicationContext;  
  
public class ClientInvoker {  
    public static int getCube(int number){  
        ApplicationContext context = new ClassPathXmlApplicationContext("client-beans.xml");  
        Calculation calculation = (Calculation)context.getBean("calculationBean");  
        return calculation.cube(number);  
    }  
}  

index.jsp :

یک فرم برای دریافت عدد ایجاد می کند.

< form action="process.jsp">  
Enter Number:< input type="text" name="number" />

< input type="submit" value="cube" />

< /form>  

process.jsp :

یک فرم برای دریافت عدد ایجاد می کند.

< jsp:include page="index.jsp">< /jsp:include>  
< hr />

<%@page import="com.javatpoint.ClientInvoker"%>  
  
<%  
int number=Integer.parseInt(request.getParameter("number"));  
out.print("cube of "+number+" is: "+ClientInvoker.getCube(number));  
%>

خروجی :

spring httpinvoker example output 1
spring httpinvoker example output 2
1399/01/24 1655 421
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...