Avatar billede juliemusen Nybegynder
10. maj 2012 - 14:59 Der er 24 kommentarer og
1 løsning

flash og servlets

Hejsa.

Jeg har brug for at trække noget data ud fra en java servlet. Er der nogle der ved hvordan jeg kommer igang med det?

Kh Julie
Avatar billede arne_v Ekspert
10. maj 2012 - 15:15 #1
Hvis du vil goere det som man gjorde i de gode gamle dage, saa kan du nemt lave en servlet som henter data og outputter XML til response.

Hvis du vil goere det samme lidt nemmere ved at bruge nyere teknologier, saa find et JAX-RS toolkit og brug dette. Der laver du bare en service klasse som returnerer en instans af en data klasse og konvertering til XML sker helt automatisk.

Flash laeser ofte XML, saa det er et godt format
Avatar billede juliemusen Nybegynder
13. maj 2012 - 23:17 #2
Hejsa Arne.

Mange tak for svaret igen.

Har du mulighed for at forklare lidt mere omkring JAX-RS toolkit. Hvordan bruger jeg det og integrer jeg det?

Kh Julie
Avatar billede arne_v Ekspert
14. maj 2012 - 02:22 #3
De to mest brugte JAX-RS tookits are RestEasy and Jersey.

Du har formentligt allerede end af dem i din IDE og/eller server.
Avatar billede arne_v Ekspert
14. maj 2012 - 02:25 #4
Kode eksempel:

Person.java (bare en data klasse)


package test;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Person {
    private int id;
    private String name;
    private String address;
    public Person() {
        this(0, "", "");
    }
    public Person(int id, String name, String address) {
        this.id = id;
        this.name = name;
        this.address = address;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
}


PersonManager.java (web services)


package test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Consumes;
import javax.ws.rs.Produces;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

@Path("/person")
public class PersonManager {
    private static List<Person> data = Collections.synchronizedList(new ArrayList<Person>());
    static {
        data.add(new Person(1, "A A", "A vej 1"));
        data.add(new Person(2, "B B", "B vej 2"));
    }
    @POST
    @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    public void add(Person p) {
        data.add(p);
    }
    @GET
    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    public List<Person> getAll() {
        return data;
    }
    @GET
    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    @Path("/{id}")
    public Person getOne(@PathParam("id") int id) {
        for(Person p : data) {
            if(p.getId() == id) {
                return p;
            }
        }
        throw new WebApplicationException(Response.Status.NOT_FOUND);
    }
}


RestFul.java (definition af alle web services)


package test;

import java.util.HashSet;
import java.util.Set;

import javax.ws.rs.core.Application;
import javax.ws.rs.ApplicationPath;

@ApplicationPath("/rest")
public class RestFul extends Application {
    public Set<Class<?>> getClasses() {
        Set<Class<?>> res = new HashSet<Class<?>>();
        res.add(PersonManager.class);
        return res;
    }
}


web.xml (som fortaeller at der bruges Jersey og loader RestFul klassen)


<?xml version="1.0" encoding="UTF-8"?>
<web-app 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_3_0.xsd"
        version="3.0">
    <servlet>
        <servlet-name>JAX-RS RI Jersey</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>test.RestFul</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
</web-app>
Avatar billede juliemusen Nybegynder
14. maj 2012 - 17:32 #5
Hej Arne.

Mange tak for dit svar. Lige et dumt spørgsmål:-/ Først der opretter jeg et nyt dynamisk webprojekt. Nu skal jeg så have lavet java klasser og servlets og xml, men er:

Person.java (bare en data klasse)
(her skal jeg vælge new->class)?

PersonManager.java (web services)
(her skal jeg vælge: new->servlet)?

RestFul.java (definition af alle web services)
(her skal jeg vælge: new->??)

web.xml
(her skal jeg vælge new->other->XML->XML file)?

Kh Julie
Avatar billede arne_v Ekspert
14. maj 2012 - 18:35 #6
PersonManager er bare en class - JAX-RS toolkit leverer servlet.

RestFul er ogsaa bare en class.

web.xml er ikke bare en XML fil. Jeg tror at du har faaet oprettet en ved projekt oprettelse.
Avatar billede juliemusen Nybegynder
14. maj 2012 - 21:02 #7
Hej Arne.

Tak for det igen :-) Jeg har prøvet at gøre det med PersonManager og RestFul nu.

Jeg har lige prøvet at uploade det til et billede.
http://postimage.org/image/j1mps378x/

Nu ser det sådan ud.
http://postimage.org/image/wc83amwtd/

Jeg er lidt i tvivl om hvad jeg skal vælge til Person.java. Det er vel ikke også bare en klasse?. Når jeg opretter et nyt projekt, kommer der nomalt under WEB-INF er dokument der hedder WEB.xml, men det har der ikke gjort de sidste oar gange jeg har oprettet et. Kan jeg oprette et dokument her der hedder web.xml, og putte din kode ind?

I forhold til flash, hvordan kan jeg så evt trække noget af det data ud herfra, når engang jeg får det op at køre, altså det her eksempel.

Der skal nok noget actionscript ind i flash kunne jeg forestille mig?

KH Julie
Avatar billede juliemusen Nybegynder
14. maj 2012 - 21:13 #8
Det med web.xml har jeg løst nu, det var bare et lille flueben når man oprettede et projekt.
Avatar billede arne_v Ekspert
14. maj 2012 - 22:09 #9
Person klassen er til hvis man web services opererer paa personer.

