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

Servlets/JSP Java Discussion :

affichage dynamique et périodique d'images dans une jsp à partir d'une servlet


Sujet :

Servlets/JSP Java

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2008
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Décembre 2008
    Messages : 233
    Points : 73
    Points
    73
    Par défaut affichage dynamique et périodique d'images dans une jsp à partir d'une servlet
    bonsoir, je débute avec tomcat et les servlets..et voila la galère commence!!!
    dans un autre post ils m'ont affirmé la faisabilté de ce que je compte faire mais en pratique, du coup je me bloque

    un logiciel qui fait des captures ecran automatiquement chaque n secondes, sauvegarde ces captures dans un repertoire au choix en les attribuant comme nom date heure ou numero

    ce que je veux réaliser est d'afficher ces captures dans mon navigateur au fur et a mesure de leurs création (une fois une caputre est faite -> elle s'affiche)

    le problème réside:
    comment détecter q'une nouvelle capture est ajouté dans le repertoire?
    et dans la page jsp comment faire un appel périodique a ma servlet

    j'ai trouvé plusieurs tutoriaux, mais tous ciblent des images bien définies qui n'est pas le cas pour moi

    voila mon essai:

    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    package com.pfe.slide;
    
    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 java.net.URLDecoder;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * The Image servlet for serving from absolute path.
     * @author BalusC
     * @link http://balusc.blogspot.com/2007/04/imageservlet.html
     */
    public class SlideServlet extends HttpServlet {
    
        // Constants ----------------------------------------------------------------------------------
    
        private static final int DEFAULT_BUFFER_SIZE = 10240; // 10KB.
    
        // Properties ---------------------------------------------------------------------------------
    
        private String imagePath;
    
        // Actions ------------------------------------------------------------------------------------
    
        public void init() throws ServletException {
    
            // Define base path somehow. You can define it as init-param of the servlet.
            this.imagePath = "\images";
    
            // In a Windows environment with the Applicationserver running on the
            // c: volume, the above path is exactly the same as "c:\images".
            // In UNIX, it is just straightforward "/images".
            // If you have stored files in the WebContent of a WAR, for example in the
            // "/WEB-INF/images" folder, then you can retrieve the absolute path by:
            // this.imagePath = getServletContext().getRealPath("/WEB-INF/images");
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException
        {
            // Get requested image by path info.
            String requestedImage = request.getPathInfo();
    // je pense que cette ligne est inutile puisque je n'ai pas une image précise à récupérer
    
            // Check if file name is actually supplied to the request URI.
            if (requestedImage == null) {
                // Do your thing if the image is not supplied to the request URI.
                // Throw an exception, or send 404, or show default/warning image, or just ignore it.
                response.sendError(HttpServletResponse.SC_NOT_FOUND); // 404.
                return;
            }
    
            // Decode the file name (might contain spaces and on) and prepare file object.
            File image = new File(imagePath, URLDecoder.decode(requestedImage, "UTF-8"));
    
            // Check if file actually exists in filesystem.
            if (!image.exists()) {
                // Do your thing if the file appears to be non-existing.
                // Throw an exception, or send 404, or show default/warning image, or just ignore it.
                //response.sendError(HttpServletResponse.SC_NOT_FOUND); // 404
            	image = new File(imagePath, "default.gif");
    
                return;
            }
    
            // Get content type by filename.
            String contentType = getServletContext().getMimeType(image.getName());
    
            // Check if file is actually an image (avoid download of other files by hackers!).
            // For all content types, see: http://www.w3schools.com/media/media_mimeref.asp
            if (contentType == null || !contentType.startsWith("image")) {
                // Do your thing if the file appears not being a real image.
                // Throw an exception, or send 404, or show default/warning image, or just ignore it.
                response.sendError(HttpServletResponse.SC_NOT_FOUND); // 404.
                return;
            }
    
            // Init servlet response.
            response.reset();
            response.setBufferSize(DEFAULT_BUFFER_SIZE);
            response.setContentType(contentType);
            response.setHeader("Content-Length", String.valueOf(image.length()));
            response.setHeader("Content-Disposition", "inline; filename=\"" + image.getName() + "\"");
    
            // Prepare streams.
            BufferedInputStream input = null;
            BufferedOutputStream output = null;
    
            try {
                // Open streams.
                input = new BufferedInputStream(new FileInputStream(image), DEFAULT_BUFFER_SIZE);
                output = new BufferedOutputStream(response.getOutputStream(), DEFAULT_BUFFER_SIZE);
    
                // Write file contents to response.
                byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
                int length;
                while ((length = input.read(buffer)) > 0) {
                    output.write(buffer, 0, length);
                }
            } finally {
                // Gently close streams.
                close(output);
                close(input);
            }
        }
    
        // Helpers (can be refactored to public utility class) ----------------------------------------
    
        private static void close(Closeable resource) {
            if (resource != null) {
                try {
                    resource.close();
                } catch (IOException e) {
                    // Do your thing with the exception. Print it, log it or mail it.
                    e.printStackTrace();
                }
            }
        }
    
    
    }
    page jsp:
    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
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
    Test
    <br>
    <img src=?????????/>
     
    </body>
    </html>

    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
    <!DOCTYPE web-app PUBLIC
      '-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN'
      'http://java.sun.com/dtd/web-app_2_3.dtd'>
    <web-app>
      <servlet>
        <servlet-name>SlideServlet</servlet-name>
        <servlet-class>com.pfe.slide.SlideServlet</servlet-class>
      </servlet>
     
      <servlet-mapping>
        <servlet-name>SlideServlet</servlet-name>
        <url-pattern>/SlideServlet</url-pattern>
      </servlet-mapping>
    </web-app>

    pouvez vous m'aider??

    merci d'avance

  2. #2
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    Bonjour,

    Il faut partir avec l'idée qu'on récupère une image (ressource) avec une url fixe.

    Ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="http://<MyServer>/<MyContexte>/SlideServlet/lastPicture" >
    SlideServlet n'aura plus qu'à déterminer la dernière image enregistrée et la renvoyer au navigateur. Attention!! Indique grâce aux entêtes de ne pas mettre en cache cette ressource.
    Bien le bonjour chez vous
    Jowo

  3. #3
    Membre régulier
    Inscrit en
    Décembre 2008
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Décembre 2008
    Messages : 233
    Points : 73
    Points
    73
    Par défaut
    merci pour la réponse,
    coté client il suffit d'utiliser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="http://<MyServer>/<MyContexte>/SlideServlet/lastPicture" >
    ou bien je dois utiliser AJAX??
    et coté serveur comment je peux savoir qu'une image a été ajouté à mon répertoire?

  4. #4
    Membre régulier
    Inscrit en
    Décembre 2008
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Décembre 2008
    Messages : 233
    Points : 73
    Points
    73
    Par défaut
    re
    voila mon nouvel essai de servlet contenant un thread qui veillera à controler mon repertoire d'image
    voici le code mais malheureusement n'est pas encore fonctionnel svp pouvez vous m'aider à le corriger?


    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
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    package com.pfe.slide;
     
    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.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
     
    public class SlideServlet extends HttpServlet  implements  Runnable {
     
     
     // Constants ----------------------------------------------------------------------------------
     
        private static final int DEFAULT_BUFFER_SIZE = 10240; // 10KB.
     
     
        // Properties ---------------------------------------------------------------------------------
     
        //private String imagePath;
        private Thread t;
     public static int count=0;
     public  static File lastSlide ;
        // Actions ------------------------------------------------------------------------------------
     
        public void init(ServletConfig config) throws ServletException {
     
     
            super.init(config);
            t = new Thread(this);
            t.setPriority(Thread.MIN_PRIORITY);
            t.start();
            System.out.println("deamon started");
     
         // Define base path somehow. You can define it as init-param of the servlet.
           // this.imagePath = "/images";
     
     
        }
    //------------------------------------------------------------------------------------------
     
        public void run() {
           try {
              while (true) {
                 System.out.println("deamon working...");
                 File[] list = new File("/images").listFiles();
                 if (anyUpdate(list)){
                  lastSlide= list[list.length-1];
                 }
                 Thread.sleep(2000);
              }
           } catch (InterruptedException e) {
              System.out.println("deamon stopped");}
        }
        //--------------------------------------------------------------------------
        private static boolean anyUpdate(File[] list){
     
            if (list.length>=count) 
            {count++; }
     
         return true ;
        }
        //----------------------------------------------------------------------------------
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException
        {
     
            // Init servlet response.
            response.reset();
            response.setBufferSize(DEFAULT_BUFFER_SIZE);
            response.setContentType("image/png");
            response.setHeader("Content-Length", String.valueOf(lastSlide.length()));
            response.setHeader("Content-Disposition", "inline; filename=\"" + lastSlide.getName() + "\"");
     
            // Prepare streams.
            BufferedInputStream input = null;
            BufferedOutputStream output = null;
     
            try {
                // Open streams.
                input = new BufferedInputStream(new FileInputStream(lastSlide), DEFAULT_BUFFER_SIZE);
                output = new BufferedOutputStream(response.getOutputStream(), DEFAULT_BUFFER_SIZE);
     
                // Write file contents to response.
                byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
                int length;
                while ((length = input.read(buffer)) > 0) {
                    output.write(buffer, 0, length);
                }
            } finally {
                // Gently close streams.
                close(output);
                close(input);
            }
        }
     
        // Helpers (can be refactored to public utility class) ----------------------------------------
     
        private static void close(Closeable resource) {
            if (resource != null) {
                try {
                    resource.close();
                } catch (IOException e) {
                    // Do your thing with the exception. Print it, log it or mail it.
                    e.printStackTrace();
                }
            }
        }
     
     
      }
    merci

  5. #5
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    De nombreuses imprécisions et erreur dans ta servlet.

    En plus, il me semble que l'utilisation de thread dans J2EE est fortement déconseillée voire interdite.

    Dans ton thread:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    File[] list = new File("/images").listFiles();
    ne va probablement pas fonctionner. Pour débuter, placer un chemin absolu et physique (vue du serveur). Ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    File[] list = new File("/usr/local/testRobot/images").listFiles();
    La fonction anyUpdate retourn toujours true et tu incrémentes le count de 1.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    private static boolean anyUpdate(File[] list){
       boolean update = (list.length > count);      
       count = list.length;
       return update;
    }
    Tu accèdes des variables mises en concurrence sans synchronisation.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    response.setHeader("Content-Disposition", "inline; filename=\"" + lastSlide.getName() + "\"");
    . Tu veux afficher l'image dans le navigateur ou la télécharger?

    Utiliser un tampon pour la sortie n'est pas nécessaire, elle l'est probablement déjà.

    La fin du stream, en java, est indiqué par la valeur -1 et non par 0.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      int length;
      while ((length = input.read(buffer)) > -1) {
          output.write(buffer, 0, length);
       }
       output.flush();
    Bien le bonjour chez vous
    Jowo

  6. #6
    Membre régulier
    Inscrit en
    Décembre 2008
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Décembre 2008
    Messages : 233
    Points : 73
    Points
    73
    Par défaut
    Bonjour, merci pour la réponse détaillée et toutes les corrections

    bon pour l'histoire du chemin absolu j'ai mis /images et j'entendais dire avec ça (C:\images) parceque j'ai lu:
    // In a Windows environment with the Applicationserver running on the
    // c: volume, the above path is exactly the same as "c:\images".
    // In UNIX, it is just straightforward "/images".
    // If you have stored files in the WebContent of a WAR, for example in the
    // "/WEB-INF/images" folder, then you can retrieve the absolute path by:
    // this.imagePath = getServletContext().getRealPath("/WEB-INF/images");
    vous m'avez dit que les threads coté serveur ne sont pas conseillé, existe-il alors autre alternative plus optimale per controler l'update d'un repertoire ??


    pour la synchronisation je dois ajouter le mot clé synchronized?

    le code ci dessus m'affiche un carreau (le contour de l'image )

    voila le code:
    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
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
     package com.pfe.slide;
     
    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.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
     
    public class SlideServlet extends HttpServlet  implements  Runnable {
     
     
     // Constants ----------------------------------------------------------------------------------
     
        private static final int DEFAULT_BUFFER_SIZE = 10240; // 10KB.
     
     
        // Properties ---------------------------------------------------------------------------------
     
        //private String imagePath;
        private Thread t;
     public static int count=0;
     public  static File lastSlide ;
        // Actions ------------------------------------------------------------------------------------
     
        public void init(ServletConfig config) throws ServletException {
     
     
            super.init(config);
            t = new Thread(this);
            t.setPriority(Thread.MIN_PRIORITY);
            t.start();
            System.out.println("deamon started");
     
         // Define base path somehow. You can define it as init-param of the servlet.
           // this.imagePath = "/images";
     
     
        }
    //------------------------------------------------------------------------------------------
     
        public void run() {
           try {
              while (true) {
                 System.out.println("deamon working...");
                 File[] list = new File("C:\\images").listFiles();
                 if (anyUpdate(list)){
                  lastSlide= list[list.length-1];
                 }
                 Thread.sleep(10000);
              }
           } catch (InterruptedException e) {
              System.out.println("deamon stopped");}
        }
        //--------------------------------------------------------------------------
     
        private static boolean anyUpdate(File[] list){
            boolean update = (list.length > count);      
            count = list.length;
            return update;
         }
     
        //----------------------------------------------------------------------------------
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException
        {
     
            // Init servlet response.
            response.reset();
            response.setBufferSize(DEFAULT_BUFFER_SIZE);
            response.setContentType("image/png");
            response.setHeader("Content-Length", String.valueOf(lastSlide.length()));
            response.setHeader("Content-Disposition", "inline; filename=\"" + lastSlide.getName() + "\"");
     
            // Prepare streams.
            BufferedInputStream input = null;
            BufferedOutputStream output = null;
     
            try {
                // Open streams.
                input = new BufferedInputStream(new FileInputStream(lastSlide), DEFAULT_BUFFER_SIZE);
                output = new BufferedOutputStream(response.getOutputStream(), DEFAULT_BUFFER_SIZE);
     
                // Write file contents to response.
                byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
                int length;
                while ((length = input.read(buffer)) > -1) {
                    output.write(buffer, 0, length);
                }
                output.flush();
            } finally {
                // Gently close streams.
                close(output);
                close(input);
            }
        }
     
        // Helpers (can be refactored to public utility class) ----------------------------------------
     
        private static void close(Closeable resource) {
            if (resource != null) {
                try {
                    resource.close();
                } catch (IOException e) {
                    // Do your thing with the exception. Print it, log it or mail it.
                    e.printStackTrace();
                }
            }
        }
     
     
      }
    l'exception levée:
    java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory
    at org.apache.jasper.JspC.<clinit>(JspC.java:97)
    Caused by: java.lang.ClassNotFoundException: org.apache.juli.logging.LogFactory
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 1 more
    Exception in thread "main"
    merci bien

  7. #7
    Membre régulier
    Inscrit en
    Décembre 2008
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Décembre 2008
    Messages : 233
    Points : 73
    Points
    73
    Par défaut
    Bonjour

    j'ai introduit plusieurs réctification à mon code, j'ai éliminé le thread, je vois que c'est inutile puisque j'exécute doGet à chaque appel de la servlet
    et je suis persuadée que je récupére la nouvelle image (j'ai fait le test dans une classe java à part)
    mais je comprends rien, pas d'erreur mais toujours un carreau avec une croix
    j'ai seulement ce message chaque refresh:
    org.apache.catalina.core.StandardWrapperValve invoke
    INFO: La servlet SlideServlet est actuellement indisponible
    voila le code:
    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
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    package com.pfe.slide;
     
    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 java.net.URLDecoder;
     
    //import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    public class SlideServlet  {
     
    	// Constants ----------------------------------------------------------------------------------
     
        private static final int DEFAULT_BUFFER_SIZE = 10240; // 10KB.
     
     
        // Properties ---------------------------------------------------------------------------------
    	public  static File lastSlide=null ;
        // Actions ------------------------------------------------------------------------------------
     
     
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException
        {
     
            File[] list = new File("C:\\images").listFiles();
     
            File inter;
     
            for( int i=(list.length-1); i>0; i--)
            {
              for( int j=0; j<i; j++)
              {
                if (list[j].lastModified()> list[j+1].lastModified())
                {
                  inter= list[j];
                  list[j]= list[j+1];
                  list[j+1]= inter;
                }
              }
            }     
       	lastSlide= list[list.length-1]; 
     
     
     
        	// Check if file actually exists in filesystem.
     
             if (!lastSlide.exists()) {
                 response.sendError(HttpServletResponse.SC_NOT_FOUND); // 404. !!!!!!!!
     
     
                 return;
             }
    //--------------------------------------------------------------------------------
     
             // Init servlet response.
            response.reset();
            response.setBufferSize(DEFAULT_BUFFER_SIZE);
            response.setContentType("image/png");
            response.setHeader("Content-Length", String.valueOf(lastSlide.length()));
            response.setHeader("Content-Disposition", "inline; filename=\"" + lastSlide.getName() + "\"");
     
            // Prepare streams.
            BufferedInputStream input = null;
            BufferedOutputStream output = null;
     
            try {
     
     
                // Open streams.
                input = new BufferedInputStream(new FileInputStream(lastSlide), DEFAULT_BUFFER_SIZE);
                output = new BufferedOutputStream(response.getOutputStream(), DEFAULT_BUFFER_SIZE);
     
                // Write file contents to response.
                byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
                int length;
                while ((length = input.read(buffer)) > -1) {
                    output.write(buffer, 0, length);
                }
                output.flush();
            } finally {
                // Gently close streams.
                close(output);
                close(input);
            }
        }
     
        // Helpers (can be refactored to public utility class) ----------------------------------------
     
        private static void close(Closeable resource) {
            if (resource != null) {
                try {
                    resource.close();
                } catch (IOException e) {
                    // Do your thing with the exception. Print it, log it or mail it.
                    e.printStackTrace();
                }
            }
        }
     
     
    }

    et l'appel de la servlet dans la page jsp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="http://localhost:8080/Slide/SlideServlet">

    et dans le navigateur :

  8. #8
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    Essaie d'afficher directement ton image avec le navigateur avec l'URL:
    http://localhost:8080/Slide/SlideServlet

    Ce sera plus simple pour tester...


    Supprime cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    response.setHeader("Content-Disposition", "inline; filename=\"" + lastSlide.getName() + "\"");
    Cet entête est utile seulement si tu désires que l'utilisateur puisse sauvegarder ton image avec une requête. Pourrais-tu la mettre en commentaire?
    Bien le bonjour chez vous
    Jowo

  9. #9
    Membre régulier
    Inscrit en
    Décembre 2008
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Décembre 2008
    Messages : 233
    Points : 73
    Points
    73
    Par défaut
    ça fonctionne pas, me retourne erreur 404, celle du test de l'existence

  10. #10
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    Citation Envoyé par perloutta Voir le message
    ça fonctionne pas, me retourne erreur 404, celle du test de l'existence

    Essaie d'ajouter plus d'information sur le message du status:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    response.sendError(HttpServletResponse.SC_NOT_FOUND, "Nom fichier:" + lastSlide)
    Bien le bonjour chez vous
    Jowo

  11. #11
    Membre régulier
    Inscrit en
    Décembre 2008
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Décembre 2008
    Messages : 233
    Points : 73
    Points
    73
    Par défaut
    je comprends pas une chose, tant de fois l'exécution du projet se bloque soit dans l'exécution soit en débogage, qui est le cas pour mnt

    dans les options du run cofiguration j'ai plusieurs choix pour le run, est ce le problème provient de la?
    ci joint la capture
    Images attachées Images attachées  

  12. #12
    Membre régulier
    Inscrit en
    Décembre 2008
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Décembre 2008
    Messages : 233
    Points : 73
    Points
    73
    Par défaut
    je comprends plus rien, si j'affiche l'heure,ça fonctionne, meme dans mon émulateur android (en fait mon vrai projet est un client android )dans une autre machine et se rafraichie chaque 6 secondes
    mais la problème c'est dans la servlet
    quand j'inverse le test d'existence, rien ne change toujours le meme affichage carreau avec croix rouge!!

  13. #13
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    es-tu sûr du format de ton image png ?

    As-tu mis en commentaire cette ligne ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    response.setHeader("Content-Disposition", "inline; filename=\"" + lastSlide.getName() + "\"");
    Bien le bonjour chez vous
    Jowo

  14. #14
    Membre régulier
    Inscrit en
    Décembre 2008
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Décembre 2008
    Messages : 233
    Points : 73
    Points
    73
    Par défaut
    oui, mais rien n'est changé toujours le meme carreau
    je suppose que c'est un prob d'encodage de l'image,non?

  15. #15
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    La définition de ta servlet doit être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public class SlideServlet extends HttpServlet {...
    Bien le bonjour chez vous
    Jowo

  16. #16
    Membre régulier
    Inscrit en
    Décembre 2008
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Décembre 2008
    Messages : 233
    Points : 73
    Points
    73
    Par défaut
    yessss merciiiiiii jowo mais quelle bêtise j'ai commis
    c'est fonctionnel, me retourne la dernière image sans utiliser les threads (just un tri du tableau list selon la date de dernière modifcation...)
    malheureusement ça fonctionne seulement en local
    dans l'autre machine que ce soit dans le navigateur ou dans l'émulateur j'ai pas d'image, seulement la date (comme test)

  17. #17
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    Sur la machine distante, fait un Ctrl+F5 (force un rafraichissement) avec le navigateur...
    Bien le bonjour chez vous
    Jowo

  18. #18
    Membre régulier
    Inscrit en
    Décembre 2008
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Décembre 2008
    Messages : 233
    Points : 73
    Points
    73
    Par défaut
    toujours le meme problème, ça fonctionne seulement en local, pas d'image dans l'autre machine

  19. #19
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    as-tu un message d'erreur?

    Tu essaies bien avec http://MaMachineDistante:8080/Slide/SlideServlet

    As-tu modifé l'attribut src de la balise img de ta page jsp?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="http://MaMachineDistante:8080/Slide/SlideServlet"/>
    Bien le bonjour chez vous
    Jowo

  20. #20
    Membre régulier
    Inscrit en
    Décembre 2008
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Décembre 2008
    Messages : 233
    Points : 73
    Points
    73
    Par défaut
    encore merci T génial ça fonctionne avec http://xxx.xxx.x.x:8080/Slide/SlideServlet je sais pas pourquoi ça ne marche pas avec l'appel de la jsp le hic reste dans le rafraichissement
    je dois forcer le refresh (manuellement )pour le navigateur et pour l'émulateur parce que je fait plus appel à la page jsp pour exécuter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <META http-equiv="Refresh" content="2">
    vu que j'appelle directement la servlet

    merci comme meme jowo

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Débutant] ajouter une image dans picturebox a partir d'une listbox
    Par gindistimoo dans le forum VB.NET
    Réponses: 1
    Dernier message: 30/05/2012, 14h40
  2. Appeler une JSP à partir d'une JSP
    Par fessebleu dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 23/02/2011, 01h07
  3. Réponses: 3
    Dernier message: 14/03/2010, 00h38
  4. Réponses: 4
    Dernier message: 03/06/2008, 18h20
  5. Réponses: 12
    Dernier message: 26/03/2008, 16h40

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