Can I access session object from within a function where request object is not present?
I know in Java we access session like this:
HttpSession session = request.getSession(true);
But what if we want to access session when request object is not present?
Edit
I have a servlet
public class ABC extends HttpServlet
{
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException
{
..........
...........
myFun1(x,y,z);
}
private void myFun1(int x, int y,long z)
{
.........
myFun2(a,b);
}
private void myFun2(int a,String b)
{
.........
// Need Session here
}
}
How to get the HttpSession object ? The HttpServletRequest interface provides two methods to get the object of HttpSession: public HttpSession getSession():Returns the current session associated with this request, or if the request does not have a session, creates one.
The session object is used to track a client session between client requests. JSP makes use of the servlet provided HttpSession Interface. This interface provides a way to identify a user across.
Getting HttpSession Object in Spring Controller is very easy . Just Put it as a method parameter in controller method and Spring will automatically inject it . There is another approach where we create Session scoped Controller . This Controller get created for each session and controller object is stored in session.
The client can create session attributes in a request by calling either the PostContent or the PostText operation with the sessionAttributes field set to a value. A Lambda function can create a session attribute in a response.
It depends what you mean by "when request object is not present". You could have a thread-local variable which sets the "current request for this thread" early in the servlet or whatever you're running (you haven't made it clear). Then you could get at "the current request in this thread" from anywhere, and get the session that way. (Or along the same lines, you could set the current session instead of the current request in the thread-local variable.)
It's not terribly pretty though, and you have problems if you want to do something on a different thread. Passing the request or session down as a dependency is generally cleaner.
Generally speaking though, if you want to access the http session from a place where the request object is not available then you may have design problems in your application and you need to rethink about concerns, layering etc.
If you implement JSF technology in to your application you can access everything by calling;
FacesContext.getCurrentInstance();
Because this is a singleton instance retrieved, you can access it anywhere in your presentation layer.
However, implementing JSF is probably slightly overkill just for this purpose as you'll probably have to make a lot of changes in your configuration and presentation layers to accommodate for it.
That said, if you do decide to go down that road, you can also think about using MyFaces, which is a fantastic API for those using JSF in their applications.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With