IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GWT et Vaadin Java Discussion :

Application GWT et servlet introuvable


Sujet :

GWT et Vaadin Java

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Mai 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de recherche

    Informations forums :
    Inscription : Mai 2015
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Application GWT et servlet introuvable
    Bonjour à tous !

    Je suis actuellement en train de coder une application web en java (+ GWT) pour mon institut de recherche. A la base, je développe principalement en Matlab (pour mes projets de recherche) et en python (pour des applications un peu plus carré). Et je voulais rendre certaines de mes applications disponibles en ligne afin de faciliter la vie de certains de mes collègues. Je me suis mis au java il y a deux mois par l'intermédiaire de GWT et du petit tutorial qui est proposé sur le site officiel. De cette manière j'ai réussi à coder une web app pas trop dégueulasse. L'application en soit n'est pas très complexe et elle me sert pour me faire la main en java.
    Le but de cette dernière est de proposer la création d'un fichier xml proposant des métadonnées pour des campagnes de recherche aéroportées. Elle est composé d'une partie client (très jolie et tout) et de deux servlets, l'un pour uploader un fichier xml vers le serveur (et qui sera ensuite lu pour afficher les métadonnées à l'écran), l'autre pour sauvegarder un fichier xml à parti de ce que l'utilisateur aura renseigné et pour le downloader.
    J'utilise Eclipse 4.4 et le Google web toolkit plugin. En GWT Super Dev Mode, pas de soucis, tout fonctionne comme il faut, tant la partie client que les servlets. J'ai ensuite installer Apache Tomcat 7 et Jetty sur mon portable (Ubuntu 14.04) pour tester tout ça en local, tout en m'affranchissant du pc du boulot. J'ai compilé mon code, compressé le dossier war en fichier .war et je l'ai ensuite déployé sur Tomcat et Jetty. L'un et l'autre font tourner la partie client sans problème, mais impossible d'accéder aux servlets, en testant la fonction d'upload, dont j'envoyais le résultat dans un "TextArea", j'ai eu droit à un "Etat HTTP 404 - upload ... La ressource demandée n'est pas disponible" avec Jetty, et à peu de chose près la même chose avec Tomcat.
    Après plusieurs heures de recherche sur le net, je n'ai pas trouvé ce qui pouvait bien cloché dans mon code .... J'ai vraiment l'impression de ne pas avoir fait d'erreur ... Je pense que c'est le fichier web.xml qui pose problème, mais même en annotant le servlet (@webquelquechose(url, name, etc)) ça ne fonctionne pas ...

    Voici la partie de mon code client pour appeler le servlet d'upload:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    final DialogBox myUploadDialog = new DialogBox();
    myUploadDialog.setGlassEnabled(true);
    final VerticalPanel vpanel2 = new VerticalPanel();
    myUploadDialog.add(vpanel2);
    final HorizontalPanel hpanel = new HorizontalPanel();
    vpanel2.add(hpanel);
    vpanel2.getElement().setAttribute("style", "margin-left: 5px !important; margin-top: 10px !important; margin-right: 10px !important;");
    Image xImage = new Image("images/open_icon.png");
    xImage.setPixelSize(75, 75);
    hpanel.add(xImage);
    final VerticalPanel panel = new VerticalPanel();
    hpanel.add(panel);
    panel.getElement().setAttribute("style", "margin-right:20px !important;");
    final Label label = new Label("Please, select the file you want to modify");
    label.getElement().setAttribute("style", "margin-right:20px !important; margin-bottom:30px !important; "
    		                          + "margin-top:10px !important;");
    panel.add(label);
    final FileUpload myFileUpload = new FileUpload();
    myFileUpload.setName("uploadFormElement");
    myFileUpload.getElement().setId("uploadFormElement");
    myFileUpload.getElement().setId("myFile");
    panel.add(myFileUpload);
    final FormPanel myUploadForm = new FormPanel();
    myUploadForm.setAction("/upload");
    myUploadForm.setEncoding(FormPanel.ENCODING_MULTIPART);
    myUploadForm.setMethod(FormPanel.METHOD_POST);
    myUploadForm.addSubmitHandler(new FormPanel.SubmitHandler() {
    	@Override
    	public void onSubmit(SubmitEvent event) {
    		 if (myFileUpload.getFilename().length() == 0) {
    			Window.alert("Please, select a file.");
    			event.cancel();
    		}		 
    		else {
    			myFileName = myFileUpload.getFilename();
    		}        
    	}
    });
    myUploadForm.addSubmitCompleteHandler(new FormPanel.SubmitCompleteHandler() {
    	@Override
    	public void onSubmitComplete(SubmitCompleteEvent event) {
    		myUploadDialog.hide();
    		String ret = event.getResults();
    		readXml(ret);
    	}			
    });		
    final Button submitButton = new Button("Ok", new ClickHandler() {			
    	@Override
    	public void onClick(ClickEvent event) {
    		myUploadForm.submit();
    	}
    });
    final Button cancelButton = new Button("Cancel", new ClickHandler() {			
    	@Override
    	public void onClick(ClickEvent event) {
    		myUploadDialog.hide();			
    	}
    });
    myUploadForm.add(vpanel2);
    HorizontalPanel myHPanel = new HorizontalPanel();
    myHPanel.add(submitButton);
    myHPanel.add(cancelButton);
    submitButton.getElement().setAttribute("style", "margin-left:40px !important; font-family: DroidSansFallback "
    		    		+ "!important; font-weight: bold !important;");
    cancelButton.getElement().setAttribute("style", "margin-left:65px !important; font-family: DroidSansFallback "
    		    		+ "!important; font-weight: bold !important;");
    myHPanel.getElement().setAttribute("style", "margin-top:30px !important; margin-bottom:20px !important;");
    panel.add(myHPanel);
    myUploadDialog.add(myUploadForm);
    myUploadDialog.setSize( "130px", "180px" );
    myUploadDialog.setModal(true);
    myUploadDialog.center();
    myUploadDialog.setStyleName("myUploadBox");
    Voici le serlet d'upload:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    package com.eufar.asmm.server;
     
    import java.io.IOException;
    import java.util.List;
    import java.util.Iterator;
     
    import javax.servlet.Servlet;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    import org.apache.commons.fileupload.FileItem;
    import org.apache.commons.fileupload.FileItemFactory;
    import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    import org.apache.commons.fileupload.servlet.ServletFileUpload;
     
    @SuppressWarnings("hiding")
    public class UploadFunction<FileItem> extends HttpServlet implements Servlet {
     
    	private static final long serialVersionUID = 1L;
     
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		response.setContentType("text/html;charset=UTF-8");
     
    		@SuppressWarnings("unused")
    		boolean isMultipart = ServletFileUpload.isMultipartContent(request);
     
    		FileItemFactory factory = new DiskFileItemFactory();
    		ServletFileUpload upload = new ServletFileUpload(factory);
     
    		try {
    			List items = upload.parseRequest(request);
    			Iterator iter = items.iterator();
    			while(iter.hasNext()){
    				Object obj = iter.next();
    				if(obj == null) continue;
    		        org.apache.commons.fileupload.FileItem item = (org.apache.commons.fileupload.FileItem)obj;
    		        if(item.isFormField()){
    		        	String name = item.getName();
    		        	String value = "";
    		            if(name.compareTo("textBoxFormElement")==0){
    		                value = item.getString();		                
    		            } 
    		            else {
    		                value = item.getString();		                
    		            }
    		            response.getWriter().write(name + "=" + value + "\n");
    		         } 
    		         else {
    	                byte[] fileContents = item.get();
    	                String message = new String(fileContents);
    	                response.setCharacterEncoding("UTF-8");
    	                response.setContentType("text/html");
    	        		response.getWriter().write(message);	        		
    		         }
    			}		   
    		} catch (Exception ex) {			
    			response.getWriter().write("ERROR:" + ex.getMessage());
    		}
    	}	
    }
    Et enfin le fichier web.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
                  http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
             version="2.5"
             xmlns="http://java.sun.com/xml/ns/javaee">
     
      <!-- Servlets -->
      <servlet>
    	<servlet-name>DownloadFunction</servlet-name>
    	<servlet-class>com.eufar.asmm.server.DownloadFunction</servlet-class>
      </servlet>
     
      <servlet-mapping>
    	<servlet-name>DownloadFunction</servlet-name>
    	<url-pattern>DownloadFunction</url-pattern>
      </servlet-mapping>
     
      <servlet>
    	<servlet-name>UploadFunction</servlet-name>
    	<servlet-class>com.eufar.asmm.server.UploadFunction</servlet-class>
      </servlet>
     
      <servlet-mapping>
    	<servlet-name>UploadFunction</servlet-name>
    	<url-pattern>/upload</url-pattern>
      </servlet-mapping>
     
      <servlet>
        <servlet-name>greetServlet</servlet-name>
        <servlet-class>com.eufar.asmm.server.GreetingServiceImpl</servlet-class>
      </servlet>
     
      <servlet-mapping>
        <servlet-name>greetServlet</servlet-name>
        <url-pattern>/asmm_eufar/greet</url-pattern>
      </servlet-mapping>
     
      <!-- Default page to serve -->
      <welcome-file-list>
        <welcome-file>Asmm_eufar.html</welcome-file>
      </welcome-file-list>
     
    </web-app>
    C'est à peu près tout. N'hésitez pas à me demander autre chose. Au pire je peux poster le code entier compilé et les sources sur mon compte dropbox, si nécessaire.

    Merci de votre aide et à bientôt

    Olivier

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Comment tu déploies ton application ?
    Je pense qu'elle ne doit pas être déployée en ROOT mais avec un Context-Path spécifique, ce qui change l'URI finale de ton application.


    a++

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Mai 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de recherche

    Informations forums :
    Inscription : Mai 2015
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Salut !

    Merci pour ta réponse !
    Je copie le fichier .war dans le dossier "webapps" de Tomcat, et j'ai préféré éviter de le mettre dans le dossier "ROOT" (comme je ne sais pas encore à quoi il sert ... autant ne pas faire de connerie). Après Tomcat fait le nécessaire pour le décompresser et je peux accéder à l'application par l'URL habituelle : http://localhos:8080/asmm/asmm/asmm.html. (oui il y a deux asmm dans l'arborescence ....)

    Il y a certaines choses que je n'ai surement pas encore saisi entre les servlets et GWT ... Comment le lien est-il fait entre l'appel du servlet (myUploadForm.setAction("/upload") et le fichier web.xml ? Est-ce juste une reconnaissance d'URL (si les deux concorde, alors on est redirigé vers le servlet correspondant).

    Est-ce que cela peut être un problème de sécurité et donc de droits ?

    Olivier

Discussions similaires

  1. Réponses: 1
    Dernier message: 31/10/2008, 17h58
  2. Modularité des applications GWT
    Par jcfij dans le forum GWT et Vaadin
    Réponses: 1
    Dernier message: 25/09/2007, 13h52
  3. Servlet introuvable avec Tomcat
    Par benoit64 dans le forum Tomcat et TomEE
    Réponses: 1
    Dernier message: 29/09/2006, 12h24
  4. [Debutant(e)]java.servlet introuvable
    Par roninou dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 07/02/2006, 13h20
  5. [Tomcat],[Servlet] servlet introuvable
    Par ced2004 dans le forum Tomcat et TomEE
    Réponses: 11
    Dernier message: 03/01/2006, 15h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo