Dhruv
Dhruv

Reputation: 1728

how to forward session from one servlet to another?

Hey guys i'm working on admin module for my project. When a person logs-in, a request is sent to login servlet. When it further ask for some other report by clicking other options a request for the report is sent to other servlet which gives the result on the page which is shown at the time of user which is of normal type. The session is lost between two servlets.

I am trying to navigate the generated report on some other page but for that i need to know user type in second servlet. This can be done by fetching value of user_type from login module bean class.

How to handle this situation? thanks

My login servlet is :

LoginService user = new LoginService();
                 user.setUserName(request.getParameter("username"));
                 user.setPassword(request.getParameter("password"));

                 user = UserDAO.login(user);

                 if (user.isValid())
                 {

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



                      if(user.getUser_type().equalsIgnoreCase("admin")){

                          response.sendRedirect("administrator/homepage.jsp");
                      }else{

                      response.sendRedirect("homepage.jsp"); //logged-in page
                      }
                 }

                 else 
                      response.sendRedirect("invalidlogin.jsp"); //error page 
            } 

i tried using this in second servlet:-

LoginService session = (LoginService)request.getAttribute("currentSessionUser");

            String drake = session.getUser_type();
            System.out.println("usertype = " +drake);

Here LoginService is the bean class of login module. i'm get a nullpointer exception here.

Upvotes: 0

Views: 11026

Answers (1)

G_H
G_H

Reputation: 11999

I think you're trying to do stuff that your web container should handle for you... A session should automatically be maintained over the course of multiple servlet calls from the same client session. Methods from HttpServlet are given a HttpServletRequest. You can obtain the corresponding HttpSession using one of the getSession methods of that class.

You can bind stuff to the HttpSession using setAttribute and getAttribute.

EDIT: I'm taking this from the Servlet spec 2.5:

A servlet can bind an object attribute into an HttpSession implementation by name. Any object bound into a session is available to any other servlet that belongs to the same ServletContext and handles a request identified as being a part of the same session.

I think you're better off getting the HttpSession object from the HttpServletRequest (at least assuming it's a HttpServlet) and setting/getting attributes through that. If you choose a proper name (it follows the same convention as Java package naming) for your attribute, you can be sure the returned object, as long as it's not null, can be cast to whatever type you put in there. Setting and getting attributes on the request itself isn't gonna help, I don't think stuff will get carried over from one servlet call to the next unless you call one servlet from the other with a RequestDispatcher, but that's not what you're after here.

So in your second code sample, do (LoginService)request.getSession().getAttribute("currentSessionUser");, that ought to work. Make sure to check for nulls and maybe choose an attribute name that uses your project's package name convention (like com.mycompany...).

I wouldn't mind a second opinion here since I'm not much of an EE/web developer.

Upvotes: 3

Related Questions