2015-12-14 6 views
-2

Bonjour j'ai le code ci-dessusQuel est le problème avec HttpSession?

import javax.servlet.*; 
import javax.servlet.http.*; 
import java.io.*; 
import java.util.*; 


public class CarSessionServlet2 extends HttpServlet { 
    private String Brands[] = { 
     "Audi", "Ford", "Toyota" 
    }; 
    private String Cars[] = { 
     "A3", "Fiesta", "Yaris" 
    }; 
    private String screen = "name"; 

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // reaction 


     if (screen.equals("name")) { //elegxos apo poia selida kalw tin doPost. Edw apo tin BrandsSelection.html 

      String cookieName = request.getParameter("name"); // choice made 
      // will be sent 
      // back to 
      // client 
      String cookieBrand = request.getParameter("brands"); 

      PrintWriter output; 

      HttpSession session = request.getSession(true); 
      session.setAttribute("name", cookieName); 




      session.setAttribute(cookieBrand, getCars(cookieBrand)); 

      response.setContentType("text/html"); 

      output = response.getWriter(); 

      // send HTML page to client 
      output.println("<HTML><HEAD><meta charset='utf-8'><TITLE>"); 
      output.println("Cookies"); 
      output.println("</TITLE></HEAD><BODY>"); 
      output.println("<P>Welcome Ms./Mr.: "); 
      // output.println("<P>"); 
      output.println(cookieName); 
      output.println(" <BR> you have chosen "); 
      output.println(cookieBrand); 
      output.println("<BR><a href='SecondPage.html'>" + "Click here to continue..." + "</a>"); 
      output.println("</BODY></HTML>"); 
      output.close(); // close stream 
      screen = "color"; 


     } 

     if (screen.equals("color")) { //elegxos apo poia selida kalw tin doPost. Edw apo tin SecondPage.html 
      PrintWriter output; 
      String color = request.getParameter("color"); 

      HttpSession session = request.getSession(true); 
      session.setAttribute("color", color); 

      response.setContentType("text/html"); 
      output = response.getWriter(); 

      // send HTML page to client 
      output.println("<HTML><HEAD><meta charset='utf-8'><TITLE>"); 
      output.println("Cookies"); 
      output.println("</TITLE></HEAD><BODY>"); 
      output.println("<FORM ACTION=\"http://localhost:8080/Askisi2Session/CarSessionServlet2\" METHOD=\"GET\">"); 
      output.println("<STRONG>To see your selections press the button:<br> </STRONG>"); 
      output.println("<INPUT TYPE=\"submit\" VALUE=\"Selections\">"); 
      output.println("</FORM>"); 
      output.println("</BODY></HTML>"); 

      output.close(); // close stream 
      screen = "name"; 
     } 
    } 

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // reaction 
     // to 
     // the 
     // reception 
     PrintWriter output; // of 
     // GET 
     response.setContentType("text/html"); 
     output = response.getWriter(); 

     output.println("<HTML><HEAD><meta charset='utf-8'><TITLE>"); 
     output.println("Cookie with your selections has been read !"); 
     output.println("</TITLE></HEAD><BODY>"); 

     HttpSession session = request.getSession(false); // get client's session; 
     output.println("<H3>Here is your saved session data:</H3>"); 
     Enumeration e; 
     if (session != null) { 
      e = session.getAttributeNames(); 
     } else { 
      e = null; 
     } 
     while (e.hasMoreElements()) { 
      String name = (String) e.nextElement(); 
      output.println(name + ": " + session.getAttribute(name) + "<BR>"); 
     } 





     output.println("<a href='BrandsSelection.html'>Click here to Restart...</a>"); 
     output.println("</BODY></HTML>"); 
     output.close(); // close stream 
    } 

    private String getCars(String conString) { 
     for (int i = 0; i < Brands.length; ++i) 
     if (conString.equals(Brands[i])) { 
      return Cars[i]; 
     } 

     return ""; // no matching string found 

    } 

} // END OF CLASS CookieServlet 

quand je le lance avec tomcat 8.0.28 je reçois un java.lang.NullPointerException mentionner

java.lang.NullPointerException 
CarSessionServlet2.getCars(CarSessionServlet2.java:155) 
CarSessionServlet2.doPost(CarSessionServlet2.java:43) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:648) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 

Ligne 43 est que

session.setAttribute(cookieBrand,getCars(cookieBrand)); 

et ligne 155 est que

if (conString.equals(Brands[i])) { 

D'abord, j'ouvre une page html, je remplis une zone de texte, fais un choix sur un bouton radio puis j'appuie sur un bouton submit qui appelle la méthode doPost. Ensuite, une deuxième page html apparaît. Je remplis une autre zone de texte et en appuyant sur un autre bouton submit j'appelle à nouveau la méthode doPost (2nd if statement, screen = color). Et puis ..... NullPointerException. Il était censé apparaître une autre page html avec un bouton qui appelle la méthode doGet. Je ne sais pas pourquoi je prends cette exception

Html Page 1 (BrandsSelection)

<HTML> 
<HEAD> 
    <TITLE>Cookie will be written in our disc</TITLE> 
</HEAD> 
<BODY> 
    <FORM ACTION="http://localhost:8080/Askisi2Session/CarSessionServlet2" METHOD="POST">  
     <STRONG>Enter Your Name:<br> </STRONG> 
     <PRE> 
     <INPUT TYPE="text" NAME="name"><br><br> 
     <STRONG>Select the Brand of your Desire:<br> </STRONG> 
     <PRE> 
     <INPUT TYPE="radio" NAME="brands" VALUE="Audi">check here for Audi<BR> 
     <INPUT TYPE="radio" NAME="brands" VALUE="Ford">check here for Ford<BR> 
     <INPUT TYPE="radio" NAME="brands" VALUE="Toyota" CHECKED>check here for Toyota<BR> 
     </PRE> 
     <INPUT TYPE="submit" VALUE="Submit"> 
     <INPUT TYPE="reset"> </P> 
    </FORM> 
</BODY> 

</HTML> 

HTML PAGE 2 (SeondPage)

<HTML> 
<HEAD> 
    <TITLE>Cookie taken into Account</TITLE> 
</HEAD> 
<BODY> 
    <FORM ACTION="http://localhost:8080/Askisi2Session/CarSessionServlet2" METHOD="POST"> 
     <STRONG>What is your favorite color?<br> </STRONG> 
     <PRE> 
     <INPUT TYPE="text" NAME="color"><br> 
     </PRE> 
     <INPUT TYPE="submit" VALUE="Submit"> 
    </FORM> 
</BODY> 
</HTML> 
+0

Pouvez-vous nous donner toutes les pages html? –

+0

Le point est que le même code avec des cookies, pas de session comme ci-dessus cela fonctionne. C'est pourquoi c'est étrange pour moi – ParisL

+0

@BalusC Comment puis-je obtenir la marque de la forme ?. C'est comme ça ... – ParisL

Répondre

0

Cette méthode getCars(...) retour "" parce que la condition if(conString.equals(Brands[i])) doesn ne correspond à aucune chaîne:

private String getCars(String conString) { 
    for (int i = 0; i < Brands.length; ++i) 
    if (conString.equals(Brands[i])) { 
     return Cars[i]; 
    } 

    return ""; 

    }