2013-01-16 9 views
6

Devo eseguire un'azione struts2 all'avvio del server piuttosto che alla prima richiesta.Come si esegue un'azione all'avvio del server utilizzando Struts2?

+0

Perché si desidera chiamare un ACTION all'avvio del server? – DarkHorse

+0

Ho bisogno di preinizializzare alcuni dati memorizzati nell'ambito dell'applicazione in modo che le richieste ajax di accedere a quei dati rispondano velocemente dalla prima richiesta dell'utente. – LNyarla

risposta

4

Il caricamento dei dati all'avvio di un'applicazione è un'attività comune, troverete diversi esempi sul web. Come detto in altre risposte, dovresti implementare un ServletContextListener (che non è Struts2 specifico) ... puoi read a great example here.

La cosa importante è capire il concetto di azione:

In Struts2 MVC quadro (Model View Controller), un Action è il Controller (e parte del Model).

Action s sono invocati dai Request s provenienti dalle Client s (e uno d'azione si crea a ogni richiesta, quindi sono thread-safe).

Ciò significa che è necessario un Cliente, che di solito corrisponde a significa un ragazzo davanti a un PC, facendo clic su un browser ... quindi, una chiamata client non è il trigger corretto per eseguire operazioni automatizzate, lato server su oggetti condivisi.

Naturalmente è possibile implementare qualche forma di lazy-initialitazion (ad es.con l'aiuto di un Interceptor personalizzato) in modo che il primo utente configuri qualcosa nell'ambito dell'applicazione e gli altri utenti recuperino l'oggetto già popolato, ma questo non è il modo migliore per farlo (dovresti gestire la concorrenza sull'iniziale, e avresti un utente, il primo, in attesa di operazioni che il server avrebbe potuto fare nella notte all'avvio ...).

2

Scrivere un ServletContextListener, questo sarà disponibile solo per ogni applicazione Web e verrà instillato al momento della distribuzione dell'applicazione.

Qui è il carico post

1

su start-up nel servlet e JSP è presente come di seguito

Si può chiedere pagina da caricare all'avvio del server. Questo viene fatto attraverso il file web.xml

<servlet> 
<servlet-name>login</servlet-name> 
<jsp-file>/login.jsp</jsp-file> 
<load-on-startup>1</load-on-startup> 
</servlet> 

lima Normalmente jsp è compila il primo colpo. Ora il codice dice precompilare un file jsp senza attendere il primo colpo.

For struts2 you can change programatically in web.xml 

<listener> 
    <listener-class>your listener class</listener-class> 
</listener> 

riferiscono questo link potrebbe essere utile a voi

Loadonstart up.

+0

Dovresti dare spiegazioni E collegamenti (e eventualmente codice) :) I collegamenti da soli non sono raccomandati perché se il sito esterno non è attivo, i lettori non saranno in grado di capire la risposta –

1

Se si vuole un po 'di codice da eseguire quando il vostro applicazione web, alias Servlet Context, viene avviato per la prima volta, poi si dovrebbe sfruttare i ganci forniti dalla tecnologia. L'API Servlet fornisce hook di ciclo di vita da utilizzare per il codice di attivazione in varie fasi del ciclo di vita di un'applicazione Web. Dal momento che tutte le applicazioni di Struts 2 sono le applicazioni web dell'API servlet , è possibile sfruttarle da soli.

L'interfaccia ServletContextListener fornisce un metodo di hook di init. Implementa semplicemente questa interfaccia e registra la tua implementazione nel web.xml.

Nota, se ciò che devi fare è più specifico di Struts 2, puoi prendere in considerazione l'utilizzo di qualcosa dall'interno dell'API di Struts 2.

Problemi correlati