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 :

Telecharger un fichier généré


Sujet :

GWT et Vaadin Java

  1. #1
    Membre expérimenté Avatar de Torg666
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 230
    Par défaut Telecharger un fichier généré
    Bonjour,
    Sur mon appli GWT on me demande de pouvoir importer des information cote client (fichier XML).
    Dans un premier temps, je pensé (naïvement) pouvoir faire cela via un appel RPC classique...
    Donc là j'arrive à generer mon fichier XML cote serveur (facilement même).

    Mais voila, pour permettre au client de pouvoir l enregistrer il faut que je lui envoi...
    J'ai trouvé cette discussion.

    Mais n'ayant jamais vraiment fait de servlet (a part avec GWT et cypal) je n'arrive pas a faire un code qui fonctionne en me basant sur cet exemple.
    Apparement, j ai un souci avec la class Attachement. De plus il y a un variable r qui sort un peu de nul part....
    Lorsque je le lance malgré tout, le shell GWT genere un erreur:
    " The development shell servlet received a request to generate a host page for module 'FileServlet' "
    Donc il me manque quelque chose... mais quoi?

    Code de mes tests:
    Entrypoint:
    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
     
    package application.client;
     
    import com.google.gwt.core.client.EntryPoint;
    import com.google.gwt.user.client.ui.Button;
    import com.google.gwt.user.client.ui.ClickListener;
    import com.google.gwt.user.client.ui.Frame;
    import com.google.gwt.user.client.ui.RootPanel;
    import com.google.gwt.user.client.ui.Widget;
     
    public class Application implements EntryPoint {
     
    	private Frame frame;
    	private Button clickMeButton;
    	public void onModuleLoad() {
    		RootPanel rootPanel = RootPanel.get();
    		clickMeButton = new Button();
    		rootPanel.add(clickMeButton);
    		clickMeButton.setText("Télécharger");
    		clickMeButton.addClickListener(new ClickListener() {
    			public void onClick(Widget sender) {
    				getFrame().setUrl("/FileServlet?params=2");
    			}
    		});
    		frame = new Frame("");
    		rootPanel.add(frame, 17, 122);
    		frame.setSize("465px", "154px");
    	}
    	public Frame getFrame() {
    		return frame;
    	}
    }
    la servlet:
    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
     
    package application.server;
     
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    //heu la je suis pas certain
    import com.sun.xml.internal.ws.api.message.Attachment;
     
    /**
     * Servlet implementation class OpenAttachment
     */
    public class OpenAttachment extends HttpServlet {
    	private static final long serialVersionUID = 1L;
     
        /**
         * @see HttpServlet#HttpServlet()
         */
        public OpenAttachment() {
            super();
            // TODO Auto-generated constructor stub
        }
     
    	/**
             * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
             */
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		int id = Integer.parseInt(request.getParameter("id"));
     
    		ServletOutputStream out = response.getOutputStream(); 
    		// il sort d ou ce r
    		Attachment a = r.getAttachment(id);
    		response.setContentType(a.getContentType()); 
    	        response.setHeader("Content-Disposition", "attachment;filename=\"" + a.getFilename() + "\"");
     
    	        out.write(a.getData());
    		out.close();
     
    	}
     
    	/**
             * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
             */
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// TODO Auto-generated method stub
    	}
     
    }
    et enfin Application.gwt.xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <module>
    	<inherits name="com.google.gwt.user.User"/>
    	<entry-point class="application.client.Application"/>
      	<inherits name="com.google.gwt.user.theme.standard.Standard"/>
    	<servlet class="application.server.ServiceImpl" path="/Serivce"/>
    	<servlet path='/OpenAttachment' class='application.server.OpenAttachment'/>
    </module>
    Merci d avance!

  2. #2
    Rédacteur
    Avatar de benwit
    Profil pro
    dev
    Inscrit en
    Septembre 2004
    Messages
    1 676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 676
    Par défaut
    Qu'est ce que tu veux faire ?
    Tu généres un fichier XML côté serveur qui doit être télécharger par le client ?

    Pourquoi tu ne génères pas ton fichier dans ton dossier public et tu envois au client l'url de ce fichier. Il suffira à l'utilisateur de cliquer sur ce lien pour télécharger le dit fichier.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mars 2009
    Messages : 36
    Par défaut
    N'oubli pas que ta Servlet doit être déclarée dans le web.xml (war/WEB-INF/web.xml)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
       <servlet>
              <servlet-name>OpenAttachment</servlet-name>
              <servlet-class>application.OpenAttachment</servlet-class>
        </servlet>
        <servlet-mapping>
              <servlet-name>OpenAttachment</servlet-name>
              <url-pattern>/FileServlet</url-pattern>
        </servlet-mapping>

  4. #4
    Membre expérimenté Avatar de Torg666
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 230
    Par défaut
    Actuellement, mon 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
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <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">
    	<display-name>
    	Application
    	</display-name>
    	<servlet>
    		<servlet-name>
    		Service
    		</servlet-name>
    		<servlet-class>
    		application.server.ServiceImpl
    		</servlet-class>
    	</servlet>
     
    	<servlet>
    		<description>
    		</description>
    		<display-name>
    		OpenAttachment
    		</display-name>
    		<servlet-name>
    		OpenAttachment
    		</servlet-name>
    		<servlet-class>
    		application.server.OpenAttachment
    		</servlet-class>
    //Ca pose problème, il me le souligne en rouge
                              <url-pattern>
    		/FileServlet
    		</url-pattern>
    	</servlet>
     
    	<servlet-mapping>
    		<servlet-name>
    		Service
    		</servlet-name>
    		<url-pattern>
    		/Service
    		</url-pattern>
    	</servlet-mapping>
    	<servlet-mapping>
    		<servlet-name>
    		OpenAttachment
    		</servlet-name>
    		<url-pattern>
    		/OpenAttachment
    		</url-pattern>
    	</servlet-mapping>
    	<welcome-file-list>
    		<welcome-file>
    		index.html
    		</welcome-file>
    		<welcome-file>
    		index.htm
    		</welcome-file>
    		<welcome-file>
    		index.jsp
    		</welcome-file>
    		<welcome-file>
    		default.html
    		</welcome-file>
    		<welcome-file>
    		default.htm
    		</welcome-file>
    		<welcome-file>
    		default.jsp
    		</welcome-file>
    	</welcome-file-list>
    </web-app>
    C'est quoi exactement ce FileServlet qu'il me demande?

    Ce que je voudrais faire exactement:
    1- ouvrir une fenetre "enregistrer sous" pour permettre à l utilisateur d'enregistrer le fichier pour qu'il me donne le nom du fichier + ca destination de telechargement.
    2- generer le fichier xml en fonction des criteres choisi par l utilisateur coté serveur (ca j y arrive).
    3- lancer le telechargement du fichier.

    Actuellement en faisant l exemple de la discution il me manque la declaration de la variable r, je vois pas du tout à quoi elle correspond... si quelqu'un peu eclairer ma lanterne a ce sujet. J'arrive pas non plus a trouver la class Attachment dans la Javadoc ce qui me facilite pas la tache.

    Faudra-t-il pas importer des librairie specifique aux servlet et notament ce FileServlet?

    merci d'avance!

  5. #5
    Membre éclairé

    Inscrit en
    Août 2002
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Août 2002
    Messages : 302
    Par défaut
    Bonjour,
    J'ai rencontré ce problème il y'a quelque temps, je voulais en cliquant sur un lien forcer un download d'un fichier pdf sans qu'il soit affiché par le plugin adobe du browser.
    J'ai développé cette servlet
    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
    public class HelpServlet extends BaseRemoteServiceServlet {
     
    	/** The Spring context. */
    	// private ApplicationContext springContext;
    	@Override
    	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
    			throws ServletException, IOException {
     
     
    				try {
    			          InputStream is = new FileInputStream(getServletContext().getRealPath("/Help.pdf"));
    			          OutputStream os = resp.getOutputStream();
    			          resp.setContentType("application/force-download");
    			          resp.setHeader("Content-Disposition","attachment;filename=Help.pdf");
    			          int count;
    			          byte buf[] = new byte[4096];
    			          while ((count = is.read(buf)) > -1)
    			                 os.write(buf, 0, count);
    			          is.close();
    			         os.close();
    			     } catch (Exception e) {
    			          // Y a un problème.
    			     }
     
     
    	}
    }
    Mon mapping dans mon web.xml est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <servlet-mapping>
    		<servlet-name> com.monapplication.server.help.HelpServlet</servlet-name>
    		<url-pattern>/HelpServlet</url-pattern>
    	</servlet-mapping>
    Dans la partie cliente je fais appel à la servlet en question via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    com.google.gwt.user.client.Window.Location.assign(GWT
    						.getHostPageBaseURL()
    						+ "/HelpServlet");
    Dans ton cas il faudrait passer des paramètres au niveau de l'url d'appel et faire le traitement adequat dans la servlet pour génerer ton fichier dans le dossier public.
    PS : Il se pourrait que cette méthode ne fonctionne pas en mode hosted ou dev mode mais quand tu génére ton war et tu le déploies sur ton serveur d'application ça marchera.

  6. #6
    Membre expérimenté Avatar de Torg666
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 230
    Par défaut
    Bon en m'inspirant ici, j'ai reussi a faire ce que je voulais, enfin presque.

    J'ai 2 soucis:
    - le plus important c'est qu'il semble rafraichir la fenetre du browser (comme un appui sur F5), ce qu'il faut que j'evite car cela me ramene sur ma fenetre de logging... et ensuite ca me mets le bordel dans mon appli.
    - faudrai aussi que je lui passe le nom du fichier plutot qu'un nom fixe et cela j'y arrive pas:
    la servlet:
    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
     
    package sncfinfogerance.server;
     
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.Closeable;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
     
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    @SuppressWarnings("serial")
    public class FileServlet extends HttpServlet {
     
    	private static final int DEFAULT_BUFFER_SIZE = 10240; // 10KB.
    	private String filePath = null;
     
    	public void init() throws ServletException {
    		this.filePath = "./files";
        }
        protected void doGet(HttpServletRequest request, HttpServletResponse response, String fichier) throws ServletException, IOException {
            String requestedFile = request.getPathInfo();
            if (requestedFile == null) {
                response.sendError(HttpServletResponse.SC_NOT_FOUND); // 404.
                return;
            }
            File file = new File(filePath, fichier);
            if (!file.exists()) {
                response.sendError(HttpServletResponse.SC_NOT_FOUND); // 404.
                return;
            }
            String contentType = getServletContext().getMimeType(file.getName());
            if (contentType == null) {
                contentType = "application/octet-stream";
            }
            response.reset();
            response.setBufferSize(DEFAULT_BUFFER_SIZE);
            response.setContentType(contentType);
            response.setContentLength((int)file.length());
            response.setHeader("Content-Disposition", "attachment; filename=\"" + file.getName() + "\"");
            BufferedInputStream input = null;
            BufferedOutputStream output = null;
            try {
                input = new BufferedInputStream(new FileInputStream(file), DEFAULT_BUFFER_SIZE);
                output = new BufferedOutputStream(response.getOutputStream(), DEFAULT_BUFFER_SIZE);
                byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
                int length;
                while ((length = input.read(buffer)) > 0) {
                    output.write(buffer, 0, length);
                }
            } finally {
                close(output);
                close(input);
            }
        }
        private static void close(Closeable resource) {
            if (resource != null) {
                try {
                    resource.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
     
    }
    Sont lancement une fois le fichier genere:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String fichier = "import.xml";
    com.google.gwt.user.client.Window.Location.assign(GWT.getHostPageBaseURL()+ "/FileServlet?name=" + fichier);
    En gros comment passe un nom de fichier a telecharger a ma servlet?
    Merci d'avance


  7. #7
    Membre expérimenté Avatar de Torg666
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 230
    Par défaut
    Bon j'ai résolu le souci du rafraichissement (en fait j avais la solution...)

    Par contre j ai toujours pas resolu le probleme de passer en parametre le nom du fichier generer...

    Mes sources:
    - le .gwt.xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <module>
    	<inherits name="com.google.gwt.user.User"/>
    	<inherits name="com.google.gwt.core.Core"/>
    	<inherits name="com.gwtext.GwtExt" />
    	<inherits name="com.google.gwt.maps.GoogleMaps" />
    	<entry-point class="sncfinfogerance.client.Infogerance"/>
    	<inherits name="com.google.gwt.user.theme.standard.Standard"/>
    	<servlet class="sncfinfogerance.server.InfogeranceRemoteServiceImpl" path="/InfogeranceRemoteService"/>
    	<servlet class="sncfinfogerance.server.FileServlet" path="/FileServlet"/>
    	<script	src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAdqyf80XkAHrmbJ66ls7KihTMhLgSGfUGk1_rPiYsBOTfkJuHoBTnUif4PIkH53OZUA1RpZHyk_X_eQ" />	
    </module>
    - La servlet:
    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
     
    package sncfinfogerance.server;
     
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.Closeable;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
     
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    @SuppressWarnings("serial")
    public class FileServlet extends HttpServlet {
     
    	private static final int DEFAULT_BUFFER_SIZE = 10240;
    	private String filePath = null;
     
    	public void init() throws ServletException {
    		this.filePath = "./files";
    	}
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		String requestedFile = request.getPathInfo();
    		if (requestedFile == null) {
    			response.sendError(HttpServletResponse.SC_NOT_FOUND); // 404.
    			return;
    		}
    		File file = new File(filePath, "import.xml");
    		if (!file.exists()) {
    			response.sendError(HttpServletResponse.SC_NOT_FOUND); // 404.
    			return;
    		}
    		String contentType = getServletContext().getMimeType(file.getName());
    		if (contentType == null) {
    			contentType = "application/octet-stream";
    		}
    		response.reset();
    		response.setBufferSize(DEFAULT_BUFFER_SIZE);
    		response.setContentType(contentType);
    		response.setContentLength((int)file.length());
    		response.setHeader("Content-Disposition", "attachment; filename=\"" + file.getName() + "\"");
    		BufferedInputStream input = null;
    		BufferedOutputStream output = null;
    		try {
    			input = new BufferedInputStream(new FileInputStream(file), DEFAULT_BUFFER_SIZE);
    			output = new BufferedOutputStream(response.getOutputStream(), DEFAULT_BUFFER_SIZE);
    			byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
    			int length;
    			while ((length = input.read(buffer)) > 0) {
    				output.write(buffer, 0, length);
    			}
    		} finally {
    			close(output);
    			close(input);
    		}
    	}
    	private static void close(Closeable resource) {
    		if (resource != null) {
    			try {
    				resource.close();
    			} catch (IOException ioe) {
    				InfogeranceRemoteServiceImpl.getLogError().severe("FileServlet: Close: " + resource.toString() + " ,\n" + ioe.toString());
    			}
    		}
    	}
    }
    - le 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
    45
    46
    47
     
    <?xml version="1.0" encoding="UTF-8"?>
    <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">
    	<display-name>SNCFInfogerance(WebContent)</display-name>
    	<servlet>
    		<servlet-name>InfogeranceRemoteService</servlet-name>
    		<servlet-class>sncfinfogerance.server.InfogeranceRemoteServiceImpl</servlet-class>
    	</servlet>
    	<servlet>
    		<description>
    		Import de fichier
    		</description>
    		<display-name>
    		FileServlet
    		</display-name>
    		<servlet-name>
    		FileServlet
    		</servlet-name>
    		<servlet-class>
    		sncfinfogerance.server.FileServlet
    		</servlet-class>
    	</servlet>
    	<servlet-mapping>
    		<servlet-name>
    		InfogeranceRemoteService
    		</servlet-name>
    		<url-pattern>
    		/InfogeranceRemoteService
    		</url-pattern>
    	</servlet-mapping>
    	<servlet-mapping>
    		<servlet-name>
    		FileServlet
    		</servlet-name>
    		<url-pattern>
    		/FileServlet
    		</url-pattern>
    	</servlet-mapping>
    	<welcome-file-list>
    		<welcome-file>Infogerance.html</welcome-file>
    		<welcome-file>index.htm</welcome-file>
    		<welcome-file>index.jsp</welcome-file>
    		<welcome-file>default.html</welcome-file>
    		<welcome-file>default.htm</welcome-file>
    		<welcome-file>default.jsp</welcome-file>
    	</welcome-file-list>
    </web-app>
    - la partie de code qui la lance:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    //...
    GestHistorique.this.getImportFrame(GWT.getHostPageBaseURL()+ "/FileServlet");
    //...
     
    public Frame getImportFrame(String url){
    		Frame frame = new Frame("");
    		frame.setPixelSize(0, 0);
    		frame.setUrl(url);
    		frame.setStyleName(".gwt-UnDisplay");
    		RootPanel rootPanel = RootPanel.get();
    		rootPanel.add(frame);
    		return frame;
    	}
    - le css pour le style de la frame ( dans le .html du dossier public):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    .UnDisplay{
    	display: none;
    }
    Me reste plus qu'a passer un nom de fichier a ma servlet... la je seche un peu?

  8. #8
    Membre expérimenté Avatar de Torg666
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 230
    Par défaut
    J'ai trouver, enfin c'était simple...

    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
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
     
    package sncfinfogerance.server;
     
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.Closeable;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
     
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    @SuppressWarnings("serial")
    public class FileServlet extends HttpServlet {
     
    	private static final int DEFAULT_BUFFER_SIZE = 10240;
    	private String filePath = null;
    	private String xmlFile = null;
     
    	public void init() throws ServletException {
    		this.setFilePath("./files");
    	}
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		String requestedFile = request.getPathInfo();
    		this.setXmlFile(request.getParameter("file"));
    		if (requestedFile == null) {
    			response.sendError(HttpServletResponse.SC_NOT_FOUND);
    			return;
    		}
    		File file = new File(this.getFilePath(), this.getXmlFile());
    		if (!file.exists()) {
    			response.sendError(HttpServletResponse.SC_NOT_FOUND);
    			return;
    		}
    		String contentType = getServletContext().getMimeType(file.getName());
    		if (contentType == null) {
    			contentType = "application/octet-stream";
    		}
    		response.reset();
    		response.setBufferSize(DEFAULT_BUFFER_SIZE);
    		response.setContentType(contentType);
    		response.setContentLength((int)file.length());
    		response.setHeader("Content-Disposition", "attachment; filename=\"" + file.getName() + "\"");
    		BufferedInputStream input = null;
    		BufferedOutputStream output = null;
    		try {
    			input = new BufferedInputStream(new FileInputStream(file), DEFAULT_BUFFER_SIZE);
    			output = new BufferedOutputStream(response.getOutputStream(), DEFAULT_BUFFER_SIZE);
    			byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
    			int length;
    			while ((length = input.read(buffer)) > 0) {
    				output.write(buffer, 0, length);
    			}
    		} finally {
    			close(output);
    			close(input);
    		}
    	}
    	private static void close(Closeable resource) {
    		if (resource != null) {
    			try {
    				resource.close();
    			} catch (IOException ioe) {
    				InfogeranceRemoteServiceImpl.getLogError().severe("FileServlet: Close: " + resource.toString() + " ,\n" + ioe.toString());
    			}
    		}
    	}
    	public String getFilePath() {
    		return filePath;
    	}
    	public void setFilePath(String filePath) {
    		this.filePath = filePath;
    	}
    	public String getXmlFile() {
    		return xmlFile;
    	}
    	public void setXmlFile(String xmlFile) {
    		this.xmlFile = xmlFile;
    	}
    }
    et pour l'appel de la servlet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    GWT.getHostPageBaseURL()+ "/FileServlet?file=abc.xml")

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Wget - télécharger des fichiers non-html
    Par narmataru dans le forum Réseau
    Réponses: 10
    Dernier message: 14/07/2018, 15h20
  2. [http] Accéder à un fichier généré par un serveur
    Par Seiya dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 27/02/2007, 18h10
  3. telecharger un fichier
    Par mokha8581 dans le forum Langage
    Réponses: 2
    Dernier message: 10/09/2005, 14h15
  4. Exploitation de fichiers générés par un journal
    Par Brice Yao dans le forum Bases de données
    Réponses: 2
    Dernier message: 27/06/2005, 16h19
  5. [VB6] Télécharger un fichier avec VB 6
    Par lechevbt dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 18/02/2004, 20h05

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