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 :

forward servlet


Sujet :

Servlets/JSP Java

  1. #1
    En attente de confirmation mail
    Inscrit en
    Octobre 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 113
    Points : 60
    Points
    60
    Par défaut forward servlet
    bonjour,

    j'aimerais que a l'appel de mon servlet que celle donne la main a une page jsp. puis cette derniere retourne la main a la servlet avec un fichier a traiter.le pb c que ,on debogant ,que le compilateur passe les instructions de forward puis m'affiche un message de null pointer exception (et c normal parceque dans le reste du code il suppose qu'il recoit un fichier de la jsp).voila le code de 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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     
    		if(init==1){
     
    			RequestDispatcher di= getServletContext().getRequestDispatcher("/jsp/adminUpload.jsp");
     
    			di.forward(request, response);
    			init=0;
    		}
    		response.setContentType("text/html");
    		PrintWriter out = response.getWriter();
     
    		out.println("<HTML>");
    		out.println("<HEAD><TITLE> Titre </TITLE></HEAD>");
    		out.println("<BODY>");
     
    		//location=request.gets;
    		Iterator it=items.iterator();
     
    		while(it.hasNext()){
    			FileItem item = (FileItem) it.next();
    			out.println("la taille de items "+items.size());
    			out.println("<br/>");
    			out.println("item is empty? "+items.isEmpty());
     
    			image=new File(item.getName());
    			out.println("<br/>");
    			out.println("le taille est "+item.getSize());
    			out.println("<br/>");
    			out.println("le context de l'application est: ");
    			out.println("<br/>");
    			out.println("le nom du nouveau fichier est"+image.getAbsolutePath());
    			try {
    				item.write(image);
    			} catch (Exception e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    			out.println("<br/>");
    			out.println("la taille du nouveau fichier est"+image.length());
     
    		}
     
    		//out.println(request.getParameter("image"));
    		out.println("</BODY>");
    		out.println("</HTML>");
    		out.close();
     
    	}  	
     
    	/* (non-Java-doc)
    	 * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     
    		boolean isMultipart;
    		if (isMultipart = ServletFileUpload.isMultipartContent(request)) {
     
    			// Create a factory for disk-based file items
    			FileItemFactory factory = new DiskFileItemFactory();
     
    			// Create a new file upload handler
    			ServletFileUpload upload = new ServletFileUpload(factory);
     
    			// Parse the request
    			try {
    				items = upload.parseRequest(request);
    			} catch (FileUploadException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
     
    		doGet(request, response);
     
    	}   	  	  
     
    	/* (non-Javadoc)
    	 * @see javax.servlet.GenericServlet#init()
    	 */
    	public void init() throws ServletException {
    		init=1;
     
     
    	}

    du nouveau je sollicite votre aide
    merci

  2. #2
    Expert éminent sénior
    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 : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Il faudrait peut etre nous donner le stacktrace de l'exception, le code de la jsp et le code de la premier servlet.

  3. #3
    En attente de confirmation mail
    Inscrit en
    Octobre 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 113
    Points : 60
    Points
    60
    Par défaut
    merci pour la reponse.
    c la meme servlet qui a appele la jsp.
    le code de la jsp est le suivant.mais la page n'aille pas du tout a la 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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <script type="text/JavaScript">
    function verifier(objet){
    if(objet.image.value==""){
    alert("vous devez selectionnez une image");
    return false;
    }
    else{
    objet.submit();
    }
     
    }
     
     
     
    </script>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>hello</title>
    </head>
    <body>
    <center>
    <FORM ENCTYPE="multipart/form-data" 
    method="post"  action="/aymenproject2/uploadVideo">
    <INPUT TYPE="File" NAME="image" value="">
    <INPUT TYPE='button' name='bouton' VALUE='upload' onclick="verifier(this.form)">
    </FORM>
     
     
    </center>
    </body>
    </html>
    et voila l'exception
    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
     
    java.lang.NullPointerException
    	at aymen.uploadVideo.doGet(uploadVideo.java:61)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
    	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    	at java.lang.Thread.run(Unknown Source)

  4. #4
    Expert éminent sénior
    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 : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    il viens d'ou ton "items" dans la servlet? Et quelle ligne de code correspond à l'erreur (on a pas les numéros de ligne ici)

  5. #5
    En attente de confirmation mail
    Inscrit en
    Octobre 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 113
    Points : 60
    Points
    60
    Par défaut
    l'erreur vient de cette instruction: Iterator it=items.iterator(); ceux ci est normal car si la servlet ne donne pas la main a la jsp elle n'aura pas un fichier dans la request est donc c normal qu'elle aura un null pointer exception.mon pb c que je comprend pas pourqoui la servlet ne donne pas la main a la jsp dans ce block:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if(init==1){
     
    			RequestDispatcher di= getServletContext().getRequestDispatcher("/jsp/adminUpload.jsp");
     
    			di.forward(request, response);
    			init=0;
    		}
    meme que la condition est vrai et que le compilateur entre dans le bloc (j'ai verifier en debogant)

  6. #6
    Expert éminent sénior
    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 : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    items est un champ de la servlet? Si oui, il n'y a aucun moyen pour la jsp de modifier ce champ. Je crois que tu confond le request scope, accessible depuis la servlet via request.getAttribute("item") et les variables de ta méthode / champs de ta servlet. Vu que tu ne récupère pas item après l'appel à la jsp, je vois pas comment tu pourrais espérer qu'il est initialisé. Bref le transfert de donnée entre deux servlet ou serlvet/jsp quand tu utilise le forward, se fait surtout via request.[get/set]Attribute()

  7. #7
    En attente de confirmation mail
    Inscrit en
    Octobre 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 113
    Points : 60
    Points
    60
    Par défaut
    merci pour la reponse
    tout fonctionne correctement si j'appel d'abord la jsp puis que cette derniere appel la servlet.j'ai voulu ajouter le fait que la servlet appel lord d'init la servlet(en mettant init=1 dans init() ) ceux ci fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if(init==1){
     
    			RequestDispatcher di= getServletContext().getRequestDispatcher("/jsp/adminUpload.jsp");
     
    			di.forward(request, response);
    			init=0;
    		}
    ceux ci fonctionne(la valeur init prend 1 etle compilateur entre dans cette boucle mais il fait pas le forward!!!).
    tout le pb est dans ce bloc.

  8. #8
    Expert éminent sénior
    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 : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    il viens d'ou ce init? Si c'est un champ de la servlet, c'est pas bon. Les servelt sont appelées en parallèle, et donc les champs sont un mauvais plan car à accès concurrent. Si c'est une variable locale, t'es pas plus avancé, car la jsp réappelant ta servlet le fera dans une nouvel appel, et donc avec une nouvelle variable locale. -> Tu dois aboslument traiter init en tant qu'attribute de la requete (request.setAttribute/request.getAttribute)

  9. #9
    En attente de confirmation mail
    Inscrit en
    Octobre 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 113
    Points : 60
    Points
    60
    Par défaut
    merci pour la reponse,
    je profite de cette discussion pour mieux comprendre les servlets.j'ai fais ça parceque il disent toujours que la methode init() est execute une seule fois puis les restes se sont des threads.

  10. #10
    Membre averti Avatar de welcome_59
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 203
    Points : 352
    Points
    352
    Par défaut
    -> Tu dois aboslument traiter init en tant qu'attribute de la requete (request.setAttribute/request.getAttribute)
    C'est ce que je recommanderais aussi, mais il y a une autre possibilité: déclarer init comme propriété de la servlet et synchroniser tous les accès en écriture à init.

  11. #11
    Expert éminent sénior
    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 : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    sauf que, si je suis bien la logique de son code, il a un "init" par requete. Donc en tant que propriété de la servelt ca marche pas.

Discussions similaires

  1. Réponses: 7
    Dernier message: 22/07/2009, 18h22
  2. [Servlet] Question Forward d'une requête
    Par matthew016 dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 11/08/2006, 14h46
  3. [Servlets]Include/Forward
    Par Quartus dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 04/05/2006, 13h02
  4. [ servlet ] forward
    Par Pi2 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 17/02/2006, 14h09
  5. [servlet][JSP]forwarder dans une frame
    Par deldin dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 30/06/2004, 18h03

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