<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-281020151219122185</id><updated>2011-07-07T20:52:13.367-07:00</updated><category term='WebServices'/><category term='Servlets'/><category term='interfete evoluate'/><category term='prelucrare XML'/><category term='javascript'/><category term='XMLRPC'/><category term='literatura'/><category term='general'/><category term='RMI'/><category term='Google'/><category term='html'/><title type='text'>Interfete Evoluate</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://a-interfete-evoluate.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/281020151219122185/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://a-interfete-evoluate.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Bogdan</name><uri>http://www.blogger.com/profile/06493574756295934086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>12</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-281020151219122185.post-3859980739116391307</id><published>2008-07-24T12:01:00.000-07:00</published><updated>2008-07-24T12:03:44.750-07:00</updated><title type='text'>MyEtymology</title><content type='html'>Striving to be a universal &lt;a href="http://www.myetymology.com"&gt;etymological dictionary&lt;/a&gt;, myetymology.com provides an etymology for hundreds of thousands of words in dozens of languages, tracing their etymology to Latin, Greek or reconstructed Proto-Germanic and Indo-European roots.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/281020151219122185-3859980739116391307?l=a-interfete-evoluate.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-interfete-evoluate.blogspot.com/feeds/3859980739116391307/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=281020151219122185&amp;postID=3859980739116391307' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/281020151219122185/posts/default/3859980739116391307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/281020151219122185/posts/default/3859980739116391307'/><link rel='alternate' type='text/html' href='http://a-interfete-evoluate.blogspot.com/2008/07/myetymology.html' title='MyEtymology'/><author><name>Bogdan</name><uri>http://www.blogger.com/profile/06493574756295934086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-281020151219122185.post-9217392331947339701</id><published>2008-01-16T01:03:00.000-08:00</published><updated>2008-01-16T01:24:25.331-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>PageRank</title><content type='html'>Page rank-ul este o valoare numerica ce reprezinta importanta unei pagini pe web. Faptul ca o pagina contine un link catre alta pagina, acest lucru e ca un vot acordat&lt;br /&gt;paginii referite prin link de catre pagina ce contine linkul. Cu cat o pagina strange mai multe voturi/e referita de mai multe ori, cu atat mai importanta devine pagina. Concomitent, daca o pagina are un pange rank mare/este importanta, atunci creste si importanta voturilor pe care ea le acorda.&lt;br /&gt;PangeRanku-ul este o notiune semnificativa pentru Google, pentru ca prin intermediul ei, si nu numai, Google decide importanta paginilor.&lt;br /&gt;NU toate linkurile sunt luate in considerare de google, in special cele de pe link farms-urile stiute de Google, iar faptul ca un link al unui site se afla pe una din aceste siteuri tip link farm, poate duce la penalizarea siteului de catre Google.&lt;br /&gt;&lt;br /&gt;Cum se calculeaza PageRank-ul?&lt;br /&gt;Pentru calcularea PR-ului unui site, se iau in considerare toate linkurile care fac referire la situl in cauza.&lt;br /&gt;&lt;br /&gt;Ecuatia care calculeaza PR-ul este:&lt;br /&gt;PR(A) = (1-d) + d(PR(t1)/C(t1) + ... + PR(tn)/C(tn)),&lt;br /&gt;in care t1 ... tn sunt paginile care au link catre pagina A, C este numarul de linkuri pe care pagina le are in continutul ei, iar d este o constanta -damping factor- de obicei cu valoarea 0.85 .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/281020151219122185-9217392331947339701?l=a-interfete-evoluate.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-interfete-evoluate.blogspot.com/feeds/9217392331947339701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=281020151219122185&amp;postID=9217392331947339701' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/281020151219122185/posts/default/9217392331947339701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/281020151219122185/posts/default/9217392331947339701'/><link rel='alternate' type='text/html' href='http://a-interfete-evoluate.blogspot.com/2008/01/pagerank.html' title='PageRank'/><author><name>Alexandru</name><uri>http://www.blogger.com/profile/06798693004871330597</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-281020151219122185.post-6000853246134815699</id><published>2008-01-15T12:18:00.000-08:00</published><updated>2008-01-15T12:31:07.059-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>Un program Google in Java</title><content type='html'>Exista un API pentru programarea cu Google in java, care se numeste googleapi.jar si care permite trimiterea de query-uri catre google si primirea/interpretare rezultatelor. Pentru toata aceasta operatiune este nevoie doar de downloadarea jar-ului&lt;br /&gt;si de obtinerea unui google API developer key, ce trebuie inclus/folosit in aplicatie.&lt;br /&gt;Aceasta cheie se obtine de la &lt;a href="http://code.google.com/apis/base/signup.html"&gt;&lt;/a&gt; selectand tipul "installed applications" si este nevoie doar de un cont pe Google pentru toata aceasta operatiune.&lt;br /&gt;In continuare dau un exemplu de folosire a acestui API, reprezentat printr-o clasa&lt;br /&gt;ce trimite un query primit din linia de comanda catre google si afiseaza apoi rezultatele primite:&lt;br /&gt;&lt;br /&gt;import com.google.soap.search.GoogleSearch;&lt;br /&gt;import com.google.soap.search.GoogleSearchFault;&lt;br /&gt;import com.google.soap.search.GoogleSearchResult;&lt;br /&gt;import com.google.soap.search.GoogleSearchResultElement;&lt;br /&gt;&lt;br /&gt;public class GoogleQueryExample {&lt;br /&gt;&lt;br /&gt; // google api developer key&lt;br /&gt; private static String googleKey = &lt;br /&gt;  "ABQIAAAAS...................................................................................";&lt;br /&gt;    &lt;br /&gt;&lt;br /&gt; public static void main(String[] args) {&lt;br /&gt;  // e necesat un query de cautat dat in linia de comanda&lt;br /&gt;  if (args.length != 1) {&lt;br /&gt;   System.err.println("query");&lt;br /&gt;   System.exit(1);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  // obiect GoogleSearch&lt;br /&gt;  GoogleSearch s = new GoogleSearch();&lt;br /&gt;  try {&lt;br /&gt;   s.setKey(googleKey);&lt;br /&gt;   s.setQueryString(args[0]); /* Google query din linia de comanda */&lt;br /&gt;   s.setMaxResults(10);&lt;br /&gt;&lt;br /&gt;   // query la google&lt;br /&gt;   GoogleSearchResult r = s.doSearch();&lt;br /&gt;&lt;br /&gt;   // preia rezultatele&lt;br /&gt;   GoogleSearchResultElement[] re = r.getResultElements();&lt;br /&gt;&lt;br /&gt;   // afisare rezultate&lt;br /&gt;   for (int i = 0; i &lt; re.length; i++) {&lt;br /&gt;    &lt;br /&gt;    String title = re[i].getTitle();&lt;br /&gt;    String URL = re[i].getURL();&lt;br /&gt;    String snippet = re[i].getSnippet();&lt;br /&gt;&lt;br /&gt;    // inlatura tagurile html&lt;br /&gt;    title = title.replaceAll("&lt;[^&gt;]+&gt;", "");&lt;br /&gt;    snippet = snippet.replaceAll("&lt;[^&gt;]+&gt;", "");&lt;br /&gt;&lt;br /&gt;    // afisare propriuziza&lt;br /&gt;    System.out.println(title);&lt;br /&gt;    System.out.println(URL);&lt;br /&gt;    System.out.println(snippet + "\\n");&lt;br /&gt;   }&lt;br /&gt;  } catch (GoogleSearchFault f) {&lt;br /&gt;   System.out.println("Exceptie GoogleSearchFault: " + f.toString());&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/281020151219122185-6000853246134815699?l=a-interfete-evoluate.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-interfete-evoluate.blogspot.com/feeds/6000853246134815699/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=281020151219122185&amp;postID=6000853246134815699' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/281020151219122185/posts/default/6000853246134815699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/281020151219122185/posts/default/6000853246134815699'/><link rel='alternate' type='text/html' href='http://a-interfete-evoluate.blogspot.com/2008/01/un-program-google-in-java.html' title='Un program Google in Java'/><author><name>Alexandru</name><uri>http://www.blogger.com/profile/06798693004871330597</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-281020151219122185.post-8692331440403056800</id><published>2007-12-05T01:10:00.000-08:00</published><updated>2007-12-05T01:25:49.504-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XMLRPC'/><title type='text'>XML-RPC</title><content type='html'>XML-RPC&lt;br /&gt;Prin XML-RPC  java capata niste functionalitati pe care nu le are prin RMI. XML-RPC e mult mai light decat RMI-ul din java, pasandu-se mai degraba parametri decat obiecte spre server.&lt;br /&gt;Daca RMI necesita compilarea interfetelor pentru a se cunoaste metodele premise spre apelare, XML-RPC permite clientului sa specifice ce metode vrea sa foloseasca si se cauta handleri pentru aceste metode. Referinta la obiectele de pe server se fac prin nume si nu exista stub ca la RMI.&lt;br /&gt;&lt;br /&gt;Exemplu de client-server care foloseste jarurile xmlrpc 3.1 de la &lt;br /&gt;&lt;a href="http://mirror.nyi.net/apache/ws/xmlrpc/binaries/"&gt;http://mirror.nyi.net/apache/ws/xmlrpc/binaries/&lt;/a&gt; (Apache)&lt;br /&gt;&lt;br /&gt;Clientul:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;import java.net.URL;&lt;br /&gt;import java.util.*;&lt;br /&gt;import org.apache.xmlrpc.client.XmlRpcClient;&lt;br /&gt;import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;&lt;br /&gt;&lt;br /&gt;public class Client {&lt;br /&gt;public static void main (String [] args) {&lt;br /&gt; try {&lt;br /&gt;  XmlRpcClient server = new XmlRpcClient();&lt;br /&gt;  XmlRpcClientConfigImpl cnf = new XmlRpcClientConfigImpl();&lt;br /&gt;  cnf.setServerURL(new URL("http://localhost/RPC2"));&lt;br /&gt;  server.setConfig(cnf);&lt;br /&gt; &lt;br /&gt;  Vector params = new Vector();&lt;br /&gt;  params.addElement(new Integer(17));&lt;br /&gt;  params.addElement(new Integer(13));&lt;br /&gt;&lt;br /&gt;  Object result = server.execute("sample.sum", params);&lt;br /&gt;&lt;br /&gt;  int sum = ((Integer) result).intValue();&lt;br /&gt;  System.out.println("The sum is: "+ sum);&lt;br /&gt; } catch (Exception exception) {&lt;br /&gt;  System.err.println("JavaClient: " + exception);&lt;br /&gt; }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Serverul:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;import org.apache.xmlrpc.server.PropertyHandlerMapping;&lt;br /&gt;import org.apache.xmlrpc.server.XmlRpcServer;&lt;br /&gt;import org.apache.xmlrpc.server.XmlRpcServerConfigImpl;&lt;br /&gt;import org.apache.xmlrpc.webserver.WebServer;&lt;br /&gt;&lt;br /&gt;public class Server {&lt;br /&gt;&lt;br /&gt;public Integer sum(int x, int y) {&lt;br /&gt;   return new Integer(x+y);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public static void main (String [] args) { &lt;br /&gt; try {&lt;br /&gt;&lt;br /&gt;  System.out.println("starting XML-RPC Server...");&lt;br /&gt;  WebServer server = new WebServer(80);&lt;br /&gt;   &lt;br /&gt;  PropertyHandlerMapping map = new PropertyHandlerMapping();&lt;br /&gt;  map.addHandler("sample", Server.class);&lt;br /&gt;   &lt;br /&gt;   &lt;br /&gt;  XmlRpcServerConfigImpl cnf = new XmlRpcServerConfigImpl();&lt;br /&gt;  XmlRpcServer srv = server.getXmlRpcServer();&lt;br /&gt;  srv.setConfig(cnf);&lt;br /&gt;  srv.setHandlerMapping(map);&lt;br /&gt;   &lt;br /&gt;  server.start();&lt;br /&gt;   &lt;br /&gt;  System.out.println("Started successfully.");&lt;br /&gt;  } catch (Exception exception) {&lt;br /&gt;   System.err.println("JavaServer: " + exception);&lt;br /&gt;  }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/281020151219122185-8692331440403056800?l=a-interfete-evoluate.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-interfete-evoluate.blogspot.com/feeds/8692331440403056800/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=281020151219122185&amp;postID=8692331440403056800' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/281020151219122185/posts/default/8692331440403056800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/281020151219122185/posts/default/8692331440403056800'/><link rel='alternate' type='text/html' href='http://a-interfete-evoluate.blogspot.com/2007/12/xml-rpc.html' title='XML-RPC'/><author><name>Alexandru</name><uri>http://www.blogger.com/profile/06798693004871330597</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-281020151219122185.post-8189339773996728115</id><published>2007-12-04T16:55:00.000-08:00</published><updated>2007-12-04T17:11:04.836-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RMI'/><title type='text'>RMI – Remote Method Invocation</title><content type='html'>Prin RMI se poate apela cod de la distanta – metode ale obiectelor aflate pe un server pot fi apelate de clienti.&lt;br /&gt;&lt;br /&gt;Stubs si Skeletons&lt;br /&gt;Clientul cand doreste sa apeleze o metoda de la distanta, o apeleaza in mod oarecum transparent (apelul se face asupra unui obiect de tip stub). Stubul este un obiect ce se afla pe client. Rolul stubului este de a incapsula informatii ca parametrii metodei care se va apela pe server precum obiectul si metodele ce se vor apela. Pachetul trimis de client ajunge la server. Aici se afla un alt obiect, skeleton caruia ii revine rolul sa decodifice parametrii, sa apeleze metoda invocata de client, sa retina valoare returnata/sau exceptia si sa trimita inapoi un pachet cu rezultatul.&lt;br /&gt;&lt;br /&gt;Exemplu de aplicatie care foloseste RMI&lt;br /&gt;Serverul va creea un obiect Hello si clientul apeleaza o metoda a obiectului creeat pe server. Pentru a sti ce metoda a obiectului sa poate apela, clientul trebuie sa aiba la dispozitie o interfata cu aceste metode, interfata ce este implementata de obiectul de pe server. Aceasta interfata se afla atat pe server cat si pe client. Aceasta este :&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;import java.rmi.Remote;&lt;br /&gt;import java.rmi.RemoteException;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public interface HelloInterface extends Remote {&lt;br /&gt; public String say() throws RemoteException;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Dupa cum se vede , aceasta interfata extinde interfata Remote – ca de altfel toate interfetele care sunt implementate de obiecte aflate la distanta, iar metodele interfetelor pot arunca RemoteException.&lt;br /&gt;&lt;br /&gt;Clasa Hello implementeaza interfata HelloInterface:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;import java.rmi.RemoteException;&lt;br /&gt;import java.rmi.server.UnicastRemoteObject;&lt;br /&gt;&lt;br /&gt;public class Hello extends UnicastRemoteObject implements HelloInterface {&lt;br /&gt; &lt;br /&gt; private static final long serialVersionUID = 7896795898928782846L;&lt;br /&gt; private String message;&lt;br /&gt; &lt;br /&gt;   public Hello (String msg) throws RemoteException {&lt;br /&gt;     message = msg;&lt;br /&gt;   }&lt;br /&gt;   &lt;br /&gt;   public String say() throws RemoteException {&lt;br /&gt;     return message;&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Singura metoda disponibila apelabila de catre client este say(); Hello extinde clasa UnicastRemotObject, care extinde la randul ei RemoteObject, astfel ca Hello e o clasa accesibila de la distanta.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_D_4wj09qdJ8/R1X46kd0CyI/AAAAAAAAAAU/tZvN4t8oD3Y/s1600-h/ierarhie.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_D_4wj09qdJ8/R1X46kd0CyI/AAAAAAAAAAU/tZvN4t8oD3Y/s320/ierarhie.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5140288234818112290" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Clasele care vor fi instantiate pe parte de server extinzand UnicastRemoteObject, extind implicit RemoteServer. RMI returneaza clientului o referinta la obiectul de pe server si nu obiectul propriuzis -&gt; e necesar un mecanism de localizare/inregistrare a unui obiect existent pe server. Pe server inregistrarea obiectului se face cu bind(), iar clientul obtine o referinta a obiectului de pe server cu metoda lookup().&lt;br /&gt;&lt;br /&gt;Pornire serviciului de inregistrare se face executand start rmregistry (rmiregistry &amp;  pe linux), cu portul implicit 1099.&lt;br /&gt;rmic ne ajuta la generarea claselor skeleton si stub (Hello_Skel.class, Hello_Stub.class) .&lt;br /&gt;&lt;br /&gt;Clientul:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;import java.rmi.Naming;&lt;br /&gt;&lt;br /&gt;public class Client {&lt;br /&gt; public static void main (String[] argv) {&lt;br /&gt;     try {&lt;br /&gt;      HelloInterface hello = (HelloInterface) Naming.lookup ("//localhost/Hello");&lt;br /&gt;      System.out.println (hello.say());&lt;br /&gt;     } catch (Exception e) {&lt;br /&gt;      e.printStackTrace();&lt;br /&gt;       System.out.println ("HelloClient exception: " + e);&lt;br /&gt;     }&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Serverul:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;import java.rmi.Naming;&lt;br /&gt;&lt;br /&gt;public class Server {&lt;br /&gt; public static void main (String[] argv) {&lt;br /&gt;     try {&lt;br /&gt;       Naming.rebind ("Hello", new Hello ("Hello, world!"));&lt;br /&gt;       System.out.println ("Hello Server is ready.");&lt;br /&gt;     } catch (Exception e) {&lt;br /&gt;      e.printStackTrace();&lt;br /&gt;       System.out.println ("Hello Server failed: " + e);&lt;br /&gt;     }&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/281020151219122185-8189339773996728115?l=a-interfete-evoluate.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-interfete-evoluate.blogspot.com/feeds/8189339773996728115/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=281020151219122185&amp;postID=8189339773996728115' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/281020151219122185/posts/default/8189339773996728115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/281020151219122185/posts/default/8189339773996728115'/><link rel='alternate' type='text/html' href='http://a-interfete-evoluate.blogspot.com/2007/12/rmi-remote-method-invocation.html' title='RMI – Remote Method Invocation'/><author><name>Alexandru</name><uri>http://www.blogger.com/profile/06798693004871330597</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_D_4wj09qdJ8/R1X46kd0CyI/AAAAAAAAAAU/tZvN4t8oD3Y/s72-c/ierarhie.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-281020151219122185.post-5045502677754567918</id><published>2007-12-04T14:12:00.000-08:00</published><updated>2007-12-05T09:57:01.215-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='interfete evoluate'/><category scheme='http://www.blogger.com/atom/ns#' term='general'/><title type='text'>XHTML</title><content type='html'>&lt;span style="color:#3366ff;"&gt;&lt;span style="color:#000099;"&gt;XHTML&lt;/span&gt; &lt;/span&gt;- &lt;span style="color:#009900;"&gt;E&lt;span style="color:#000099;"&gt;X&lt;/span&gt;tensible &lt;span style="color:#000099;"&gt;H&lt;/span&gt;yper&lt;span style="color:#000099;"&gt;T&lt;/span&gt;ext &lt;span style="color:#000099;"&gt;M&lt;/span&gt;arkup &lt;span style="color:#3333ff;"&gt;L&lt;/span&gt;anguage&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000099;"&gt;XHTML&lt;/span&gt; este compatibil cu &lt;span style="color:#000099;"&gt;HTML&lt;/span&gt; 4.01.&lt;br /&gt;Toate browserele noi au support pentru &lt;span style="color:#3333ff;"&gt;XHTML&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#000099;"&gt;XHTML&lt;/span&gt; este un limbaj care foloseste markere si are aceeasi putere de expresie ca si &lt;span style="color:#3366ff;"&gt;HTML&lt;/span&gt; dar mai are in plus un avantaj, acela de a respecta sintaxa &lt;span style="color:#000099;"&gt;XML&lt;/span&gt;.&lt;br /&gt;Pe cand &lt;span style="color:#3333ff;"&gt;HTML&lt;/span&gt; este o aplicatie de tip SGML (Standard Generalized Markup Language), care este un limbaj foarte flexibil, &lt;span style="color:#000099;"&gt;XHTML &lt;/span&gt;este o aplicatie a &lt;span style="color:#000099;"&gt;XML&lt;/span&gt; care este un subset mult mai restrictiv al SGML.&lt;br /&gt;Documentele &lt;span style="color:#000099;"&gt;XHTML&lt;/span&gt; trebuie sa fie bine formate, de aceea ele permit ca procesarea automata sa fie facuta cu unelte standard &lt;span style="color:#000099;"&gt;XML&lt;/span&gt;, spre deosebire de &lt;span style="color:#3333ff;"&gt;HTML&lt;/span&gt; care necesita un parser destul de complex, tolerant si personalizat.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#000099;"&gt;XHTML&lt;/span&gt; poate fi gandit ca intersectia &lt;span style="color:#3333ff;"&gt;HTML&lt;/span&gt; cu &lt;span style="color:#000099;"&gt;XML&lt;/span&gt;, pentru ca chiar a fost gandit ca o reformulare a &lt;span style="color:#3333ff;"&gt;HTML&lt;/span&gt; in &lt;span style="color:#000099;"&gt;XML&lt;/span&gt;. &lt;span style="color:#000099;"&gt;XHTML&lt;/span&gt; a devenit o recomandare a &lt;span style="color:#009900;"&gt;W3C&lt;/span&gt; (&lt;span style="color:#006600;"&gt;World Wide Web Consortium&lt;/span&gt;) pe 26 ianuarie 2000. Versiunea &lt;span style="color:#000099;"&gt;XHTML&lt;/span&gt; 1.1 a devenit recomandare a &lt;span style="color:#009900;"&gt;W3C &lt;/span&gt;pe 31 mai 2001. &lt;span style="color:#000099;"&gt;XHTML&lt;/span&gt; poate fi considerat a fi succesorul &lt;span style="color:#3333ff;"&gt;HTML&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Nevoia de reformulare a versiunii &lt;span style="color:#3333ff;"&gt;HTML&lt;/span&gt; a fost simtita datorita faptului ca informatiile World Wide Web trebuiau furnizate mai multor tipuri de dispozitive mobile (telefoane mobile, PDA-uri etc) diferite de cele traditionale desktop, unde nu puteau fi dezvoltate resursele suplimentare de care &lt;span style="color:#3333ff;"&gt;HTML&lt;/span&gt; avea nevoie. In practica totusi browserele care suportau &lt;span style="color:#3333ff;"&gt;HTML&lt;/span&gt; pentru astfel de dipozitive s-au dezvoltat mai repede decat suportul de &lt;span style="color:#000099;"&gt;XHTML&lt;/span&gt; pentru browserele traditionale de desktop.&lt;br /&gt;&lt;br /&gt;Un alt motiv care facea atractiva noua tehnologie a &lt;span style="color:#000099;"&gt;XHTML&lt;/span&gt; era faptul ca se reducea cererea de parsere si agenti de utilizare. Cu &lt;span style="color:#3333ff;"&gt;HTML&lt;/span&gt;, agentii de utilizare (motoarele de cautare gen &lt;span style="color:#3333ff;"&gt;G&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;o&lt;/span&gt;&lt;span style="color:#ffcc33;"&gt;o&lt;/span&gt;&lt;span style="color:#3333ff;"&gt;g&lt;/span&gt;&lt;span style="color:#009900;"&gt;l&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;e&lt;/span&gt; :&lt;span style="color:#ff6600;"&gt;)&lt;/span&gt; si restul) aveau sarcina dificila de a corecta erorile documentelor publicate. Aici &lt;span style="color:#000099;"&gt;XML&lt;/span&gt; aducea un suflu nou pentru ca cerea agentilor de utilizare sa dea o eroare fatala la intalnirea unui document &lt;span style="color:#000099;"&gt;XML&lt;/span&gt; gresit formatat. Aceasta inseamna ca un browser &lt;span style="color:#000099;"&gt;XHTML&lt;/span&gt; poate teoretic sa omita codul de recuperare din eroare, chiar daca are nevoie de mai multe verificari de detectie a erorilor. Recomandarea ca browserele sa posteze o eroare mai degraba decat sa incerce sa repare un continut gresit formatat ar trebui sa ajute la eliminarea greselilor din aceste documente. Chiar si atunci cand autorii nu isi valideaza codul, la un simplu test intr-un browser &lt;span style="color:#000099;"&gt;XML&lt;/span&gt;, erorile critice ale documentului vor fi scoase la iveala si astfel vor fi mai usor de corectat.&lt;br /&gt;&lt;br /&gt;O caracteristica speciala a &lt;span style="color:#000099;"&gt;XHTML&lt;/span&gt; mostenita din &lt;span style="color:#000099;"&gt;XML&lt;/span&gt; sunt namespace-urile. Cu ajutorul acestor namespace-uri, autorii si comunitatile isi pot defini propriile elemente &lt;span style="color:#000099;"&gt;XML&lt;/span&gt;, atribute si modele de continut pe care le pot insera in documentele &lt;span style="color:#000099;"&gt;XHTML&lt;/span&gt;. Acest lucru este similar cu flexibilitatea semantica a atributului "class" intr-un element &lt;span style="color:#3333ff;"&gt;HTML&lt;/span&gt;, dar cu mai putine restrictii. Anumite namespace-uri/scheme &lt;span style="color:#009900;"&gt;W3C&lt;/span&gt; &lt;span style="color:#000099;"&gt;XML&lt;/span&gt; care pot fi incluse in &lt;span style="color:#000099;"&gt;XHTML,&lt;/span&gt; includ &lt;a title="MathML" href="http://en.wikipedia.org/wiki/MathML"&gt;MathML&lt;/a&gt; pentru marcarea semanticii matematice, &lt;a title="Scalable Vector Graphics" href="http://en.wikipedia.org/wiki/Scalable_Vector_Graphics"&gt;Scalable Vector Graphics&lt;/a&gt; pentru marcarea vectorilor grafici si &lt;a title="RDFa" href="http://en.wikipedia.org/wiki/RDFa"&gt;RDFa&lt;/a&gt; pentru includerea datelor &lt;a title="Resource Description Framework" href="http://en.wikipedia.org/wiki/Resource_Description_Framework"&gt;RDF&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Schimbarile de la &lt;span style="color:#3333ff;"&gt;HTML&lt;/span&gt; la &lt;span style="color:#000099;"&gt;XHTML&lt;/span&gt; versiunea 1.0 sunt foarte mici si sunt in principal facute pentru a asigura compatibilitatea cu &lt;span style="color:#000099;"&gt;XML&lt;/span&gt;. Cea mai importanta schimbare este aceea ca documentele sa fie bine formate si ca toate elementele sa fie inchise in mod explicit asa cum cere standardul &lt;span style="color:#336666;"&gt;XML&lt;/span&gt;. In &lt;span style="color:#000099;"&gt;XML&lt;/span&gt; toate numele de elemente si atribute sunt case-sensitive, astfle incat &lt;span style="color:#000099;"&gt;XHTML&lt;/span&gt; a abordat aceasta problema prin a defini toate numele tagurilor ca fiind lowercase.&lt;br /&gt;In &lt;span style="color:#000099;"&gt;XHTML&lt;/span&gt; toate valorile atributelor trebuie inchise intre apostrofuri sau ghilimele in contrast cu &lt;span style="color:#3333ff;"&gt;HTML&lt;/span&gt; unde numai valorile de tip string trebuiau inchise cu ghilimele, valorile numerice sau booleene erau scrise pur si simplu, fara ghilimele.&lt;br /&gt;In &lt;span style="color:#000099;"&gt;XHTML&lt;/span&gt; toate elementele trebuie sa fie inchise in mod explicit, inclusiv elementele goale cum ar fi img sau br: &amp;lt;img&amp;gt; si &amp;lt;br&amp;gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#000099;"&gt;XHTML&lt;/span&gt; 1.1 - este cea mai recenta recomandare &lt;span style="color:#009900;"&gt;W3C&lt;/span&gt;. Prezentarea este controlata numai de &lt;a title="Cascading Style Sheets" href="http://en.wikipedia.org/wiki/Cascading_Style_Sheets"&gt;Cascading Style Sheets&lt;/a&gt; (&lt;a title="Cascading Style Sheets" href="http://en.wikipedia.org/wiki/Cascading_Style_Sheets"&gt;&lt;span style="color:#ff6600;"&gt;CSS&lt;/span&gt;&lt;/a&gt;). Aceasta versiune a &lt;span style="color:#000099;"&gt;XHTML&lt;/span&gt; permite deasemenea folosirea de caractere de marcare ruby pentru limbile est-asiatice.&lt;br /&gt;Modularizarea &lt;span style="color:#000099;"&gt;XHTML&lt;/span&gt; permite refolosirea unor mici chunkuri de &lt;span style="color:#000099;"&gt;XHTML&lt;/span&gt; de catre alte aplicatii &lt;span style="color:#000099;"&gt;XML&lt;/span&gt; intr-o maniera bine definita si permite extinderea &lt;span style="color:#000099;"&gt;XHTML&lt;/span&gt; in scopuri specializate.&lt;br /&gt;&lt;span style="color:#000099;"&gt;XHTML&lt;/span&gt; 1.1 adauga conceptul de stricta conformitate a documentelor: astfel ca un document nu poate angaja anumite caracteristici, trebuie sa fie un document complet care contine numai elementele definite in modulele cerute de &lt;span style="color:#000099;"&gt;XHTML&lt;/span&gt; 1.1.&lt;br /&gt;&lt;span style="color:#000099;"&gt;XHTML&lt;/span&gt; 2.0 in 2007 este inca in lucru dar este deja controversat pentru ca se desprinde de compatibilitatea backward cu versiunile anterioare.&lt;br /&gt;&lt;span style="color:#000099;"&gt;XHTML&lt;/span&gt; 2.0 poate fi parsat in acelasi fel in care un agent utilizator ar parsa &lt;span style="color:#000099;"&gt;XHTML&lt;/span&gt; 1.1, folosind un parser &lt;span style="color:#000099;"&gt;XML&lt;/span&gt; si un document &lt;span style="color:#ff6600;"&gt;CSS&lt;/span&gt; conform cu specificatiile versiunii noi 2.0.&lt;br /&gt;&lt;br /&gt;Noile add-uri aduse de &lt;span style="color:#000099;"&gt;XHTML&lt;/span&gt; 2.0 sunt:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;formele &lt;span style="color:#3333ff;"&gt;HTML&lt;/span&gt; vor fi inlocuite cu &lt;span style="color:#ff6600;"&gt;XForms&lt;/span&gt;, o specificatie de informatie introdusa de utilizator de tip &lt;span style="color:#000099;"&gt;XML&lt;/span&gt; care permite afisarea corecta de diferite dispozitive de interpretarea a informatiei&lt;/li&gt;&lt;li&gt;&lt;span style="color:#3333ff;"&gt;HTML&lt;/span&gt; frames vor fi inlocuite cu &lt;span style="color:#ff6600;"&gt;XFrames&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a title="DOM Events" href="http://en.wikipedia.org/wiki/DOM_Events"&gt;DOM Events&lt;/a&gt; vor fi inlocuite de &lt;a title="XML Events" href="http://en.wikipedia.org/wiki/XML_Events"&gt;XML Events&lt;/a&gt; care foloseste &lt;a title="Document Object Model" href="http://en.wikipedia.org/wiki/Document_Object_Model"&gt;Document Object Model&lt;/a&gt;&lt;/li&gt;&lt;li&gt;un nou element de tip lista, tipul nl, va fi inclus pentru a proiecta o lista ca lista de navigatie, lucru care poate fi folosite in crearea meniurior imbricate&lt;/li&gt;&lt;li&gt;orice element va fi capabil sa se comporte ca un &lt;a title="Hyperlink" href="http://en.wikipedia.org/wiki/Hyperlink"&gt;hyperlink&lt;/a&gt; similar cu &lt;a title="XLink" href="http://en.wikipedia.org/wiki/XLink"&gt;XLink&lt;/a&gt;, de exemplu &amp;lt;li href="articles.html"&amp;gt;Articles&amp;lt;/li&amp;gt;&lt;/li&gt;&lt;li&gt;orice element va fi capabil sa refere o media alternativa cu atributul src, de exemplu: &amp;lt;src="tree.jpg" type="image/jpeg"&amp;gt;Oak&amp;lt;/p&amp;gt; este acelasi obiect ca si &amp;lt;object src="tree.jpg" type="iamge/jpeg"&amp;gt;&amp;lt;p&amp;gt;Oak&amp;lt;/p&amp;gt;&amp;lt;/object&amp;gt;&lt;/li&gt;&lt;li&gt;atributul alt al unui element img a fost inlaturat: un text alterntiv poate fi dat in continutul unui element img, asemanator cu elementul object, de exemplu: &amp;lt;img src="abc_abecedar.jpg"&amp;gt;ABC &amp;lt;em&amp;gt;Abecedar&amp;lt;/em&amp;gt;&amp;lt;/img&amp;gt;.&lt;/li&gt;&lt;li&gt;un singur element head (h) va fi adaugat. Nivelul acestor headinguri va fi indicat de elementele sectiunilor imbricate, fiecare avand propriul sau heading h&lt;/li&gt;&lt;li&gt;elementele i, b, tt vor fi si ele inlaturate din versiunea 2.0, numai elementele de subprezentare de tipul sup si sub (adica superscript si subscript) pentru ca ele sunt necesare in anumite limbaje. Toate celelalte taguri se intentioneaza sa fie semantice (de exemplu &amp;lt;strong&amp;gt; pentru text strong si boldat), in timp ce permite agentilor utilizatori sa controleze prezentarea cu elemente &lt;span style="color:#ff6600;"&gt;CSS&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;adaugarea &lt;span style="color:#ff6600;"&gt;RDF&lt;/span&gt; triplu cu proprietatea si atributele care usureaza conversia de la &lt;span style="color:#000099;"&gt;XHTML&lt;/span&gt; la &lt;span style="color:#000099;"&gt;&lt;span style="color:#ff6600;"&gt;RDF&lt;/span&gt;/XML&lt;/span&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Cativa membrii ai familiei &lt;span style="color:#000099;"&gt;XHTML&lt;/span&gt;:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a title="XHTML Basic" href="http://en.wikipedia.org/wiki/XHTML_Basic"&gt;XHTML Basic&lt;/a&gt;: o versiune light a &lt;span style="color:#000099;"&gt;XHTML&lt;/span&gt; pentru dispozitive care nu suporta dialectele &lt;span style="color:#000099;"&gt;XHTML&lt;/span&gt; mai mari si mai complexe folosita pentru handheld-uri si telefoane mobile (este o inlocuire a &lt;a title="Wireless Markup Language" href="http://en.wikipedia.org/wiki/Wireless_Markup_Language"&gt;WML&lt;/a&gt; si &lt;a title="C-HTML" href="http://en.wikipedia.org/wiki/C-HTML"&gt;C-HTML&lt;/a&gt;).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a title="XHTML Mobile Profile" href="http://en.wikipedia.org/wiki/XHTML_Mobile_Profile"&gt;XHTML Mobile Profile&lt;/a&gt;: bazat pe &lt;span style="color:#000099;"&gt;XHTML&lt;/span&gt; Basic, acest &lt;a title="Open Mobile Alliance" href="http://en.wikipedia.org/wiki/Open_Mobile_Alliance"&gt;OMA&lt;/a&gt; (&lt;a class="external text" title="http://www.openmobilealliance.org/" href="http://www.openmobilealliance.org/" rel="nofollow"&gt;Open Mobile Alliance&lt;/a&gt;) efort tinteste in special catre telefoanele de mana adaugand elemente specifice telefoanelor mobile la &lt;span style="color:#000099;"&gt;XHTML&lt;/span&gt; Basic. &lt;/li&gt;&lt;li&gt;&lt;a title="XHTML+Voice" href="http://en.wikipedia.org/wiki/XHTML%2BVoice"&gt;XHTML+Voice&lt;/a&gt;: &lt;span style="color:#000099;"&gt;XHTML&lt;/span&gt; combinat cu &lt;a title="Voice XML" href="http://en.wikipedia.org/wiki/Voice_XML"&gt;Voice XML&lt;/a&gt; pentru a suporta interactiuni audio video.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/281020151219122185-5045502677754567918?l=a-interfete-evoluate.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-interfete-evoluate.blogspot.com/feeds/5045502677754567918/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=281020151219122185&amp;postID=5045502677754567918' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/281020151219122185/posts/default/5045502677754567918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/281020151219122185/posts/default/5045502677754567918'/><link rel='alternate' type='text/html' href='http://a-interfete-evoluate.blogspot.com/2007/12/xhtml.html' title='XHTML'/><author><name>Magda</name><uri>http://www.blogger.com/profile/00059810687935976196</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-281020151219122185.post-4862261549536860684</id><published>2007-12-04T01:37:00.000-08:00</published><updated>2007-12-04T02:10:13.263-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Servlets'/><title type='text'>Servlets</title><content type='html'>Ce e un servlet?&lt;br /&gt;Servelturile sunt module de cod java care ruleaza intr-un server de aplicatii,&lt;br /&gt;pentru a raspunde la cererile clientilor. Servletii nu sunt dependenti de un&lt;br /&gt;un anumit protocol client-server, dar de cele mai multe ori sunt folositi cu HTTP.&lt;br /&gt;&lt;br /&gt;Pentru a scrie servleti sunt necesare clasele javax.servlet (framework-ul de baza) si&lt;br /&gt;javax.servlet.http (frameworkul care raspunde cererilor http).&lt;br /&gt;&lt;br /&gt;Servletii HTTP  se folosesc in mod curent pentru:&lt;br /&gt;-procesare si/sau inmagazinarea datelor trimise printr-un form HTML&lt;br /&gt;-creare de continut dinamic (de ex se returneaza catre client ce s-a obtinut la un query pe o baza de date)&lt;br /&gt;&lt;br /&gt;Servlets vs CGI&lt;br /&gt;Modul traditional de a extinde functionalitatea unui server este CGI (Common Gateway Interface) – interfata independenta de limbaj, ce permite serverului sa porneasca un proces nou care primeste informatiile unui request (ex parametrii) prin variabile de mediu sau intrarea standard si scrie raspunsul la iesirea standard. Fiecare request e procesat separat (o alta instanta de CGI/ script CGI).&lt;br /&gt;&lt;br /&gt;Servletii au cateva avantaje fata de CGI:&lt;br /&gt;-un servlet nu ruleaza intr-un process separate -&gt; se elimina overheadul crearii unui nou process pentru fiecare request&lt;br /&gt;-un servlet ramane in memorie, daca un request s-a terminat si urmeaza altul aceeasi instanta de servlet il va procesa&lt;br /&gt;-in server exista o singura instanta de servlet care raspunde concurent la toate requesturile&lt;br /&gt;-mult mai sigur&lt;br /&gt;&lt;br /&gt;Arhitectura de baza a unui servlet&lt;br /&gt;Un servlet e o instanta a unei clase ce extinde interfata javax.servlet.Servlet. Cei mai multi servleti extind insa o implementare standard a interfetei, cum ar fi javax.servlet.GenericServlet sau javax.servlet.http.HttpServlet.&lt;br /&gt;Pentru a initializa un servlet, serverul de aplicatii incarca clasa Servlet si creeaza o instanta apeland cosntructorul fara argumente. Acesta apeleaza mai departe metoda init (se creeaza un obiect de tip ServerConfig).&lt;br /&gt;Sevletul efectueaza o singura data aceasta procedura de setup, iar obiectul ServletConfig e obtinut prin metoda getServletConfig().&lt;br /&gt;Cand servletul este initializat, metoda service(ServletRequest req, ServletResponse res)&lt;br /&gt;e apelata la fiecare request pe servlet (poate fi apelata concurent ).&lt;br /&gt;La descarcarea servletului din server, se apeleaza metoda destroy() (toate resursele alocate in init sunt eliberate).&lt;br /&gt;&lt;br /&gt;Diagrama cu lifecycle-ul unui servlet:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_D_4wj09qdJ8/R1UgcUd0CxI/AAAAAAAAAAM/ldVA6606qjE/s1600-h/lifecycle.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_D_4wj09qdJ8/R1UgcUd0CxI/AAAAAAAAAAM/ldVA6606qjE/s320/lifecycle.png" alt="" id="BLOGGER_PHOTO_ID_5140050220615469842" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In continuare dau un exemplu simplu de HTTP Servlet, care trimite clientului inapoi paramatrii dintr-un form.&lt;br /&gt;&lt;br /&gt;Codul html pentru form este:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;HTML&amp;gt;&lt;br /&gt;  &amp;lt;HEAD&amp;gt;&lt;br /&gt;    &amp;lt;TITLE&amp;gt;HTML form tutorial example&amp;lt;/TITLE&amp;gt;&lt;br /&gt;  &amp;lt;/HEAD&amp;gt;&lt;br /&gt;  &amp;lt;BODY&amp;gt;&lt;br /&gt;   &amp;lt;H1&amp;gt;HTML form tutorial example&amp;lt;/H1&amp;gt;&lt;br /&gt;   &amp;lt;FORM ACTION="http://localhost:8080/myservlet/MyServlet" METHOD="POST"&amp;gt;&lt;br /&gt;   Name: &amp;lt;INPUT TYPE="TEXT" NAME="Name" VALUE="" SIZE="25" MAXLENGTH="50"&amp;gt; &amp;lt;BR&amp;gt;&lt;br /&gt;   Email: &amp;lt;INPUT TYPE="TEXT" NAME="Email" VALUE="" SIZE="25" MAXLENGTH="50"&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;   &amp;lt;INPUT TYPE="SUBMIT" NAME="submit" VALUE="Sign Me Up!"&amp;gt;&lt;br /&gt;   &amp;lt;/FORM&amp;gt;&lt;br /&gt;  &amp;lt;/BODY&amp;gt;&lt;br /&gt;&amp;lt;/HTML&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Clasa care extinde HttpServlet:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;import javax.servlet.ServletException;&lt;br /&gt;import javax.servlet.http.HttpServlet;&lt;br /&gt;import javax.servlet.http.HttpServletRequest;&lt;br /&gt;import javax.servlet.http.HttpServletResponse;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class MyServlet extends HttpServlet {&lt;br /&gt; &lt;br /&gt; public void doGet(HttpServletRequest req, HttpServletResponse res)&lt;br /&gt; throws ServletException, IOException {&lt;br /&gt;  doPost(req, res);&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public void doPost(HttpServletRequest req, HttpServletResponse res)&lt;br /&gt; throws ServletException, IOException {&lt;br /&gt;  &lt;br /&gt;  res.setContentType("text/html");&lt;br /&gt;  PrintWriter out = res.getWriter();&lt;br /&gt;  &lt;br /&gt;  out.println("(parametru,valoare):");&lt;br /&gt;  Enumeration en = req.getParameterNames();&lt;br /&gt;  while (en.hasMoreElements()) {&lt;br /&gt;    String param = (String) en.nextElement();&lt;br /&gt;    String value = req.getParameter(param);&lt;br /&gt;    out.println(param + "=" + value);&lt;br /&gt;   } &lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Iar fisierul de configurare web.xml este:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"&amp;gt;&lt;br /&gt; &amp;lt;display-name&amp;gt;&lt;br /&gt; myservlet&amp;lt;/display-name&amp;gt;&lt;br /&gt; &amp;lt;servlet&amp;gt;&lt;br /&gt;  &amp;lt;description&amp;gt;&lt;br /&gt;  &amp;lt;/description&amp;gt;&lt;br /&gt;  &amp;lt;display-name&amp;gt;&lt;br /&gt;  MyServlet&amp;lt;/display-name&amp;gt;&lt;br /&gt;  &amp;lt;servlet-name&amp;gt;MyServlet&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;  &amp;lt;servlet-class&amp;gt;&lt;br /&gt;  MyServlet&amp;lt;/servlet-class&amp;gt;&lt;br /&gt; &amp;lt;/servlet&amp;gt;&lt;br /&gt; &amp;lt;servlet-mapping&amp;gt;&lt;br /&gt;  &amp;lt;servlet-name&amp;gt;MyServlet&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;  &amp;lt;url-pattern&amp;gt;/MyServlet&amp;lt;/url-pattern&amp;gt;&lt;br /&gt; &amp;lt;/servlet-mapping&amp;gt;&lt;br /&gt; &amp;lt;welcome-file-list&amp;gt;&lt;br /&gt;  &amp;lt;welcome-file&amp;gt;index.html&amp;lt;/welcome-file&amp;gt;&lt;br /&gt;  &amp;lt;welcome-file&amp;gt;index.htm&amp;lt;/welcome-file&amp;gt;&lt;br /&gt;  &amp;lt;welcome-file&amp;gt;index.jsp&amp;lt;/welcome-file&amp;gt;&lt;br /&gt;  &amp;lt;welcome-file&amp;gt;default.html&amp;lt;/welcome-file&amp;gt;&lt;br /&gt;  &amp;lt;welcome-file&amp;gt;default.htm&amp;lt;/welcome-file&amp;gt;&lt;br /&gt;  &amp;lt;welcome-file&amp;gt;default.jsp&amp;lt;/welcome-file&amp;gt;&lt;br /&gt; &amp;lt;/welcome-file-list&amp;gt;&lt;br /&gt;&amp;lt;/web-app&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/281020151219122185-4862261549536860684?l=a-interfete-evoluate.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-interfete-evoluate.blogspot.com/feeds/4862261549536860684/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=281020151219122185&amp;postID=4862261549536860684' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/281020151219122185/posts/default/4862261549536860684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/281020151219122185/posts/default/4862261549536860684'/><link rel='alternate' type='text/html' href='http://a-interfete-evoluate.blogspot.com/2007/12/servlets.html' title='Servlets'/><author><name>Alexandru</name><uri>http://www.blogger.com/profile/06798693004871330597</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_D_4wj09qdJ8/R1UgcUd0CxI/AAAAAAAAAAM/ldVA6606qjE/s72-c/lifecycle.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-281020151219122185.post-1202552296241850919</id><published>2007-12-03T11:39:00.000-08:00</published><updated>2007-12-03T11:44:32.018-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='prelucrare XML'/><title type='text'>DOM vs SAX</title><content type='html'>&lt;p class="MsoNormal"&gt;&lt;span style="" lang="FR"&gt;DOM este o metoda mai convenienta de manipulare a fisierelor XML, dar la folosirea lui trebuie luate in considerare urmatoarele aspecte :&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="FR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="FR"&gt;Fisierul XML trebuie parsat in      totaliate inainte de a se incepe procesarea lui. &lt;/span&gt;Cum majoritarea      implementarilor DOM sunt memory-based, aceasta aduce o limitare majora la      cantitatea de XML ce trebuie procesat. &lt;span style="" lang="FR"&gt;De aici rezulta ca si limitarea de a face procesare in paralel pe mai      multe portiuni din XML este limitata (prin pipelining)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="FR"&gt;Structura de DOM defineste numai      niste noduri generice, pe cand in majoritatea limbajelor orientate obiect      se doreste sa se implementeze clase concrete de noduri.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="FR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="FR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="FR"&gt;SAX este mult mai folositor atunci cand :&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="FR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="FR"&gt;Se doreste procesarea unor cantitati      mari de XML, dar informatia cautata este punctuala, in sensul ca se      doreste prelucrarea unei portiuni mici din XML din diverse zone din      document &lt;span style=""&gt; &lt;/span&gt;(e event driven)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="FR"&gt;Mai putina alocare de memorie&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="FR"&gt;Mai multe stagii din procesarea      documentului XML sunt interconectate – spre a forma un pipeline,      nemaifiind nevoie de procesarea intregului document inainte &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="FR"&gt;La folosirea lui se scrie in general      mai mult cod decat ca atunci cand e folosit DOM &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/281020151219122185-1202552296241850919?l=a-interfete-evoluate.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-interfete-evoluate.blogspot.com/feeds/1202552296241850919/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=281020151219122185&amp;postID=1202552296241850919' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/281020151219122185/posts/default/1202552296241850919'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/281020151219122185/posts/default/1202552296241850919'/><link rel='alternate' type='text/html' href='http://a-interfete-evoluate.blogspot.com/2007/12/dom-vs-sax.html' title='DOM vs SAX'/><author><name>Alexandru</name><uri>http://www.blogger.com/profile/06798693004871330597</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-281020151219122185.post-4019873475250559505</id><published>2007-12-02T06:15:00.000-08:00</published><updated>2007-12-03T11:47:54.177-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebServices'/><title type='text'>Web Services / Axis</title><content type='html'>&lt;p class="MsoNormal"&gt;&lt;u&gt;Ce este un web service&lt;o:p&gt;&lt;/o:p&gt;&lt;/u&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="" lang="FR"&gt;Este un lucru foarte normal ca dou programe (procese) sa comunice intre ele pe acceasi masina, folosind fisiere, IPC-uri, pipe-uri, cozi de mesaje, memorie partajata etc. Acest lucru se poate generaliza si la nivel de mai multe masini, adica aceleasi doua programe pot exista pe masini diferite, unul server iar celalalt client, metoda de comunica fiind socketii.&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;Un exemplu foarte la indemana este un client (un browser Firefox) si un server ruland Apache, comunicand la nivel HTTP, dar de multe ori se doreste ca serverul sa faca lucruri ceva mai complicate decat sa trimita clientului o pagina html, cum ar fi sa execute niste calcule foarte complexe si sa transmita rezultatul clientului. Acest lucru s-ar putea face in nenumarate feluri. O modalitate ar fi sa copii (scp) un script care face calculele, sa te conectezi apoi pe server si sa executi scriptul &lt;span style=""&gt; &lt;/span&gt;(ssh), apoi sa preiei rezultatele, dar aceasta metoda este destul de obositoare, mai ales cand trebuie sa repeti operatiunea. Web Services vin in ajutorul nostru, facand toate aceste lucruri intr-un mod unitar, generic si&lt;span style=""&gt;  &lt;/span&gt;standardizat, toate pe baza paradigmei client-server.&lt;/span&gt;&lt;/p&gt;      &lt;p class="MsoNormal"&gt;&lt;u&gt;&lt;span style="" lang="FR"&gt;Cum functioneaza un web service&lt;/span&gt;&lt;/u&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="" lang="FR"&gt;Diagrama :&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;pre&gt;&lt;span style=""&gt;  &lt;/span&gt;+--------------------------------------+&lt;/pre&gt;&lt;pre&gt;&lt;span style=""&gt;  &lt;/span&gt;|&lt;span style=""&gt;   &lt;/span&gt;&lt;span style=""&gt;      &lt;/span&gt;web service registry&lt;span style=""&gt;         &lt;/span&gt;|&lt;/pre&gt;&lt;pre&gt;&lt;span style=""&gt;  &lt;/span&gt;|&lt;span style=""&gt;         &lt;/span&gt;(aka service broker)&lt;span style=""&gt;         &lt;/span&gt;|&lt;/pre&gt;&lt;pre&gt;&lt;span style=""&gt;  &lt;/span&gt;|&lt;span style=""&gt;                &lt;/span&gt;(UDDI)&lt;span style=""&gt;                &lt;/span&gt;|&lt;/pre&gt;&lt;pre&gt;&lt;span style=""&gt;  &lt;/span&gt;+--------------------------------------+&lt;/pre&gt;&lt;pre&gt;&lt;span style=""&gt;         &lt;/span&gt;^&lt;span style=""&gt;                        &lt;/span&gt;^&lt;/pre&gt;&lt;pre&gt;&lt;span style=""&gt;         &lt;/span&gt;|&lt;span style=""&gt;                        &lt;/span&gt;|&lt;/pre&gt;&lt;pre&gt;&lt;span style=""&gt;     &lt;/span&gt;(2) |&lt;span style=""&gt;        &lt;/span&gt;&lt;span style=""&gt;            &lt;/span&gt;(1) |&lt;/pre&gt;&lt;pre&gt;&lt;span style=""&gt;         &lt;/span&gt;|&lt;span style=""&gt;  &lt;/span&gt;(the client&lt;span style=""&gt;           &lt;/span&gt;|&lt;span style=""&gt;  &lt;/span&gt;(the web service&lt;/pre&gt;&lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;WSDL&lt;span style=""&gt;  &lt;/span&gt;finds the&lt;span style=""&gt;          &lt;/span&gt;WSDL&lt;span style=""&gt;  &lt;/span&gt;provider publishes&lt;/pre&gt;&lt;pre&gt;&lt;span style=""&gt;         &lt;/span&gt;|&lt;span style=""&gt;   &lt;/span&gt;service&lt;span style=""&gt;              &lt;/span&gt;|&lt;span style=""&gt;   &lt;/span&gt;the web service)&lt;/pre&gt;&lt;pre&gt;&lt;span style=""&gt;         &lt;/span&gt;|&lt;span style=""&gt;   &lt;/span&gt;they want)&lt;span style=""&gt;           &lt;/span&gt;|&lt;/pre&gt;&lt;pre&gt;&lt;span style=""&gt;         &lt;/span&gt;|&lt;span style=""&gt;                        &lt;/span&gt;|&lt;/pre&gt;&lt;pre&gt;&lt;span style=""&gt;         &lt;/span&gt;v&lt;span style=""&gt;                        &lt;/span&gt;|&lt;/pre&gt;&lt;pre&gt;&lt;span style=""&gt;   &lt;/span&gt;+-----------+&lt;span style=""&gt;            &lt;/span&gt;+-----------+&lt;/pre&gt;&lt;pre&gt;&lt;span style=""&gt;   &lt;/span&gt;| service&lt;span style=""&gt;   &lt;/span&gt;|&lt;---SOAP---&gt;|&lt;span style=""&gt;  &lt;/span&gt;service&lt;span style=""&gt;  &lt;/span&gt;|&lt;/pre&gt;&lt;pre&gt;&lt;span style=""&gt;   &lt;/span&gt;| requestor |&lt;span style=""&gt;            &lt;/span&gt;|&lt;span style=""&gt;  &lt;/span&gt;provider |&lt;/pre&gt;&lt;pre&gt;&lt;span style=""&gt;   &lt;/span&gt;+-----------+&lt;span style=""&gt;     &lt;/span&gt;(3)&lt;span style=""&gt;    &lt;/span&gt;+-----------+&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;        &lt;p class="MsoNormal"&gt;&lt;span style="" lang="FR"&gt;WSDL -- Web Services description Language - descrie prin XML ce face un web service&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;UDDI -- Universal Description, Discovery and Integration &lt;span style=""&gt; &lt;/span&gt;protocol - protocolul care publica wsdl-urile&lt;br /&gt;SOAP -- protocol de transport mesaje XML folosind HTTP (peste TCP, folosind portul 80) &lt;/p&gt;      &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;span style="" lang="FR"&gt;Pasul 1 e folosit doar cand se doreste publicarea pe web a web service-ului, iar pasul 2 cand clientul nu stie ce anume/de unde sa sa foloseasa de la un web service. &lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;Ca sa descrii ce anume face web service-ul tau, ar trebui facut un fisier WSDL cu XML, dar acest lucru nu mai este necesar cand folosesti Axis, acesta creeza automat fisierul pentru tine, pe baza codului java.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;      &lt;p class="MsoNormal"&gt;&lt;u&gt;&lt;span style="" lang="FR"&gt;Ce este Apache Axis&lt;/span&gt;&lt;/u&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;u&gt;&lt;span style="" lang="FR"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/u&gt;&lt;span style="" lang="FR"&gt;Axis este o implementare a protocolului SOAP, care ne scuteste de munca&lt;span style=""&gt;  &lt;/span&gt;cu SOAP si WSDL. Este folosit atat pe partea de server pentru a scrie web service-ul (aplicatie web deployata pe un server de aplicatii gen Tomcat) cat si pe partea de client, &lt;span style=""&gt; &lt;/span&gt;pentru a face apeluri de metode ale instantei de web service catre server.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;              &lt;p class="MsoNormal"&gt;&lt;span style="" lang="FR"&gt;&lt;o:p&gt;&lt;/o:p&gt;In continuare vom scrie o mini-aplicatie demonstrativa client-server in Axis. Serverul va executa cateva operatii matematice simple gen adunari/scaderi pe baza unor parametri transmisi de client, returnandu-i clientului rezultatul pentru metodele invocate. &lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;De ce avem nevoie ? &lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;De Axis si de un server de aplicatii Tomcat. Axis se poate downloada de la &lt;a href="http://people.apache.org/dist/axis/nightly/axis-bin-1_4.zip"&gt;http://people.apache.org/dist/axis/nightly/axis-bin-1_4.zip&lt;/a&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;Instalarea acestuia e foarte simpla. Se dezarhiveaza si se copie tot folderul webapps/axis in folderul webapps din Tomcat. Daca nu apar probleme, un apel catre &lt;a href="http://localhost:8080/axis/"&gt;http://localhost:8080/axis/&lt;/a&gt; ar trebui sa incarce pagina cu Apache-AXIS.&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;Tot din folderul dezarhivat de Axis (in lib), pentru scrierea clientului, sunt necesare cateva biblioteci (jar-uri) . &lt;/span&gt;Eu am folosit doar&lt;span style=""&gt;  &lt;/span&gt;axis.jar, commons-discovery-0.2.jar, commons-logging-1.0.4.jar, jaxrpc.jar si wsdl4j-1.5.1.jar.&lt;/p&gt;&lt;p class="MsoNormal"&gt;  &lt;/p&gt;&lt;p class="MsoNormal"&gt;Serverul arata cam asa:&lt;/p&gt;  &lt;code&gt;public class Server {&lt;br /&gt;&lt;br /&gt;public String echo(String str) {&lt;br /&gt; return str;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public int add(int a, int b) {&lt;br /&gt; return a+b;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public int substract(int a, int b) {&lt;br /&gt; return a-b;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;              &lt;p class="MsoNormal"&gt;Acesta e initial un fisier Server.java care il copiem in directorul webapps/axis din Tomcat, schimbandui extensia din .java in .jws, deci vom avea webapps/axis/Server.jws&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;Iar clientul arata astfel:&lt;/p&gt;  &lt;code&gt;import org.apache.axis.client.Call;&lt;br /&gt;import org.apache.axis.client.Service;&lt;br /&gt;import org.apache.axis.encoding.XMLType;&lt;br /&gt;&lt;br /&gt;import javax.xml.rpc.ParameterMode;&lt;br /&gt;&lt;br /&gt;public class Client {&lt;br /&gt;public static void main(String [] args) throws Exception {&lt;br /&gt; String endpoint = "http://localhost:8080/axis/Server.jws";&lt;br /&gt;&lt;br /&gt; String str = "echo string";&lt;br /&gt; Integer a = new Integer(2);&lt;br /&gt; Integer b = new Integer(7);&lt;br /&gt;&lt;br /&gt; Service service = new Service();&lt;br /&gt; Call call = (Call) service.createCall();&lt;br /&gt;&lt;br /&gt; call.setTargetEndpointAddress(new java.net.URL(endpoint));&lt;br /&gt;&lt;br /&gt; String method = "echo";&lt;br /&gt; call.setOperationName(method);&lt;br /&gt; call.addParameter("unstring", XMLType.XSD_STRING, ParameterMode.IN);&lt;br /&gt; call.setReturnType(XMLType.XSD_STRING);&lt;br /&gt; String retstr = (String) call.invoke(new Object [] {str});&lt;br /&gt; System.out.println("am trimis " + str + ", am primit " + retstr);&lt;br /&gt;&lt;br /&gt; call.clearOperation();&lt;br /&gt;&lt;br /&gt; method = "add";&lt;br /&gt; call.setOperationName(method);&lt;br /&gt; call.addParameter("unint", XMLType.XSD_INT, ParameterMode.IN);&lt;br /&gt; call.addParameter("altint", XMLType.XSD_INT, ParameterMode.IN);&lt;br /&gt; call.setReturnType(XMLType.XSD_INT);&lt;br /&gt; Integer retint = (Integer) call.invoke(new Object [] {a, b});&lt;br /&gt; System.out.println("am trimis " + a + " + " + b + ", am primit " + retint);&lt;br /&gt;&lt;br /&gt; call.clearOperation();&lt;br /&gt;&lt;br /&gt; method = "substract";&lt;br /&gt; call.setOperationName(method);&lt;br /&gt; call.addParameter("unint", XMLType.XSD_INT, ParameterMode.IN);&lt;br /&gt; call.addParameter("altint", XMLType.XSD_INT, ParameterMode.IN);&lt;br /&gt; call.setReturnType(XMLType.XSD_INT);&lt;br /&gt; retint = (Integer) call.invoke(new Object [] {a, b});&lt;br /&gt; System.out.println("am trimis " + a + " - " + b + ", am primit " + retint);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;p class="MsoNormal" style=""&gt;&lt;span style="color:black;"&gt;Ideea pe care s-a construit clientul e ca s-a pornit de la crearea a doua obiecte, un Service si un Call bazat pe Service. Aceste doua obiecte retin metadata despre web service. Apoi s-a setat endpointul pentru call (URL destinatie pentru mesajul SOAP), s-a setat operatia care se doreste apelata pe server, tipul parametrilor pentru operatie si se invoca operatia cu parametru un vector de obiecte ce reprezinta parametrii metodei invocate, iar ce anume returneaza metoda invoke pe call reprezinta chiar rezultatul operatiei apelate pe server.&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;pre&gt;&lt;br /&gt;&lt;span style="color:black;"&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/pre&gt;  &lt;pre&gt;&lt;br /&gt;&lt;span style="color:black;"&gt;&lt;span style="font-family:Georgia,serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/281020151219122185-4019873475250559505?l=a-interfete-evoluate.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-interfete-evoluate.blogspot.com/feeds/4019873475250559505/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=281020151219122185&amp;postID=4019873475250559505' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/281020151219122185/posts/default/4019873475250559505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/281020151219122185/posts/default/4019873475250559505'/><link rel='alternate' type='text/html' href='http://a-interfete-evoluate.blogspot.com/2007/12/web-services-axis.html' title='Web Services / Axis'/><author><name>Alexandru</name><uri>http://www.blogger.com/profile/06798693004871330597</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-281020151219122185.post-105533686104634088</id><published>2007-11-05T03:08:00.000-08:00</published><updated>2007-11-05T03:16:20.227-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='literatura'/><category scheme='http://www.blogger.com/atom/ns#' term='interfete evoluate'/><title type='text'>Interfete evoluate in literatura si cinematografie</title><content type='html'>Motivul interfetelor evoluate este omniprezent in literatura, mai ales in cea science fiction. Robotii prezenti in acest gen de carti interactioneaza cu oamenii prin niste interfete evoluate. Aceste interfete pot fi fie prin viu grai, fie printr-un afisav evoluat, rareori robotii fiind comandati print telecomenzi. Si computerele au interfete evoluate accesibile prin comenzi de voce sau prin ecrane, cel mai celebru fiind computerul central din star trek. Uneori, nici nu e nevoie de un ecran pe care sa fie afisate niste interefete evoluate, acestea aparand sub forma unor holograme, interfata fiind mult mai naturala astfel.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/281020151219122185-105533686104634088?l=a-interfete-evoluate.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-interfete-evoluate.blogspot.com/feeds/105533686104634088/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=281020151219122185&amp;postID=105533686104634088' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/281020151219122185/posts/default/105533686104634088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/281020151219122185/posts/default/105533686104634088'/><link rel='alternate' type='text/html' href='http://a-interfete-evoluate.blogspot.com/2007/11/interfete-evoluate-in-literatura-si.html' title='Interfete evoluate in literatura si cinematografie'/><author><name>Bogdan</name><uri>http://www.blogger.com/profile/06493574756295934086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-281020151219122185.post-7870044089140445173</id><published>2007-10-30T15:58:00.000-07:00</published><updated>2007-10-30T16:21:03.509-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='interfete evoluate'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><title type='text'>Cum se foloseste Ajax pentru interfete evoluate</title><content type='html'>Ajax este tehnologia care este acum la moda pentru crearea de interfete evoluate. De fapt, in domeniul web-based, interfete mai evoluate decat cu ajax nu exista. E hip sa-ti scrii interfetele web cu Ajax.&lt;br /&gt;&lt;br /&gt;Dar destula vorbarie: ce este Ajax, in definitiv? Este o modalitate noua de a crea aplicatii web prin evolutia interactivitatii dintre utilizator si interfata: mai exact: atunci cand utilizatorul actioneaza asupra interfetei, aceasta nu reincarca o alta pagina, ci doar face o anumita cerere serverului, printr-o functie javascript, XMLHttpRequest, iar acesta raspunde cu anumite date, care sunt afisate de interfata.&lt;br /&gt;&lt;br /&gt;Cu alte cuvinte, daca s-a schimbat un rand dintr-o pagina cu o mie de randuri, serverul trebuie sa trimita doar acel rand, nu o mie de randuri, ceea ce face ca aceste interfate cu ajax sa fie mai rapide decat cele normale.&lt;br /&gt;&lt;br /&gt;Datele sunt trimise de server in formatul XML, iar acesta este prelucrat de javascript pentru a fi afisat de interfata ca HTML sau eventual XHTML.&lt;br /&gt;&lt;br /&gt;Avantajele unor astfel de interfete evoluate sunt evidente: nu se iroseste latime de banda cu retransmiterea de informatii care interfata clientului le stie deja, este mai rapid pentru utilizator,  refreshul se poate realiza in background, fara a deranja utilizatorul care lucreaza.&lt;br /&gt;&lt;br /&gt;De exemplu, un procesor de texte gen microsoft word ar putea ca in timp ce utilizatorul scrie un document, ca din cand in cand in cand sa-l transmita la server pentru a-l salva.&lt;br /&gt;&lt;br /&gt;Astfel, in acest caz, aceste interfete evoluate se vor gasi in cadrul unei ferestre de browser, permitand accesarea lor dintr-un "thin client", prelucrarile complexe realizandu-se pe server, in timp ce clientul putand sa fie un calculator slab.&lt;br /&gt;&lt;br /&gt;Aceasta este util pentru prelucrarea unei imagini in photoshop, de exemplu, din interfetele unui pocketpc, care are un procesor lent, prin folosirea resurselor serverelor evoluate.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/281020151219122185-7870044089140445173?l=a-interfete-evoluate.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-interfete-evoluate.blogspot.com/feeds/7870044089140445173/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=281020151219122185&amp;postID=7870044089140445173' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/281020151219122185/posts/default/7870044089140445173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/281020151219122185/posts/default/7870044089140445173'/><link rel='alternate' type='text/html' href='http://a-interfete-evoluate.blogspot.com/2007/10/cum-se-foloseste-ajax-pentru-interfete.html' title='Cum se foloseste Ajax pentru interfete evoluate'/><author><name>Bogdan</name><uri>http://www.blogger.com/profile/06493574756295934086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-281020151219122185.post-283344933719518287</id><published>2007-10-30T15:42:00.000-07:00</published><updated>2007-10-30T16:00:28.886-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='interfete evoluate'/><category scheme='http://www.blogger.com/atom/ns#' term='general'/><title type='text'>Ce sunt acelea interfete evoluate?</title><content type='html'>&lt;div align="justify"&gt;O interfata este evoluata atunci cand aceasta are un mod evoluat de comunicare cu utilizatorul. Aceste interfete pot fi in cadrul unei aplicatii evoluate de sine statatoare sau o interfata din cadrul unei alte aplicatii, de exemplu, interfata unui browser.&lt;br /&gt;&lt;br /&gt;In timp ce pentru interfata utilizator a unei aplicatii win32 sau linux nu exista nici un curs la facultatea de automatica, pentru interfata web se evolueaza un curs evoluat numit IE, sau interfete evoluate.&lt;br /&gt;&lt;br /&gt;Scopul acestui curs este de a invata folosirea HTML-ului si al XML-ului pentru a crea interfete web. In ultimii ani, interfetele web au devenit din ce mai folosite, inlocuind aplicatiile clasice pentru multe din taskurile curente.&lt;br /&gt;&lt;br /&gt;De exemplu, acum cu gmail, care foloseste ajax, un amestec de html, css si javascript nu mai este nevoie de un client pop de mail. Avantajul este evident: interfatele acestuia pot fi accesate de pe orice calculator, indiferent de sistem de operare, fara a fi nevoie sa instalam programul.&lt;br /&gt;&lt;br /&gt;Aceasta compatibilitate universala este un lucru de care se teme Microsoft: daca toate programele vor fi evoluate in asa fel incat interfetele lor sa fie accesibil de pe orice sistem de operare, atunci nu va mai fi nevoie de windows.&lt;br /&gt;&lt;br /&gt;In orice caz, trendul este ca aceste interfete evoluate sa foloseasca din ce in ce mai mult webul: hartile cu ajax, precum google maps inlocuiesc aplicatiile de sine statatoare, google investeste si intr-o varianta office pentru web, iar adobe chiar o interfata photoshop web-based. &lt;br /&gt;&lt;br /&gt;Viitorul interfetelor evoluate este clar: vor fi pe web, accesibile din browser, pe orice calculator sau &lt;br /&gt;device conectat la internet, din orice colt al pamantului.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/281020151219122185-283344933719518287?l=a-interfete-evoluate.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-interfete-evoluate.blogspot.com/feeds/283344933719518287/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=281020151219122185&amp;postID=283344933719518287' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/281020151219122185/posts/default/283344933719518287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/281020151219122185/posts/default/283344933719518287'/><link rel='alternate' type='text/html' href='http://a-interfete-evoluate.blogspot.com/2007/10/ce-sunt-acelea-interfete-evoluate.html' title='Ce sunt acelea interfete evoluate?'/><author><name>Bogdan</name><uri>http://www.blogger.com/profile/06493574756295934086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
