Link to home
Start Free TrialLog in
Avatar of matthew016
matthew016Flag for Belgium

asked on

question about invalidate()

Hi,

A user can, on my website, log out.

1) He clicks on a link
    <li><a href="index.html?do=logout">déconnexion</a></li>
    The page will be forwarded to the servlet index.html

2) In the servlet, I invalidate the session, then forward to index.jsp

            else if(action.equals("logout")) {
                  HttpSession session = request.getSession();
                  session.invalidate();
                  getServletContext().getRequestDispatcher(urlIndex).forward(request,response);
                  return;
            }

3) In index.jsp, I have this code :
    <%
      metier.IUtilisateur util = (metier.IUtilisateur) session.getAttribute("utilisateur");
    %>
    <% if(util == null) { %>
          <link rel="stylesheet" type="text/css" href="css/menu2NonAuthentifie.css"/>
    <% } else { %>
          <link rel="stylesheet" type="text/css" href="css/menu2Authentifie.css"/>
    <% } %>

    And util gives me null, without an exception. (I know the code is not nice)


But why when I try this in a JSP (for testing) :

            session.invalidate();
            
            metier.IUtilisateur util = (metier.IUtilisateur) session.getAttribute("utilisateur");
            if(util == null) {
                        [...]

I have an error :

java.lang.IllegalStateException: "getAttribute": Session déjà invalidée
      org.apache.catalina.session.StandardSession.getAttribute(StandardSession.java:1011)
      org.apache.catalina.session.StandardSessionFacade.getAttribute(StandardSessionFacade.java:109)
      org.apache.jsp.chat2_jsp._jspService(chat2_jsp.java:61)
      org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
      javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
      org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
      org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
      org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
      javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
      controleur.Controleur.connecterChat(Controleur.java:268)
      controleur.Controleur.doGet(Controleur.java:78)
      controleur.Controleur.doPost(Controleur.java:375)
      javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
      javax.servlet.http.HttpServlet.service(HttpServlet.java:802)



SOLUTION
Avatar of suprapto45
suprapto45
Flag of Singapore image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of matthew016

ASKER

Ok, but why with the points 1), 2) and 3) I have no errors,
I do exactly the same thing
Okay,

One question. For point #3, is "<link rel="stylesheet" type="text/css" href="css/menu2NonAuthentifie.css"/>" executed?
Yes, that all works fine ...
Mm...., this is weird

I just realized that it is not NullPointerException but IllegalStateException. Give me a sec
In point #3,

Do you catch any exception or any error message in the console?
Nothing.
That's why I post this question, because I don't understand why with 1)2)3) it works
and not when I put the instructions close to each other.
I do not really know what happens.

If in my local machine, it definitely throws me the NullPointerException. The reason you get the IllegalStateException is because you use
http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/http/HttpSession.html

However, for the working case in the #3, I don't really know why. It should not work. Sorry, can't help further.

David
So do u test each time, before accessing a session, if it is valid ?
Yes,

You have to do that instead of directly accessing it. when the session is valid, it is working fine but if the session is not valid, you will get NullPointerException as you are trying to cast NULL values to certain classes as

metier.IUtilisateur util = (metier.IUtilisateur) session.getAttribute("utilisateur");

if it is null, it is somehing like

metier.IUtilisateur util = (metier.IUtilisateur) null;

David
My suggestion is to keep this thread open for few more days as today is weekend and not all experts are available here.

Hopefully by Monday some other experts may pop in and give you the right answer.
ASKER CERTIFIED SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of rrz
I agree with suprato45 and jaggernat.
We are talking about two session objects in the 123  testing sequence.  But only one session object in the single page test.
Ok, I think I understand.

Correct me if I'm wrong,

in step two I "delete" the session,
and when I forward to index.jsp (step 3) A new session is created where I do not have attribute "utilisateurs" in it.
SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of jaggernat
jaggernat

agree with rrz
Thank u very much for your support !