2010-04-28 8 views
8

Sto creando una semplice applicazione web. Ho bisogno di ottenere riferimenti all'oggetto ServletContext in quella classe. Come posso averlo?Come posso ottenere l'oggetto ServletContext in un semplice file di classe?

+1

Per favore basta passarlo. Non andare per l'opzione peggiore. Per cosa ti serve esattamente? Su quali metodi ti piacerebbe invocare? Ci devono essere modi migliori per raggiungere questo obiettivo. – BalusC

risposta

15

Faresti meglio a passarlo come argomento al costruttore del tuo oggetto, o impostarlo usando un metodo setter.

In effetti, è possibile ottenere l'attributo di contesto che è rilevante per il proprio oggetto e passarlo solo tramite costruttore/setter. Per esempio:

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

A molto peggiore e più possibilità complicazione è quello di:

  1. Creare un ServletContextListener
  2. registrarlo in web.xml con <listener><listener-class></listener-class></listener>
  3. sul contextInitialized(..) ottenere il ServletContext dall'evento e memorizzarlo in un singleton - un campo statico qualche volta.

In alternativa, è possibile farlo su ogni richiesta, utilizzando un ServletRequestListener e riporlo in un ThreadLocal invece.

Quindi è possibile ottenere il valore tramite chiamando il vostro Singleton/titolare ThreadLocal come questo:

ServletContextHolder.getCurrentServletContext() 
+1

Oppure passare a un costruttore una copia/vista di 'ServletContext' relativa all'oggetto in questione. –

+0

@ Tom: questo è già menzionato nella prima frase. – BalusC

+0

forse Tom intendeva che dovresti ottenere l'attributo di contesto che è rilevante per l'oggetto e passarlo solo. Lo includerò. – Bozho

0

ho avuto questo problema, ma dal momento che avevo chiamato la classe da un JSP, ho semplicemente passato la richiesta HttpServletRequest" "riferimento dal JSP alla classe e ha effettuato la chiamata in classe a:

String appPath = request.getServletContext().getRealPath(""); 
Problemi correlati