Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do i get ServletContext object in a simple class file?

Tags:

java

servlets

I am creating a simple web application. I need to get reference to ServletContext object in that class. How can i get it?

like image 356
TCM Avatar asked Apr 28 '10 11:04

TCM


People also ask

Which is the correct way to get ServletContext object?

How to get the object of ServletContext interface. getServletContext() method of ServletConfig interface returns the object of ServletContext. getServletContext() method of GenericServlet class returns the object of ServletContext.

Which method is used to retrieve an attribute from a ServletContext?

Since the ServletContext object is available to all the servlets of the Web application, other servlets can retrieve the attribute from the ServletContext object by using the getAttribute() method.


1 Answers

You'd better pass it as argument to the constructor of your object, or set it using a setter method.

In fact, you may obtain the context attribute that is relevant to your object and pass only it via constructor/setter. For example:

YourClass obj = 
    new YourClass((AnotherClass) servletContext.getAttribute("yourAttribute"));

A much worse and more complication option is to:

  1. Create a ServletContextListener
  2. register it in web.xml with <listener><listener-class></listener-class></listener>
  3. on contextInitialized(..) get the ServletContext from the event and store it in a singleton - a static field somehwere.

Alternatively, you can do this on each request, using a ServletRequestListener and store it in a ThreadLocal instead.

Then you can obtain the value via calling your singleton/threadlocal holder like this:

ServletContextHolder.getCurrentServletContext()
like image 117
Bozho Avatar answered Sep 22 '22 19:09

Bozho