Hvis du det er biler skal du have en Car klasse.

O.s.v..
Avatar billede arne_v Ekspert
14. maj 2012 - 22:09 #10
Jeg tror at du vil faa mange hits hvis du googler:

flash parse xml
Avatar billede juliemusen Nybegynder
14. maj 2012 - 22:28 #11
oki, jeg prøver at søge på det med flash parse xml.

Hvis jeg finder noget som jeg får ind i actionscript, så vil jeg godt kunne bruge dit her som eksempel, ikke? Altså får noget data ud fra dit eksempel her.

Jeg har oprettet den sidste Person.java

Hvorfor er det der kommer røde krydser over alt her?
Avatar billede juliemusen Nybegynder
14. maj 2012 - 22:29 #12
ups glemte lige linket :-)

http://postimage.org/image/72rsrxix1/

hvordan løser jeg det. Normalt kan man jo trykke på det røde kryds, og så vælge det rigtige, men synes ikke rigtig det hjælper denne gang.
Avatar billede juliemusen Nybegynder
14. maj 2012 - 22:31 #13
Så det vil sige at det jeg egentligt skal connecte via web.xml. Ment på den måde, at de data jeg skal trække ud fra mine servlets, går igennem xml og til flash.

Det vil sige fra flash skal jeg hente noget fra web.xml, fordi at web.xml repræsenterer mine servlets og java osv?
Avatar billede juliemusen Nybegynder
14. maj 2012 - 22:35 #14
Men hvor skal flash dokumentet overhovedet gemmes henne. Jeg tænker på jeg kan jo ikke bare have en mappe på computeren, hvor jeg har min fla fil, og så hele mit web projekt ved siden af, det ville da rode rundt i det i stierne?

Skal jeg importere noget mit flash ind i eclipse?

Synes meget det der står omkring flash parse xml er omkring at skrive xml inde i flash. Jeg tænker det jeg skal bruge er vel noget der henviser til xml dokumentet. Det vil sige viser stien, og her væges hvilken data der skal fremkomme?

Undskyld for så mange svar/spam
Avatar billede juliemusen Nybegynder
14. maj 2012 - 22:59 #15
Har fundet en ganske udmærket kode, som virker med følgende xml:

http://www.youtube.com/watch?v=6gcz0QQVBmg

og det virker rigtig fint. XML filen der duer med denne:

<?xml version="1.0" encoding="utf-8"?>
<XML>

  <myXMLList>
     
      <ListItem>
          <itemColor>FFFFFF</itemColor>
          <itemLabel>test1</itemLabel>
          <itemPhone>343-432-543</itemPhone>
      </ListItem>
     
      <ListItem>
          <itemColor>FFE8E8</itemColor>
          <itemLabel>test2</itemLabel>
          <itemPhone>345-678-987</itemPhone>     
      </ListItem>
     
      <ListItem>
          <itemColor>DDFDB3</itemColor>
          <itemLabel>test3</itemLabel>
          <itemPhone>234-542-567</itemPhone>     
      </ListItem>           
 
  </myXMLList>

</XML>

Det fungerer helt fint, men hvis man skal tage data ud fra din/Arne´s web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
    <servlet>
        <servlet-name>JAX-RS RI Jersey</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>test.RestFul</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
</web-app>

hvor kommer de data så fra, RestFul?? Jeg er lidt i tvivl om hvad outputtet overhovedet ville være rent grafisk ud fra de servlets og xml der er oprettet indtil videre?
Avatar billede arne_v Ekspert
15. maj 2012 - 02:30 #16
For at du kan compile den Person klasse skal du have JAX-RS toolkit i classpath fordi de annotation er defineret der.
Avatar billede arne_v Ekspert
15. maj 2012 - 02:31 #17
web.xml er konfiguration af din web app.

Den XML har inett at goere med den XML der sendes til client.
Avatar billede arne_v Ekspert
15. maj 2012 - 02:32 #18
Naar web servicen getOne kaldes saa vil den return en Person (eller hvad den nu skal returnere i dit eksempel).

Og JAX-RS vil konvertere den til XML for dig.
Avatar billede juliemusen Nybegynder
15. maj 2012 - 08:24 #19
hm oki tak. Men hvordan får jeg JAX-RS toolkit ind i classpath?
Avatar billede juliemusen Nybegynder
15. maj 2012 - 22:13 #20
Jeg så der var en mulighed inde i eclipse med new->JAX-RS toolkit. Det er ikke det jeg skal bruge vel?
Avatar billede arne_v Ekspert
16. maj 2012 - 02:07 #21
Du henter et hvis ikke der allered er et og tilfoejer jar filen/filerne til projektet.
Avatar billede juliemusen Nybegynder
19. maj 2012 - 19:02 #22
Hej Arne.

Mange tak for hjællpen, vi fandt ud af noget af det. Ligger du et svar?
Avatar billede arne_v Ekspert
20. maj 2012 - 02:24 #23
svar
Avatar billede arne_v Ekspert
20. maj 2012 - 02:26 #24
Jeg tror at I vil laere meget af at kunne bygge og deploye udenfor Eclipse.

Jeg kunne emaile en ZIP med alt til at builde og koere mit eksempel.
Avatar billede juliemusen Nybegynder
27. maj 2012 - 12:38 #25
Hejsa Arne.

Det vil jeg meget meget gerne, hvis du har tid til det på et tidspunkt. min mail adresse skulle gerne stå under min profil.

Mange tak for det :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester