Canigó - Servei de HTTP 2.3.x
SERVEI DE HTTP
IntroduccióPropòsitAquest servei permet un accés remot mitjançant HTTP als serveis o classes que es trobin instal.lades al servidor. Generalment, aquest accés remot es realitzarà des d'Applets Java, però es pot realitzar també des d'altres tipus de clients que vulguin fer ús del protocol HTTP sense fer ús de WebServices. Els Serveis podran ser publicats per HTTP per tal que els clients puguin accedir de forma senzilla. Context i Escenaris d'ÚsEl Servei d'Accés HTTP es troba ubicat dins els serveis proporcionats a la Capa de Presentació. Versions i DependènciesLes dependències descrites a la següent url són requerides per tal de compilar i fer funcionar el projecte: A qui va dirigitAquest document va dirigit als següents perfils:
Documents i Fonts de Referència
Descripció DetalladaArquitectura i ComponentsActualment, el Servei HTTP es basa en Hessian, un protocol open-source binari sobre HTTP. Per a més informació sobre Hessian, veure la plana http://www.caucho.com/hessian/ Procés de Comunicació amb el ServidorEn el següent gràfic es mostra quin és el flux d'una petició des d'un Applet fins un servei funcional (anomenat 'Business Service') que s'hagi publicat.
Canigó proporciona una classe abstracta per desenvolupar Applets basats en aquest protocol. Es pot trobar tota la documentació JavaDoc i el codi font referent aquests components a les següents urls: Instal.lació i ConfiguracióInstal.lacióLa instal.lació del servei requereix de la utilització de la llibreria 'canigo-services-http' i les dependències indicades a l'apartat 'Introducció - Versions i Dependències'. ConfiguracióLa configuració del Servei d'Accés HTTP implica 2 pasos:
Definició del Servlet Remot Fitxer de configuració: web.xml Ubicació: <PROJECT_ROOT>/src/main/webapp/WEB-INF Definir el següent codi:
<servlet> <servlet-name>remoting</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>remoting</servlet-name> <url-pattern>/remoting/*</url-pattern> </servlet-mapping> Definició dels Serveis a Exportar ![]() Fitxer de configuració: remoting-servlet.xml Ubicació: <PROJECT_ROOT>/src/main/webapp/WEB-INF En el fitxer "remoting-servlet.xml", definirem tots els serveis funcionals que volem exportar. Per a cada servei, definirem dos beans, un bean que implementa la interfície del servei i un altre bean per a exportar el servei amb la classe HessianServiceExporter. Per cadascun dels serveis que volguem publicar definirem un bean amb la següent informació:
Per aquesta classe configurarem les següents propietats:
Exemple:
<bean id="serverHelloWorldService" class="net.gencat.ctti.samples.http.business.impl. HelloWorldServiceServerImpl"/> <bean name="/HelloWorldService" class="org.springframework.remoting.caucho.HessianServiceExporter"> <property name="service" ref="remoteHelloWorldService" /> <property name="serviceInterface" value="net.gencat.ctti.samples.http.business.HelloWorldService" /> </bean> Aquest servei serà exportat per Spring amb la url següent: http://servidor:8080/remoting/HelloWorldService Utilització del ServeiLa Utilització del Servei, una vegada realitzada la configuració, implica els següents pasos:
Creació del AppletPer a usar el Servei realitzarem els següents pasos:
Exemple:
import net.gencat.ctti.samples.http.business.HelloWorldService; import net.gencat.ctti.canigo.services.http.HessianApplet; public class HelloWorldApplet extends HessianAppletp { private HelloWorldService service ; public HelloWorldApplet() { super(HelloWorldService.class) ; } public void init() { super.init(); this.service = (HelloWorldService)super.getService(HelloWorldService.class)W; } public String sayHello(String yourName){ return service.sayHello(yourName); } } Creació del Jar de l'AppletLa creació del jar de l'Applet és necessària per incloure les classes necessàries del Servei d'Accés HTTP. Cal incloure les llibreries següents:
On x.x.x correspon a la versió utilitzada (veure l'apartat 'Versions i Dependències'). Aquestes llibreries les ubicarem al directori 'lib' del projecte per tal de crear el jar. A continuació s'ofereix un exemple de fitxer de Ant per a crear aquest jar:
<?xml version="1.0"?> <project name="Hessian" default="deploy" basedir="."> <property name="src.dir" value="src/main/java" /> <property name="lib.dir" value="lib" /> <property name="target.dir" value="target/applet" /> <property name="jar.file" value="services-client-applet.jar" /> <path id="classpath"> <pathelement location="$\{lib.dir\}/hessian-3.0.1.jar" /> <pathelement location="$\{lib.dir\}/canigo-services-http-1.0.jar" /> </path> <target name="compile"> <delete dir="$\{target\}/classes"/> <mkdir dir="$\{target.dir\}/classes"/> <javac srcdir="$\{src.dir\}" destdir="$\{target.dir\}/classes"> <classpath refid="classpath" /> <exclude name="**/*Impl.java" /> </javac> </target> <target name="jar" depends="compile"> <jar jarfile="$\{target.dir\}/$\{jar.file\}" basedir="$\{target.dir\}/classes" /> </target> <target name="deploy" depends="jar"> <copy file="$\{target.dir\}/$\{jar.file\}" todir="src/main/webapp" /> <copy todir="src/main/webapp" overwrite="yes"> <fileset dir="$\{lib.dir\}"> <include name="*.jar" /> </fileset> </copy> </target> </project> Creació de la Plana JSP/HTML Contenidora de l'AppletUsar el tag <applet> indicant les següents propietats:
A l'applet cal especificar com a mínim el paràmetre 'hostUrl', on s'especificarà el host en el qual es troba la implementació del servei. Per defecte usar el següent codi:
<param name="hostUrl" value="<% out.print(request.getRequestURL().toString()); %>" /> Mitjançant aquest codi es generarà com a url la del host des del qual s'ha descarregat la pàgina. Exemple: <applet id="service" code="net.gencat.ctti.samples.http.client.HelloWorldApplet.class" width="0" height="0" mayscript="true" archive="services-client-applet.jar,hessian-3.0.1.jar,canigo-services-http-1.0.jar"> <param name="hostUrl" value="<% out.print(request.getRequestURL().toString()); %>" /> </applet> Comunicació Javascript amb el AppletMitjançant la funció document.getElementById() podem accedir a l'Applet java. Com a paràmetre de 'getElementById' usarem el identificador definit a la propietat 'name' del tag <applet>. Després, tots els mètodes públics de l'Applet Java són accessibles com si l'objecte Javascript fos un objecte java normal. Exemple:
<script language="JavaScript"> function helloWorld() { var appletService=document.getElementById("appletService"); alert(appletService.sayHello("World")); } </script> <center><a href="javascript:helloWorld()" > Click me to call a service through javascript and an applet</a></center> ![]() |