Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2005
    Messaggi
    415

    [J2EE] include nelle servlet

    Ciao a tutti,

    dovrei includere all'inizio di ogni servlet della mia applicazione web un controllo per verificare che sia valorizzata una variabile di sessione o meno.
    Se già valorizzata la servlet deve proseguire normalmente con l'elaborazione, se non ancora valorizzata l'utente deve essere indirizzato ad una pagina contenente un form dove inserire user e password.

    Provenendo dal PHP, avrei realizzato una porzione di codice ad hoc e lo avrei incluso all'inizio di ogni pagina tramite la funzione "include". Esiste un qualcosa di analogo che possa fare al caso mio per quanto riguarda le servlet?

    Grazie,

    Matteo

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    44
    Salve, io farei un metodo statico in una classe apposita, importi la classe nelle servlet e utilizzi il metodo. Il metodo riceverà come parametro la request(da cui ottieni l'oggetto HttpSession) e farà il contollo con l'eventuale reindirizzamento. Penso che cosi possa andare bene.

    Cia cia

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2005
    Messaggi
    415
    Qual'è il vantaggio di usare un metodo statico? Ho provato a vedere sulla guida che ho, ma non ho capito molto. Potresti farmi un esempio di come scriveresti la classe e il metodo? Non mi interessa il contenuto del metodo e/o i costruttori, ma come li definisci.
    Grazie mille.

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    44
    Salve, il vantaggio sta solo nel fatto che un metodo statico lo puoi richiamare senza istanziare la classe, ma lo puoi fare anche non statico. Un metodo statico esiste a prescindere dallo stato dell'oggetto a cui appartiene.

    codice:
    class esempio
    {
           static void metodo(HttpServletRequest request)
           {
                    ... ... .
           }
    }
    e lo richiami cosi:

    codice:
    esempio.metodo(request);
    poi nel metodo fai controllo e reindirizzamento.

    Cia cia

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2005
    Messaggi
    415
    Grazie mille per la risposta.

    Chiedendo, ho ricevuto anche un altro suggerimento significativo: cioè di fare una servlet che nel costruttore faccia questo controllo e di fare in modo che le altre servlet estendano quella.

  6. #6
    http://java.sun.com/products/servlet/Filters.html

    usa i filtri.
    scrivi il codice che deve precedere la servlet, e tramite web.xml indichi quali servlet class o url pattern devono essere filtrati dal filtro.

    Penso sia il modo più flessibile e scalabile per risolvere il problema.

  7. #7
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    Chiedendo, ho ricevuto anche un altro suggerimento significativo: cioè di fare una servlet che nel costruttore faccia questo controllo e di fare in modo che le altre servlet estendano quella.
    Non mi sembra proprio un buon consiglio, se così è stato espresso.
    Se il controllo viene fatto nel costruttore, allora viene fatto una volta sola, cioè quando la servlet viene instanziata, il che accade solo una volta da quando l'applicazione web viene avviata. Mentre i valori in sessione possono cambiare più volte.

    Un'altra soluzione che può essere utilizzata è questa:

    Costruisci una classe astratta ServletBase che estende Servlet.
    Avrà:
    - un metodo check(session) che effettua i controlli in sessione
    - un metodo astratto do(request, response)
    - il metodo service (request, response), che diventa molto semplice:

    se check restituisce true, esegue il metodo do, altrimenti reindirizzerà a una pagina di errore.

    Quando realizzi un tuo server estendi ServletBase ed implementi il metodo do, che in pratica "sostitiusce" il metodo service quando la sessione è ok.

    Questo modo di fare risulta particolarmente utile per dotare tutte le servlet di un accesso a un database, ad esempio, invece di check avrai getConnection e il metodo do avrà come parametro anche la Connection.

    Per il controllo della sessione in effetti il filter è più appropriato. Comunque anche quello appena esposto è un design-pattern di tutto rispetto, nel suo ambito di utilizzo..

    Ciao
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.