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

Développement Web en Java Discussion :

Erreur 500 NullPointerException


Sujet :

Développement Web en Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 174
    Par défaut Erreur 500 NullPointerException
    Salut ,,

    Voila , j'ai un formulaire upload.jsp ou j'entre la description dans un champ text et j'ai un autre champ file , ou je met mon fichier , je veux après avoir cliquer sur le bouton Envoyer , afficher devant chaque champ le nom que j'ai déja ecris dans le champ descripton et le nom du fichier que j'ai uploader , sauf que ca me donne l'erreur : Etat HTTP 500 - java.lang.NullPointerException
    com.fichier.upload.Upload.getNomFichier(Upload.java:85)
    com.fichier.upload.Upload.doPost(Upload.java:61)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)


    Voila mon formulaire upload.jsp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <form action="Upload" method="post" enctype="multipart/form-data">
     
     
    Description : <input type="text" name="descrip"/> ${description}<br>
     
     
    Fichier : <input type="file" name="fiche"/> ${fiche}<br>
     
    <input type="submit" value="Envoyer"/>
     
    </form>
    Et voila ma servlet Upload ou je fais mon traitement :

    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
    public class Upload extends HttpServlet {
     
     
        public static final String CHAMP_DESCRIPTION = "description";
        public static final String CHAMP_FICHIER     = "fiche";
     
        protected void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException,
                IOException {
            this.getServletContext().getRequestDispatcher( "/WEB-INF/upload.jsp" ).forward( request, response );
        }
     
        /**
         * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
         *      response)
         */
        protected void doPost( HttpServletRequest request, HttpServletResponse response ) throws ServletException,
                IOException {
     
            String description = request.getParameter( "descrip" );
     
            request.setAttribute( CHAMP_DESCRIPTION, description );
     
            /*
             * Les données reçues sont multipart, on doit donc utiliser la méthode
             * getPart() pour traiter le champ d'envoi de fichiers.
             */
            Part part = request.getPart( CHAMP_FICHIER );
     
            /*
             * Il faut déterminer s'il s'agit d'un champ classique ou d'un champ de
             * type fichier : on délègue cette opération à la méthode utilitaire
             * getNomFichier().
             */
            String nomFichier = getNomFichier( part );
     
            /*
             * Si la méthode a renvoyé quelque chose, il s'agit donc d'un champ de
             * type fichier (input type="file").
             */
            if ( nomFichier != null && !nomFichier.isEmpty() ) {
                String nomChamp = part.getName();
                request.setAttribute( nomChamp, nomFichier );
            }
     
            this.getServletContext().getRequestDispatcher( "/WEB-INF/upload.jsp" ).forward( request, response );
     
        }
     
        /*
         * Méthode utilitaire qui a pour unique but d'analyser l'en-tête
         * "content-disposition", et de vérifier si le paramètre "filename" y est
         * présent. Si oui, alors le champ traité est de type File et la méthode
         * retourne son nom, sinon il s'agit d'un champ de formulaire classique et
         * la méthode retourne null.
         */
        private static String getNomFichier( Part part ) {
            /* Boucle sur chacun des paramètres de l'en-tête "content-disposition". */
            for ( String contentDisposition : part.getHeader( "content-disposition" ).split( ";" ) ) {
                /* Recherche de l'éventuelle présence du paramètre "filename". */
                if ( contentDisposition.trim().startsWith( "filename" ) ) {
                    /*
                     * Si "filename" est présent, alors renvoi de sa valeur,
                     * c'est-à-dire du nom de fichier.
                     */
                    return contentDisposition.substring( contentDisposition.indexOf( '=' ) + 1 );
                }
            }
            /* Et pour terminer, si rien n'a été trouvé... */
            return null;
     
        }
    }
    Merci

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 174
    Par défaut
    Pas de réponse ?

  3. #3
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    1) Assure toi que Part n'est pas null avant d'appeler getNomfichier avec
    2) Assure toi que part.getHeader( "content-disposition" ) n'est pas null avant de tenter de faire un split dessus.

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 174
    Par défaut
    Bein je remplis tout mon formulaire , je ne sais pas quoi faire de plus

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Dans ton code, tu dois gérer ces cas.

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 174
    Par défaut
    J'abandonne , j'ai trouvé ce bout de code je l'ai testé mais ca marche toujours pas , n'y as t-il pas une autre methode pour faire le même traitement ? je suis sur Tomcat 7 , voila 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
    <?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">
      <display-name>Fichier</display-name>
      <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>
     
      <servlet>
     
      <servlet-name>Upload</servlet-name>
      <servlet-class>com.fichier.upload.Upload</servlet-class>
     
      <multipart-config>
            <location>C:\Games</location>
            <max-file-size>10485760</max-file-size> <!-- 10 Mo -->
            <max-request-size>52428800</max-request-size> <!-- 5 x 10 Mo -->
            <file-size-threshold>1048576</file-size-threshold> <!-- 1 Mo -->
        </multipart-config>
     
      </servlet>
     
     
     
    </web-app>
    Voila le code que je viens de mettre :

    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
     protected void doPost( HttpServletRequest request, HttpServletResponse response ) throws ServletException,
                IOException {
     
            String description = request.getParameter( CHAMP_DESCRIPTION );
     
            request.setAttribute( CHAMP_DESCRIPTION, description );
     
            Part part = request.getPart( CHAMP_FICHIER );
            /*
             * Il faut déterminer s'il s'agit d'un champ classique ou d'un champ de
             * type fichier : on délègue cette opération à une méthode utilitaire
             * getNomFichier().
             */
            String nomFichier = getNomFichier( part );
     
            if ( nomFichier == null ) {
                /*
                 * La méthode a renvoyé null, il s'agit donc d'un champ classique
                 * ici (input type="text|radio|checkbox|etc", select, etc).
                 */
                String nomChamp = part.getName();
                /*
                 * Récupération du contenu du champ à l'aide de notre nouvelle
                 * méthode
                 */
                String valeurChamp = getValeur( part );
                request.setAttribute( nomChamp, valeurChamp );
     
            } else if ( !nomFichier.isEmpty() ) {
                /*
                 * La méthode a renvoyé quelque chose, il s'agit donc d'un champ de
                 * type fichier (input type="file").
                 */
                String nomChamp = part.getName();
                request.setAttribute( nomChamp, nomFichier );
     
            }
     
            this.getServletContext().getRequestDispatcher( "/WEB-INF/upload.jsp" ).forward( request, response );
     
        }
     
        /*
         * Méthode utilitaire qui a pour unique but d'analyser l'en-tête
         * "content-disposition", et de vérifier si le paramètre "filename" y est
         * présent. Si oui, alors le champ traité est de type File et la méthode
         * retourne son nom, sinon il s'agit d'un champ de formulaire classique et
         * la méthode retourne null.
         */
        private static String getNomFichier( Part part ) {
            /* Boucle sur chacun des paramètres de l'en-tête "content-disposition". */
            for ( String contentDisposition : part.getHeader( "content-disposition" ).split( ";" ) ) {
                /* Recherche de l'éventuelle présence du paramètre "filename". */
                if ( contentDisposition.trim().startsWith( "filename" ) ) {
                    /*
                     * Si "filename" est présent, alors renvoi de sa valeur,
                     * c'est-à-dire du nom de fichier.
                     */
                    return contentDisposition.substring( contentDisposition.indexOf( '=' ) + 1 );
                }
            }
            /* Et pour terminer, si rien n'a été trouvé... */
            return null;
     
        }
     
        /*
         * Méthode utilitaire qui a pour unique but de lire l'InputStream contenu
         * dans l'objet part, et de le convertir en une banale chaîne de caractères.
         */
        private String getValeur( Part part ) throws IOException {
            BufferedReader reader = new BufferedReader( new InputStreamReader( part.getInputStream(), "UTF-8" ) );
            StringBuilder valeur = new StringBuilder();
            char[] buffer = new char[1024];
            int longueur = 0;
            while ( ( longueur = reader.read( buffer ) ) > 0 ) {
                valeur.append( buffer, 0, longueur );
            }
            return valeur.toString();
        }
    }

Discussions similaires

  1. Réponses: 0
    Dernier message: 28/07/2010, 19h10
  2. XMLC_ReleaseXMLApplication : Erreur 500 ?
    Par Sylvain James dans le forum XMLRAD
    Réponses: 1
    Dernier message: 09/05/2005, 23h35
  3. [tomcat] Erreur 500 à l'appel de la servlet
    Par Kyti dans le forum Tomcat et TomEE
    Réponses: 26
    Dernier message: 06/04/2005, 09h37
  4. [web] [CGI][Easyphp] erreur 500
    Par nico72 dans le forum Web
    Réponses: 11
    Dernier message: 29/07/2004, 20h08
  5. Réponses: 6
    Dernier message: 28/10/2002, 11h34

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